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