]> git.ozlabs.org Git - next-scripts/commitdiff
new script to fetch a single tree
authorStephen Rothwell <sfr@canb.auug.org.au>
Tue, 19 May 2009 08:33:26 +0000 (18:33 +1000)
committerStephen Rothwell <sfr@canb.auug.org.au>
Tue, 19 May 2009 08:33:26 +0000 (18:33 +1000)
fetch_one_tree [new file with mode: 0755]

diff --git a/fetch_one_tree b/fetch_one_tree
new file mode 100755 (executable)
index 0000000..77ffec4
--- /dev/null
@@ -0,0 +1,115 @@
+#!/bin/bash
+
+name=$1
+[ "$name" ] || {
+       echo "Usage: $0 <tree>" 1>&2
+       exit 1
+}
+
+get_field()
+{
+       grep -v '^#' ../real_control |
+               awk -F '        ' '$3 == "'$1'" { print $'$2'; }'
+}
+
+type=$(get_field "$name" 2)
+[ "$type" ] || {
+       echo "Unknown tree: $name" 1>&2
+       exit 1
+}
+
+echo $name: $type
+
+[ "$type" = "git" ] && {
+       git fetch "$name"
+       exit 0
+}
+
+[ "$type" = "quilt" ] || {
+       echo "Unknow tree type: $type" 1>&2
+       exit 1
+}
+
+url=$(get_field "$name" 4)
+
+case "$url" in
+http://kernel.org/*|http://www.kernel.org/*)
+       use_rsync=true
+       rurl=$(echo "$url" | sed -r 's,^http://(www\.)?kernel\.org,master.kernel.org:,')
+       ;;
+http://ozlabs.org/~*)
+       use_rsync=true
+       rurl=$(echo "$url" | sed -r 's,^http://ozlabs\.org/([^/]*),ozlabs.org:\1/public_html,')
+       ;;
+*)
+       use_rsync=false
+       ;;
+esac
+
+cd ../quilt || {
+       echo "Cannot chdir to ../quilt" 1>&2
+       exit 1
+}
+[ -d "$name" ] || mkdir "$name" || {
+       echo "Cannot create quilt directory for $name" 1>&2
+       exit 1
+}
+cd "$name" || {
+       echo "Cannot chdir to quilt directory for $name" 1>&2
+       exit 1
+}
+
+if $use_rsync; then
+       rsync -avz "$rurl/series" series || {
+               echo "rsync of $name series file failed" 1>&2
+               cd ..
+               rm -rf "$name"
+               git checkout "$name"
+               exit 1
+       }
+else
+       wget -N -nv --no-cache "$url/series" || {
+               echo "Wget of $name series file failed" 1>&2
+               cd ..
+               rm -rf "$name"
+               git checkout "$name"
+               exit 1
+       }
+fi
+find * -type f | grep -v '^series$' | sort >.series.old
+do_echo=echo
+grep -q NEXT_PATCHES series &&
+       do_echo=:
+while read line; do
+       case "$line" in
+       *NEXT_PATCHES_START*)   do_echo=echo ;;
+       *NEXT_PATCHES_END*)     do_echo=: ;;
+       ''|\#*)                 : ;;
+       *)                      $do_echo $line ;;
+       esac
+done <series | sort >.series.next
+if $use_rsync; then
+       rsync -avz --files-from .series.next "$rurl" . || {
+               echo "rsync of series '$name' failed" 1>&2
+               cd ..
+               rm -rf "$name"
+               git checkout "$name"
+               exit 1
+       }
+else
+       wget -N -nv --no-cache -B "$url" -i .series.next || {
+               echo "Wget of series '$name' failed" 1>&2
+               cd ..
+               rm -rf "$name"
+               git checkout "$name"
+               exit 1
+       }
+fi
+comm -23 .series.old .series.next | xargs -r git rm -f
+rm -f .series.old .series.next
+
+git add .
+
+#git commit -v -a -m "$(date '+%F-%H:%M')" -e
+
+exit 0