X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=fetch_trees;h=2db70cdb77e15bf0ba00ff54dda4a7bbf0447c24;hb=HEAD;hp=bc5ac7fad90ea3e36edb84af706c594bb844caca;hpb=55b78aef76403c64ad50c8e9cbb7d206a3d06698;p=next-scripts diff --git a/fetch_trees b/fetch_trees index bc5ac7f..2db70cd 100755 --- a/fetch_trees +++ b/fetch_trees @@ -1,97 +1,86 @@ #!/bin/bash -IFS=' ' +tools_dir=$(dirname "$0") +# shellcheck source=/dev/null +. "$tools_dir/common.sh" '' -origwd=$(pwd) +if [ "$1" = '-n' ]; then + 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") +fi -while read email type name url ref; do - [[ "$email" =~ '^#.*$' ]] && { - echo $name: skipped - continue - } - echo $name: $type - if [ "$type" = "git" ]; then - git fetch "$name" - continue +if [ "$1" = '-s' ]; then + shift + start_from="$1" + if [ -z "$start_from" ]; then + printf '-s requires a start tree\n' 1>&2 + exit 1 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 - } - [ -d "$name" ] || mkdir "$name" || { - echo "Cannot create quilt directory for $name" 1>&2 - cd "$origwd" - continue - } - cd "$name" || { - echo "Cannot chdir to quilt directory for $name" 1>&2 - cd "$origwd" - continue - } - 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.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 - } + shift +fi + +get_field() +{ + awk -F '\t' '/^[^#]/ && $3 == "'"$1"'" { print $'"$2"'; }' "$CTRL_FILE" +} + +fetch_git() +{ + git fetch "$1" +} + +fetch_mmotm() +( + if ! cd ../mmotm; then + printf 'Cannot chdir to ../mmotm\n' 1>&2 + return + fi + if ! rsync -az --partial --exclude '.git*' \ + --exclude broken-out.tar.gz --delete \ + gandalf.ozlabs.org::akpm/mmotm/. .; then + git reset --hard + printf 'Fetcing mmotm failed\n' 1>&2 + return + fi + git add -A . + if [ "$(git status --porcelain)" ]; then + git commit -m "$(head -n 1 .DATE)" + fi +) + +trees="$*" +if ! [ "$trees" ]; then + trees=$(awk -F '\t' '/^[^#]/ && $2 != "branch" { print $3 }' "$CTRL_FILE") +fi + +for name in $trees; do + if [ -n "$start_from" ]; then + if [ "$name" = "$start_from" ]; then + start_from='' 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" - break - } + continue fi - comm -23 .series.old .series.next | xargs -r rm -f - rm -f .series.old .series.next - cd "$origwd" fi -done <../real_control -cd ../quilt -git add . -git commit -v -a -m "$(date '+%F-%H:%M')" -e + type=$(get_field "$name" 2) + if ! [ "$type" ]; then + printf '%s: unknown tree\n' "$name" 1>&2 + continue + fi + + printf '%s: %s\n' "$name" "$type" + fun="fetch_$type" + tfun=$(type -t "$fun") + if [ "$tfun" = 'function' ]; then + "$fun" "$name" + fi +done exit 0