]> git.ozlabs.org Git - next-scripts/blob - fetch_trees
fetch_trees: use git tricks to only store the first lines of some akpm patches
[next-scripts] / fetch_trees
1 #!/bin/bash
2
3 . "$(dirname $0)/common.sh" ""
4
5 origwd=$(pwd)
6
7 get_field()
8 {
9         grep -v '^#' $CTRL_FILE |
10                 awk -F '\t' '$3 == "'$1'" { print $'$2'; }'
11 }
12
13 trees="$@"
14 [ "$trees" ] ||
15         trees=$(grep -v '^#' $CTRL_FILE | awk -F '\t' '{ print $3 }')
16
17 for name in $trees; do
18         type=$(get_field "$name" 2)
19
20         echo $name: $type
21         if [ "$type" = "git" ]; then
22                 git fetch "$name"
23                 continue
24         fi
25
26         if [ "$type" = "mmotm" ]; then
27                 cd ../mmotm || {
28                         echo "Cannot chdir to ../mmotm" 1>&2
29                         continue
30                 }
31                 rsync -avHPz --exclude .git\* --exclude broken-out.tar.gz --delete ozlabs.org::akpm/mmotm/. .
32                 git add -A .
33                 [ "$(git status --porcelain)" ] &&
34                         git commit -m "$(head -n 1 .DATE)"
35                 cd "$origwd"
36                 continue
37         fi
38
39         if [ "$type" = "quilt" ]; then
40                 url=$(get_field "$name" 4)
41                 url=${url%/}    # strip trailing / if necessary
42
43                 cd ../quilt || {
44                         echo "Cannot chdir to ../quilt" 1>&2
45                         continue
46                 }
47                 [ -d "$name" ] || mkdir "$name" || {
48                         echo "Cannot create quilt directory for $name" 1>&2
49                         cd "$origwd"
50                         continue
51                 }
52                 cd "$name" || {
53                         echo "Cannot chdir to quilt directory for $name" 1>&2
54                         cd "$origwd"
55                         continue
56                 }
57                 wget -N -nv --no-cache "$url/series" || {
58                         echo "Wget of $name series file failed" 1>&2
59                         cd ..
60                         rm -rf "$name"
61                         git checkout "$name"
62                         cd "$origwd"
63                         continue
64                 }
65                 find * -type f | grep -v '^series$' | sort >.series.old
66                 if grep -q NEXT_PATCHES series; then
67                         sed -n '/NEXT_PATCHES_START/,/NEXT_PATCHES_END/p' series
68                 else
69                         cat series
70                 fi |
71                         sed -e 's/[ \t]*#.*$//' -e '/^[ \t]*$/d' |
72                         sort >.series.next
73                 [ -s .series.next ] && {
74                         sed "s|^|$url/|" .series.next |
75                                         wget -N -nv --no-cache -i - || {
76                                 echo "Wget of series '$name' failed" 1>&2
77                                 cd ..
78                                 rm -rf "$name"
79                                 git checkout "$name"
80                                 cd "$origwd"
81                                 continue
82                         }
83                 }
84                 comm -23 .series.old .series.next | xargs -r rm -f
85                 rm -f .series.old .series.next
86                 cd "$origwd"
87         fi
88 done
89
90 cd ../quilt
91 git add -A .
92 git commit -v -a -m "$(date '+%F-%H:%M')" -e
93
94 exit 0