]> git.ozlabs.org Git - next-scripts/blob - update_trees
cope with comments after patch names in quilt series
[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         sfile="../quilt/$name/series"
26         base=$(sed -n 's/^#[    ]*NEXT[-_]BASE[         ]*\([^  ]*\)[   ]*$/\1/p' "$sfile")
27         if [ -n "$base" ]; then
28                 base=$(grep -v '^#' ../real_control | awk -F '  ' '$3=="'"$base"'" { if ($2=="quilt") printf("quilt/%s", "'"$base"'"); else printf("%s/%s", "'"$base"'", $5); }')
29         else
30                 base=$(sed -n 's/^#[    ]*BASE[         ]*\(.*\)[       ]*$/\1/p' "$sfile")
31                 [ -n "$base" ] || {
32                         # for stgit
33                         base=$(sed '1{s/^#.*GIT commit \(.*\)$/\1/;q}' "$sfile")
34                         [ -n "$base" ] ||
35                                 base="origin/master"
36                 }
37         fi
38         rbase="$base"
39         case "$base" in
40         *-git[0-9]*)    rbase=$(wget -q -O - "http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-${base}.id")
41                         ;;
42         commit*)        rbase=$(expr "$base" : "commit[         ]*\(.*\)")
43                         ;;
44         [0-9]*.*)       rbase="v$base"
45                         ;;
46         esac
47         log "Importing $name based on $base"
48         rbase_sha1=$(git rev-parse --verify "$rbase^{commit}") || {
49                 log "Unknown BASE"
50                 continue
51         }
52
53         # don't bother importing things that haven't changed
54         mb=$(git merge-base "$rbase_sha1" "quilt/$name")
55         change_size=$(cd ../quilt;git diff last_merge.. -- "$name/" | wc -c)
56         [ "$mb" = "$rbase_sha1" ] && [ $change_size -eq 0 ] && {
57                 log "Unchanged quilt series $name"
58                 continue
59         }
60
61         mv -f "$sfile" "$sfile.orig"
62         do_echo=echo
63         grep -q NEXT_PATCHES "$sfile.orig" && do_echo=:
64         while read line; do
65                 case $line in
66                 *NEXT_PATCHES_START*)   do_echo=echo
67                                         ;;
68                 *NEXT_PATCHES_END*)     do_echo=:
69                                         ;;
70                 esac
71                 $do_echo $line
72         done <"$sfile.orig" |
73                 sed -e 's/[     ]*#.*$//' -e '/^[       ]*$/d' >"$sfile"
74
75         git show-ref --quiet --verify "refs/heads/quilt/$name" ||
76                 execute git branch "quilt/$name" "$rbase_sha1"
77
78         [ -s "$sfile" ] || {
79                 log "   quilt series is empty"
80                 mv -f "$sfile.orig" "$sfile"
81                 execute git update-ref "refs/heads/quilt/$name" "$rbase_sha1"
82                 continue
83         }
84
85         [ -d "../quilt-tmp" ] ||
86                 execute git clone -s -l -n -q . ../quilt-tmp
87
88         log '$' cd ../quilt-tmp
89         cd ../quilt-tmp
90         execute git reset --hard "$rbase_sha1"
91
92         author=$(grep -v '^#' ../real_control | awk -F '        ' '$3=="'"$name"'" { printf("%s", $1); }' | sed 's/,.*$//')
93         execute git quiltimport --author "$author" --patches "../quilt/$name"
94
95         log '$' cd ../next
96         cd ../next
97
98         execute git fetch -f ../quilt-tmp master:"quilt/$name"
99
100         mv -f "$sfile.orig" "$sfile"
101 done
102
103 [ -d "../quilt-tmp" ] &&
104         rm -rf ../quilt-tmp
105
106 ( cd ../quilt; git update-ref refs/heads/last_merge HEAD )
107
108 exit 0