]> git.ozlabs.org Git - next-scripts/blob - do_merge
ff19ef6f17be0386c1b6f2c586bb553175b0d96f
[next-scripts] / do_merge
1 #!/bin/bash
2
3 LOG_FILE="../merge.log"
4 build_host="sprygo"
5 build_dir="/scratch/sfr/next"
6 build_cmd="bin/build_next"
7
8 no_build=false
9 [ "$1" = "-n" ] && {
10         shift
11         no_build=true
12 }
13 [ -n "$1" ] && build_host="$1"
14
15 cp /dev/null $LOG_FILE
16
17 log()
18 {
19         echo "$@" | tee -a $LOG_FILE
20 }
21
22 execute()
23 {
24         log "$" $@
25         $@ 2>&1 | tee -a $LOG_FILE
26         return ${PIPESTATUS[0]}
27 }
28
29 execute git checkout master
30 execute git reset --hard stable
31
32 heads=$(grep -v '^#' ../real_control | awk -F ' ' '$2=="quilt" { printf("quilt/%s ", $3); } $2=="git" { printf("%s/%s ", $3, $5); }')
33
34 need_build=false
35
36 for h in $heads; do
37         tree=${h%/*}
38         [ "$tree" == "quilt" ] && tree=${h#quilt/}
39         log Merging $h
40         old_head=$(git rev-parse HEAD)
41         execute git merge $h || {
42                 echo Merge failed 1>&2
43                 bash -i || exit
44                 GIT_EDITOR=: execute git commit -v -a
45                 execute git diff -M --stat --summary 'HEAD^..'
46         }
47         $no_build && continue
48         $need_build || {
49                 # See if we need to build after merging this tree
50                 new_head=$(git rev-parse HEAD)
51                 [ "$old_head" = "$new_head" ] ||
52                         need_build=true
53                 $need_build || 
54                         [ "$(git diff ${old_head}.. | wc -c)" -eq 0 ] ||
55                         need_build=true
56         }
57         $need_build ||
58                 continue
59         do_build=$(grep -v '^#' ../real_control | awk -F '      ' '$3=="'$tree'" { print $6; }')
60         [ "$do_build" = "yes" ] ||
61                 continue
62         rsync -avH --exclude .git --delete . "$build_host":"$build_dir"/. || {
63                 echo Rsync failed 1>&2
64                 bash -i || exit
65         }
66         ssh "$build_host" "$build_cmd" || {
67                 echo Build failed 1>&2
68                 bash -i || exit
69         }
70         need_build=false
71 done
72
73 exit 0