X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=merge_old_version;h=bc3ec5fee4a6307e4826f5c873984dcf5344b4f4;hb=8b9ae4a6483b09ae920a1eb04362207e4fb5b7f0;hp=41833eaeb507230c06a88e794fa5b86bb30ad69b;hpb=b668cf4b4a1b8b96b146c2c1b04de7568f144478;p=next-scripts diff --git a/merge_old_version b/merge_old_version index 41833ea..bc3ec5f 100755 --- a/merge_old_version +++ b/merge_old_version @@ -1,33 +1,25 @@ #!/bin/bash -LOG_FILE="../merge.log" -build_host="ka2" -build_dir="/scratch/sfr/next" -build_cmd="bin/build_next" - no_build=false [ "$1" = "-n" ] && { shift no_build=true } -tree=$1 -ver=$2 - -rev=$(git show-ref --verify --hash "refs/next/$ver/$tree") -[ "$rev" ] || { - echo "No such tree/date" 1>&2 - exit 1 -} - -[ -n "$3" ] && { - build_host="$3" +if [ "$1" ]; then + tree=$1 shift -} -[ -n "$3" ] && { - build_dir="$3" +else + tree= +fi +if [ "$1" ]; then + ver="next-${1#next-}" shift -} +else + ver=$(git tag -l next-\* | sort | tail -n 1) +fi + +. "$(dirname $0)/common.sh" log() { @@ -41,15 +33,46 @@ execute() return ${PIPESTATUS[0]} } +line="$(tail -n 1 $SHA1_FILE)" + +# strip everything after the first tab character +stree=${line%% *} +if [ "$tree" ]; then + [ "$tree" = "$stree" ] || { + echo "That is not the last tree merged ($tree v $stree)" 1>&2 + exit 1 + } +else + tree="$stree" +fi + +rev=$(git show ${ver}:Next/SHA1s | sed -n "s/^$tree\t\t*//p") +[ "$rev" ] || { + echo "No previous tree/date ($tree/$ver)" 1>&2 + exit 1 +} + +bad_rev=$(git rev-parse --verify 'HEAD^2') + +tab="\t" +[ $(echo "$tree" | wc -c) -le 8 ] && tab="\t\t" + +# strip evrything up to the last tab character +srev=${line##* } +[ "$bad_rev" = "$srev" ] || { + echo "bad last line in $SHA1_FILE" 1>&2 + exit 1 +} + GIT_EDITOR=: execute git reset --hard 'HEAD^' || { echo "git reset failed" 1>&2 bash -i || exit } -log Merging "refs/next/$ver/$tree" -execute git merge "refs/next/$ver/$tree" || { +log Merging "$ver version of $tree" +execute git merge -m "$ver/$tree" "$rev" || { echo Merge failed 1>&2 - echo "refs/next/$ver/$tree" >>../merge.debug + echo "$ver version of $tree" >>../merge.debug git diff >>../merge.debug 2>&1 git diff 2>&1 | egrep -q '<<<<<|^\*' && { bash -i || exit @@ -59,25 +82,25 @@ execute git merge "refs/next/$ver/$tree" || { } [ -f "../merge-fixes/$tree" ] && { for p in $(cat "../merge-fixes/$tree"); do - ../tools/merge_fix -n "$p" || { + $(dirname $0)/merge_fix -n "$p" || { bash -i || exit } done } d=$(date --date "5 hours ago" '+%Y%m%d') -git update-ref "refs/next/$d/broken/$tree" "refs/next/$d/$tree" -git update-ref "refs/next/$d/$tree" "refs/next/$ver/$tree" + +sed -i '$d' $SHA1_FILE +printf "%s$tab%s\n" $tree $rev >>$SHA1_FILE $no_build && exit 0 -git push -f "$build_host":"$build_dir" master:refs/heads/next || { +git push -f "${build_host}${build_host:+:}${build_dir}" master:refs/heads/next || { echo git push failed 1>&2 bash -i || exit } -echo "Building using $build_cmd on $build_host" -ssh "$build_host" "$build_cmd" || { +"$bin_dir/do_build" "$tree" || { echo Build failed 1>&2 bash -i || exit }