]> git.ozlabs.org Git - next-scripts/blobdiff - fetch_trees
do_build: use the native powerpc compiler
[next-scripts] / fetch_trees
index bc5ac7fad90ea3e36edb84af706c594bb844caca..87e1b6cca2ab0af600b4f83b07af0f4dece748a8 100755 (executable)
 #!/bin/bash
 
-IFS='  '
+. "$(dirname $0)/common.sh" ""
 
-origwd=$(pwd)
+[ "$1" = "-n" ] && {
+       shift
+       last=$(tail -n1 $SHA1_FILE | cut -f1 -d$'\t')
+       start_from=$(awk -F '\t' '/^[^#]/ && $3 == "'$last'" { do getline; while (/^#/ || $2 == "branch"); print $3; exit 0; }' $CTRL_FILE)
+}
 
-while read email type name url ref; do
-       [[ "$email" =~ '^#.*$' ]] && {
-               echo $name: skipped
-               continue
+[ "$1" = "-s" ] && {
+       shift
+       start_from="$1"
+       [ -z "$start_from" ] && {
+               echo "-s requires a start tree" 1>&2
+               exit 1
        }
-       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
+       shift
+}
+
+get_field()
+{
+       awk -F '\t' '/^[^#]/ && $3 == "'$1'" { print $'$2'; }' $CTRL_FILE
+}
+
+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
+
                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
+               setfattr -x user.xdg.origin.url * >/dev/null 2>&1
+       )
+}
+
+trees="$@"
+[ "$trees" ] ||
+       trees=$(awk -F '\t' '/^[^#]/ && $2 != "branch" { print $3 }' $CTRL_FILE)
+
+for name in $trees; do
+       [ -n "$start_from" ] && {
+               if [ "$name" = "$start_from" ]; then
+                       start_from=""
+               else
+                       continue
+               fi
+       }
+
+       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 -m "$(date '+%F-%H:%M')" -e
+git add -A .
+[ "$(git status --porcelain)" ] &&
+       git commit -v -a -m "$(date '+%F-%H:%M')" -e
 
 exit 0