X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=git-fetch.sh;h=e4a6a68057edf0ff8cd4067f334ddf1eed211e44;hb=e72456bb67bfcadf3703dc2f8240af7d9d8aebdb;hp=22739440384648357896898f11001e2fa05f217e;hpb=22c67ca88ec65c4f278e8c82b2d98f3bd025238b;p=git.git diff --git a/git-fetch.sh b/git-fetch.sh index 227394403..e4a6a6805 100755 --- a/git-fetch.sh +++ b/git-fetch.sh @@ -178,17 +178,36 @@ do head=$(curl -nsf $curl_extra_args "$remote/$remote_name") && expr "$head" : "$_x40\$" >/dev/null || die "Failed to fetch $remote_name from $remote" - echo Fetching "$remote_name from $remote" using http + echo >&2 Fetching "$remote_name from $remote" using http git-http-fetch -v -a "$head" "$remote/" || exit ;; rsync://*) TMP_HEAD="$GIT_DIR/TMP_HEAD" - rsync -L "$remote/$remote_name" "$TMP_HEAD" || exit 1 + rsync -L -q "$remote/$remote_name" "$TMP_HEAD" || exit 1 head=$(git-rev-parse TMP_HEAD) rm -f "$TMP_HEAD" test "$rsync_slurped_objects" || { - rsync -avz --ignore-existing "$remote/objects/" \ - "$GIT_OBJECT_DIRECTORY/" || exit + rsync -av --ignore-existing --exclude info \ + "$remote/objects/" "$GIT_OBJECT_DIRECTORY/" || exit + + # Look at objects/info/alternates for rsync -- http will + # support it natively and git native ones will do it on the remote + # end. Not having that file is not a crime. + rsync -q "$remote/objects/info/alternates" \ + "$GIT_DIR/TMP_ALT" 2>/dev/null || + rm -f "$GIT_DIR/TMP_ALT" + if test -f "$GIT_DIR/TMP_ALT" + then + resolve_alternates "$remote" <"$GIT_DIR/TMP_ALT" | + while read alt + do + case "$alt" in 'bad alternate: '*) die "$alt";; esac + echo >&2 "Getting alternate: $alt" + rsync -av --ignore-existing --exclude info \ + "$alt" "$GIT_OBJECT_DIRECTORY/" || exit + done + rm -f "$GIT_DIR/TMP_ALT" + fi rsync_slurped_objects=t } ;;