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