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