]> git.ozlabs.org Git - next-scripts/blob - update_trees
various fixes
[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         fi
39         rbase="$base"
40         case "$base" in
41         *-git[0-9]*)    rbase=$(wget -q -O - "http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-${base}.id")
42                         ;;
43         commit*)        rbase=$(expr "$base" : "commit[         ]*\(.*\)")
44                         ;;
45         [0-9]*.*)       rbase="v$base"
46                         ;;
47         esac
48         log "Importing $name based on $base"
49         rbase_sha1=$(git rev-parse --verify "$rbase^{commit}") || {
50                 log "Unknown BASE"
51                 continue
52         }
53         mv -f "$sfile" "$sfile.orig"
54         if grep -q NEXT_PATCHES "$sfile.orig"; then
55                 do_echo=:
56                 while read line; do
57                         case $line in
58                         *NEXT_PATCHES_START*)   do_echo=echo
59                                                 ;;
60                         *NEXT_PATCHES_END*)     do_echo=:
61                                                 ;;
62                         esac
63                         $do_echo $line
64                 done <"$sfile.orig" >"$sfile"
65         else
66                 cp "$sfile.orig" "$sfile"
67         fi
68
69         git show-ref --quiet --verify "refs/heads/quilt/$name" ||
70                 execute git branch "quilt/$name" "$rbase_sha1"
71
72         mv -f "$sfile" "$sfile.tmp"
73         sed -e '/^[     ]*$/d' -e '/^[  ]*#/d' <"$sfile.tmp" >"$sfile"
74         rm -f "$sfile.tmp"
75         [ -s "$sfile" ] || {
76                 log "   quilt series is empty"
77                 [ -f "$sfile.orig" ] &&
78                         mv -f "$sfile.orig" "$sfile"
79                 execute git update-ref "refs/heads/quilt/$name" "$rbase_sha1"
80                 continue
81         }
82
83         execute git checkout "quilt/$name"
84         execute git reset --hard "$rbase_sha1"
85
86         author=$(grep -v '^#' ../real_control | awk -F '        ' '$3=="'"$name"'" { printf("%s", $1); }' | sed 's/,.*$//')
87         execute git quiltimport --author "$author" --patches "../quilt/$name"
88
89         [ -f "$sfile.orig" ] &&
90                 mv -f "$sfile.orig" "$sfile"
91 done
92
93 ( cd ../quilt; git update-ref refs/heads/last_merge HEAD )
94
95 git checkout master
96
97 exit 0