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