Files
linuxkit/scripts/update-component-sha.sh
Ian Campbell 4320c3928f update-component-sha.sh: support update of image with tagged release.
This updates to support updating things like `linuxkit/runc:v0.3` to a new hash
(or tag).

Running:

    ./scripts/update-component-sha.sh --image linuxkit/runc 100d0d046c

Still DTRT and updates runc to that (bogus) sha.

Furthermore, running:

    ./scripts/update-component-sha.sh --image linuxkit/runc v0.4

Updates runc to that (bogus) release (this worked before) but now running:

    ./scripts/update-component-sha.sh --image linuxkit/runc acba8886e4

Inverts things and puts them back.

(this is not quote a nop because
src/cmd/linuxkit/vendor/github.com/moby/tool/src/moby/linuxkit.go has a
different sha in it which is not put back)

Signed-off-by: Ian Campbell <ijc@docker.com>
2018-04-25 10:50:26 +01:00

82 lines
1.6 KiB
Bash
Executable File

#!/bin/sh
set -e
##
#
# script to replace hashes in config files
# see usage() for usage and functionality
#
usage() {
cat >&2 <<EOF
$0 --<mode> <how-to-find> <new-hash>
Available modes: --hash and --image
Replace by hash:
$0 --hash <OLD> <NEW>
Example: $0 --hash 8675309abcdefg abcdef567899
Will replace all instances of 8675309abcdefg with abcdef567899
Replace by image: $0 --image <IMAGE> <NEW>
$0 --image <IMAGE> <NEW>
Example: $0 --image linuxkit/foo abcdef567899
Will tag all instances of linuxkit/foo with abcdef567899
$0 --image <IMAGE>:<NEW> is accepted as a convenient shortcut for cutting
and pasting e.g.the output of linuxkit pkg show-tag
By default, for convenience, if no mode is given (--image or --hash), the first method (--hash) is assumed.
Thus the following are equivalent:
$0 <OLD> <NEW>
$0 --hash <OLD> <NEW>
EOF
}
# backwards compatibility
if [ $# -eq 2 -a -n "${1%--*}" ]; then
set -- "--hash" "$1" "$2"
fi
# sufficient arguments
if [ $# -lt 2 -o $# -gt 3 ] ; then
usage
exit 1
fi
# which mode?
case "$1" in
--hash)
if [ $# -ne 3 ] ; then
usage
exit 1
fi
old=$2
new=$3
git grep -w -l "\b$old\b" | xargs sed -i.bak -e "s,$old,$new,g"
;;
--image)
case $# in
2)
image=${2%:*}
hash=${2#*:}
;;
3)
image=$2
hash=$3
;;
esac
git grep -E -l "\b$image:" | xargs sed -i.bak -E -e "s,$image:([[:xdigit:]]{40}|v[0-9\.]+),$image:$hash,g"
;;
*)
echo "Unknown mode $1"
usage
exit 1
;;
esac
find . -name '*.bak' | xargs rm