]> git.ozlabs.org Git - next-scripts/blob - update_trees
Set default base to oriing/master
[next-scripts] / update_trees
1 #!/bin/bash
2
3 #cp /dev/null ../quilt-import.log
4
5 log()
6 {
7         echo "$@" | tee -a ../quilt-import.log
8 }
9
10 execute()
11 {
12         log "$" $@
13         "$@" 2>&1 | tee -a ../quilt-import.log
14         [ ${PIPESTATUS[0]} -eq 0 ] || sh -i || {
15                 [ -f "$sfile.orig" ] &&
16                         mv -f "$sfile.orig" "$sfile"
17                 exit 1
18         }
19 }
20
21 quilters=$(grep -v '^#' ../real_control | awk -F '      ' '$2=="quilt" { print $3; }')
22
23 for name in $quilters; do
24
25         # don't bother importing things that haven't changed
26         change_size=$(cd ../quilt;git diff last_merge.. -- "$name/" | wc -c)
27         [ $change_size -eq 0 ] && {
28                 log "Unchanged quilt series $name"
29                 continue
30         }
31
32         sfile="../quilt/$name/series"
33         base=$(sed -n 's/^[#    ]*NEXT_BASE[    ]*\(.*\)[       ]*$/\1/p' "$sfile")
34         if [ -n "$base" ]; then
35                 base=$(grep -v '^#' ../real_control | awk -F '  ' '$3=="'"$base"'" { if ($2=="quilt") printf("quilt/%s", "'"$base"'"); else printf("%s/%s", "'"$base"'", $5); }')
36         else
37                 base=$(sed -n 's/^[#    ]*BASE[         ]*\(.*\)[       ]*$/\1/p' "$sfile")
38                 [ -n "$base" ] ||
39                         base="origin/master"
40         fi
41         rbase="$base"
42         case "$base" in
43         *-git[0-9]*)    rbase=$(wget -q -O - "http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-${base}.id")
44                         ;;
45         commit*)        rbase=$(expr "$base" : "commit[         ]*\(.*\)")
46                         ;;
47         [0-9]*.*)       rbase="v$base"
48                         ;;
49         esac
50         log "Importing $name based on $base"
51         rbase_sha1=$(git rev-parse --verify "$rbase^{commit}") || {
52                 log "Unknown BASE"
53                 continue
54         }
55         mv -f "$sfile" "$sfile.orig"
56         if grep -q NEXT_PATCHES "$sfile.orig"; then
57                 do_echo=:
58                 while read line; do
59                         case $line in
60                         *NEXT_PATCHES_START*)   do_echo=echo
61                                                 ;;
62                         *NEXT_PATCHES_END*)     do_echo=:
63                                                 ;;
64                         esac
65                         $do_echo $line
66                 done <"$sfile.orig" >"$sfile"
67         else
68                 cp "$sfile.orig" "$sfile"
69         fi
70
71         git show-ref --quiet --verify "refs/heads/quilt/$name" ||
72                 execute git branch "quilt/$name" "$rbase_sha1"
73
74         mv -f "$sfile" "$sfile.tmp"
75         sed -e '/^[     ]*$/d' -e '/^[  ]*#/d' <"$sfile.tmp" >"$sfile"
76         rm -f "$sfile.tmp"
77         [ -s "$sfile" ] || {
78                 log "   quilt series is empty"
79                 [ -f "$sfile.orig" ] &&
80                         mv -f "$sfile.orig" "$sfile"
81                 execute git update-ref "refs/heads/quilt/$name" "$rbase_sha1"
82                 continue
83         }
84
85         execute git checkout "quilt/$name"
86         execute git reset --hard "$rbase_sha1"
87
88         author=$(grep -v '^#' ../real_control | awk -F '        ' '$3=="'"$name"'" { printf("%s", $1); }' | sed 's/,.*$//')
89         execute git quiltimport --author "$author" --patches "../quilt/$name"
90
91         [ -f "$sfile.orig" ] &&
92                 mv -f "$sfile.orig" "$sfile"
93 done
94
95 ( cd ../quilt; git update-ref refs/heads/last_merge HEAD )
96
97 git checkout master
98
99 exit 0