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