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