]> git.ozlabs.org Git - next-scripts/blob - merge_old_version
propogate NEXT_BUILD_HOST/DIR everywhere
[next-scripts] / merge_old_version
1 #!/bin/bash
2
3 LOG_FILE="../merge.log"
4 SHA1_FILE="../SHA1s"
5 build_host="ka2"
6 build_dir="/scratch/sfr/next"
7 build_cmd="bin/build_next"
8 [ "$NEXT_BUILD_HOST" ] && build_host="$NEXT_BUILD_HOST"
9 [ "$NEXT_BUILD_DIR" ] && build_dir="$NEXT_BUILD_DIR"
10
11 no_build=false
12 [ "$1" = "-n" ] && {
13         shift
14         no_build=true
15 }
16
17 tree=$1
18 ver=$2
19
20 rev=$(git show next-${ver}:Next/SHA1s | sed -n "s/^$tree\t\t*//p")
21 [ "$rev" ] || {
22         echo "No such tree/date" 1>&2
23         exit 1
24 }
25
26 [ -n "$3" ] && {
27         build_host="$3"
28         shift
29 }
30 [ -n "$3" ] && {
31         build_dir="$3"
32         shift
33 }
34
35 export NEXT_BUILD_HOST="$build_host"
36 export NEXT_BUILD_DIR="$build_dir"
37
38 log()
39 {
40         echo "$@" | tee -a $LOG_FILE
41 }
42
43 execute()
44 {
45         log "$" $@
46         $@ 2>&1 | tee -a $LOG_FILE
47         return ${PIPESTATUS[0]}
48 }
49
50 bad_rev=$(git rev-parse --verify 'HEAD^2')
51
52 line="$(tail -n 1 $SHA1_FILE)"
53 tab="\t"
54 [ $(echo "$tree" | wc -c) -le 8 ] && tab="\t\t"
55 expected=$(printf "%s$tab%s" $tree $bad_rev)
56 [ "$line" = "$expected" ] || {
57         echo "bad last line in $SHA1_FILE" 1>&2
58         exit 1
59 }
60
61 GIT_EDITOR=: execute git reset --hard 'HEAD^' || {
62         echo "git reset failed" 1>&2
63         bash -i || exit
64 }
65
66 log Merging "$ver version of $tree"
67 execute git merge -m "$ver/$tree" "$rev" || {
68         echo Merge failed 1>&2
69         echo "$ver version of $tree" >>../merge.debug
70         git diff >>../merge.debug 2>&1
71         git diff 2>&1 | egrep -q '<<<<<|^\*' && {
72                 bash -i || exit
73         }
74         GIT_EDITOR=: execute git commit -v -a
75         execute git diff -M --stat --summary 'HEAD^..'
76 }
77 [ -f "../merge-fixes/$tree" ] && {
78         for p in $(cat "../merge-fixes/$tree"); do
79                 $(dirname $0)/merge_fix -n "$p" || {
80                         bash -i || exit
81                 }
82         done
83 }
84
85 d=$(date --date "5 hours ago" '+%Y%m%d')
86
87 sed -i '$d' $SHA1_FILE
88 printf "%s$tab%s\n" $tree $rev >>$SHA1_FILE
89
90 $no_build && exit 0
91
92 git push -f "$build_host":"$build_dir" master:refs/heads/next || {
93         echo git push failed 1>&2
94         bash -i || exit
95 }
96
97 echo "Building using $build_cmd on $build_host"
98 ssh "$build_host" "$build_cmd" || {
99         echo Build failed 1>&2
100         bash -i || exit
101 }
102
103 exit 0