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