]> git.ozlabs.org Git - next-scripts/blobdiff - merge_old_version
update to_build_host a bit
[next-scripts] / merge_old_version
index 41833eaeb507230c06a88e794fa5b86bb30ad69b..c5975ecc75e5f150b4d86408fdd644021ec199e7 100755 (executable)
@@ -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"
 
-$no_build && exit 0
+sed -i '$d' $SHA1_FILE
+printf "%s$tab%s\n" $tree $rev >>$SHA1_FILE
 
-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" || {
+$no_build && exit 0
+
+"$bin_dir/do_build" "$tree" || {
        echo Build failed 1>&2
        bash -i || exit
 }