X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=git-fetch.sh;h=fcc24f85c3e5d79f2e05511ad42d77e05626cc7a;hb=687dd75c95f9212244b6cf4fe60b40db44de01ba;hp=73e57bd784c37b950219819fb2e025da8933aab6;hpb=78ff5cf6b5595fa3ae291fa9ee3595b7c7cc624a;p=git.git diff --git a/git-fetch.sh b/git-fetch.sh index 73e57bd7..fcc24f85 100755 --- a/git-fetch.sh +++ b/git-fetch.sh @@ -17,12 +17,20 @@ append= force= verbose= update_head_ok= +exec= +upload_pack= while case "$#" in 0) break ;; esac do case "$1" in -a|--a|--ap|--app|--appe|--appen|--append) append=t ;; + --upl|--uplo|--uploa|--upload|--upload-|--upload-p|\ + --upload-pa|--upload-pac|--upload-pack) + shift + exec="--exec=$1" + upload_pack="-u $1" + ;; -f|--f|--fo|--for|--forc|--force) force=t ;; @@ -40,6 +48,9 @@ do -v|--verbose) verbose=Yes ;; + -k|--k|--ke|--kee|--keep) + keep=--keep + ;; -*) usage ;; @@ -193,7 +204,7 @@ reflist=$(get_remote_refs_for_fetch "$@") if test "$tags" then taglist=$(IFS=" " && - git-ls-remote --tags "$remote" | + git-ls-remote $upload_pack --tags "$remote" | while read sha1 name do case "$name" in @@ -309,7 +320,7 @@ fetch_main () { ( : subshell because we muck with IFS IFS=" $LF" ( - git-fetch-pack "$remote" $rref || echo failed "$remote" + git-fetch-pack $exec $keep "$remote" $rref || echo failed "$remote" ) | while read sha1 remote_name do @@ -357,20 +368,25 @@ fetch_main "$reflist" # automated tag following case "$no_tags$tags" in '') - taglist=$(IFS=" " && - git-ls-remote --tags "$remote" | - sed -ne 's|^\([0-9a-f]*\)[ ]\(refs/tags/.*\)^{}$|\1 \2|p' | - while read sha1 name - do - test -f "$GIT_DIR/$name" && continue - git-check-ref-format "$name" || { - echo >&2 "warning: tag ${name} ignored" - continue - } - git-cat-file -t "$sha1" >/dev/null 2>&1 || continue - echo >&2 "Auto-following $name" - echo ".${name}:${name}" - done) + case "$reflist" in + *:refs/*) + # effective only when we are following remote branch + # using local tracking branch. + taglist=$(IFS=" " && + git-ls-remote $upload_pack --tags "$remote" | + sed -ne 's|^\([0-9a-f]*\)[ ]\(refs/tags/.*\)^{}$|\1 \2|p' | + while read sha1 name + do + test -f "$GIT_DIR/$name" && continue + git-check-ref-format "$name" || { + echo >&2 "warning: tag ${name} ignored" + continue + } + git-cat-file -t "$sha1" >/dev/null 2>&1 || continue + echo >&2 "Auto-following $name" + echo ".${name}:${name}" + done) + esac case "$taglist" in '') ;; ?*)