]> git.ozlabs.org Git - next-scripts/blobdiff - fetch_trees
do_build: use the native powerpc compiler
[next-scripts] / fetch_trees
index 6eb01c8418e90494a6627dc976fb13247c577610..87e1b6cca2ab0af600b4f83b07af0f4dece748a8 100755 (executable)
@@ -2,70 +2,74 @@
 
 . "$(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)
+}
+
+[ "$1" = "-s" ] && {
+       shift
+       start_from="$1"
+       [ -z "$start_from" ] && {
+               echo "-s requires a start tree" 1>&2
+               exit 1
+       }
+       shift
+}
 
 get_field()
 {
-       grep -v '^#' $CTRL_FILE |
-               awk -F '\t' '$3 == "'$1'" { print $'$2'; }'
+       awk -F '\t' '/^[^#]/ && $3 == "'$1'" { print $'$2'; }' $CTRL_FILE
 }
 
-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
-       if [ "$type" = "git" ]; then
-               git fetch "$name"
-               continue
-       fi
+fetch_git()
+{
+       git fetch "$1"
+}
 
-       if [ "$type" = "mmotm" ]; then
+fetch_mmotm()
+{
+       (
                cd ../mmotm || {
                        echo "Cannot chdir to ../mmotm" 1>&2
-                       continue
+                       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
                }
-               rsync -avHP --exclude .git --exclude broken-out.tar.gz --delete ozlabs.org:~akpm/public_html/mmotm/. .
-               # we only use the fist lines of {origin,linux-next}.patch
-               [ -f broken-out/origin.patch ] &&
-                       sed -i 1q broken-out/origin.patch
-               [ -f broken-out/linux-next.patch ] &&
-                       sed -i 1q broken-out/linux-next.patch
                git add -A .
                [ "$(git status --porcelain)" ] &&
-                                git commit -m "$(head -n 1 .DATE)"
-               cd "$origwd"
-               continue
-       fi
+                       git commit -m "$(head -n 1 .DATE)"
+       )
+}
 
-       if [ "$type" = "quilt" ]; then
-               url=$(get_field "$name" 4)
+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 $name series file failed" 1>&2
+                       echo "Wget of $1 series file failed" 1>&2
                        cd ..
-                       rm -rf "$name"
-                       git checkout "$name"
-                       cd "$origwd"
-                       continue
+                       rm -rf "$1"
+                       git checkout "$1"
+                       return
                }
                find * -type f | grep -v '^series$' | sort >.series.old
                if grep -q NEXT_PATCHES series; then
@@ -76,24 +80,43 @@ for name in $trees; do
                        sed -e 's/[ \t]*#.*$//' -e '/^[ \t]*$/d' |
                        sort >.series.next
                [ -s .series.next ] && {
-                       sed "s|^|$url/|" .series.next |
-                                       wget -N -nv --no-cache -i - || {
-                               echo "Wget of series '$name' failed" 1>&2
+                       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"
-                               cd "$origwd"
-                               continue
+                               rm -rf "$1"
+                               git checkout "$1"
+                               return
                        }
                }
                comm -23 .series.old .series.next | xargs -r rm -f
                rm -f .series.old .series.next
-               cd "$origwd"
-       fi
+               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 -A .
-git commit -v -a -m "$(date '+%F-%H:%M')" -e
+[ "$(git status --porcelain)" ] &&
+       git commit -v -a -m "$(date '+%F-%H:%M')" -e
 
 exit 0