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