]> git.ozlabs.org Git - next-scripts/blobdiff - fetch_trees
make_tree_file: ssh_key_file is a parameter
[next-scripts] / fetch_trees
index eedd8301151ae8580647e1cb1c2464a4bb05eb0a..39f7924d0d28003d5cc3a642997a8756586fa2b3 100755 (executable)
@@ -1,97 +1,98 @@
 #!/bin/bash
 
-IFS='  '
+. "$(dirname $0)/common.sh" ""
 
-origwd=$(pwd)
+get_field()
+{
+       grep -v '^#' $CTRL_FILE |
+               awk -F '\t' '$3 == "'$1'" { print $'$2'; }'
+}
+
+fetch_git()
+{
+       git fetch "$1"
+}
+
+fetch_mmotm()
+{
+       (
+               cd ../mmotm || {
+                       echo "Cannot chdir to ../mmotm" 1>&2
+                       return
+               }
+               rsync -az --partial --exclude .git\* --exclude broken-out.tar.gz --delete ozlabs.org::akpm/mmotm/. . || {
+                       git reset --hard
+                       echo "Fetcing mmotm failed" 1>&2
+                       return
+               }
+               git add -A .
+               [ "$(git status --porcelain)" ] &&
+                       git commit -m "$(head -n 1 .DATE)"
+       )
+}
+
+fetch_quilt()
+{
+       (
+               url=$(get_field "$1" 4)
+               url=${url%/}    # strip trailing / if necessary
 
-while read email type name url ref; do
-       [[ "$email" =~ '^#.*$' ]] && {
-               echo $name: skipped
-               continue
-       }
-       echo $name: $type
-       if [ "$type" = "git" ]; then
-               git fetch "$name"
-               continue
-       fi
-       if [ "$type" = "quilt" ]; then
-               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
-                       continue
+                       return
                }
-               [ -d "$name" ] || mkdir "$name" || {
-                       echo "Cannot create quilt directory for $name" 1>&2
-                       cd "$origwd"
-                       continue
+               [ -d "$1" ] || mkdir "$1" || {
+                       echo "Cannot create quilt directory for $1" 1>&2
+                       return
                }
-               cd "$name" || {
-                       echo "Cannot chdir to quilt directory for $name" 1>&2
-                       cd "$origwd"
-                       continue
+               cd "$1" || {
+                       echo "Cannot chdir to quilt directory for $1" 1>&2
+                       return
+               }
+               wget -N -nv --no-cache "$url/series" || {
+                       echo "Wget of $1 series file failed" 1>&2
+                       cd ..
+                       rm -rf "$1"
+                       git checkout "$1"
+                       return
                }
-               if $use_rsync; then
-                       rsync -avz "$rurl/series" series || {
-                               echo "rsync of $name series file failed" 1>&2
-                               cd "$origwd"
-                               continue
-                       }
-               else
-                       wget -N -nv --no-cache "$url/series" || {
-                               echo "Wget of $name series file failed" 1>&2
-                               cd "$origwd"
-                               continue
-                       }
-               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"
-                               break
-                       }
+               if grep -q NEXT_PATCHES series; then
+                       sed -n '/NEXT_PATCHES_START/,/NEXT_PATCHES_END/p' series
                else
-                       wget -N -nv --no-cache -B "$url" -i .series.next || {
-                               echo "Wget of series '$name' failed" 1>&2
+                       cat series
+               fi |
+                       sed -e 's/[ \t]*#.*$//' -e '/^[ \t]*$/d' |
+                       sort >.series.next
+               [ -s .series.next ] && {
+                       wget -N -nv --no-cache -B "$url/" -i .series.next || {
+                               echo "Wget of series '$1' failed" 1>&2
                                cd ..
-                               rm -rf "$name"
-                               git checkout "$name"
-                               break
+                               rm -rf "$1"
+                               git checkout "$1"
+                               return
                        }
-               fi
+               }
                comm -23 .series.old .series.next | xargs -r rm -f
                rm -f .series.old .series.next
-               cd "$origwd"
-       fi
-done <../real_control
+       )
+}
+
+trees="$@"
+[ "$trees" ] ||
+       trees=$(grep -v '^#' $CTRL_FILE | awk -F '\t' '{ print $3 }')
+
+for name in $trees; do
+       type=$(get_field "$name" 2)
+
+       echo $name: $type
+       [ $(type -t "fetch_$type") = "function" ] &&
+               fetch_$type "$name"
+done
 
 cd ../quilt
-git add .
-git commit -v -a
+git add -A .
+[ "$(git status --porcelain)" ] &&
+       git commit -v -a -m "$(date '+%F-%H:%M')" -e
 
 exit 0