X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=git-fetch.sh;h=d3988660ff8cf214cfb1f5903a4bab5ab63b6cea;hb=d1c5f2a42d7b5c0e3d3862212dea1f09809c4963;hp=27407c1d357d8bf9d621875b1a773cef671ddc3d;hpb=0542f48c894f924d94a2bd05f7e4cbab25656112;p=git.git diff --git a/git-fetch.sh b/git-fetch.sh index 27407c1d..d3988660 100755 --- a/git-fetch.sh +++ b/git-fetch.sh @@ -5,6 +5,7 @@ _x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]' _x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40" +tags= append= force= update_head_ok= @@ -17,6 +18,9 @@ do -f|--f|--fo|--for|--forc|--force) force=t ;; + -t|--t|--ta|--tag|--tags) + tags=t + ;; -u|--u|--up|--upd|--upda|--updat|--update|--update-|--update-h|\ --update-he|--update-hea|--update-head|--update-head-|\ --update-head-o|--update-head-ok) @@ -45,7 +49,7 @@ rsync_slurped_objects= if test "" = "$append" then - : >$GIT_DIR/FETCH_HEAD + : >"$GIT_DIR/FETCH_HEAD" fi append_fetch_head () { @@ -82,11 +86,11 @@ append_fetch_head () { if git-cat-file commit "$head_" >/dev/null 2>&1 then headc_=$(git-rev-parse --verify "$head_^0") || exit - echo "$headc_ $not_for_merge_ $note_" >>$GIT_DIR/FETCH_HEAD + echo "$headc_ $not_for_merge_ $note_" >>"$GIT_DIR/FETCH_HEAD" echo >&2 "* committish: $head_" echo >&2 " $note_" else - echo "$head_ not-for-merge $note_" >>$GIT_DIR/FETCH_HEAD + echo "$head_ not-for-merge $note_" >>"$GIT_DIR/FETCH_HEAD" echo >&2 "* non-commit: $head_" echo >&2 " $note_" fi @@ -158,7 +162,26 @@ case "$update_head_ok" in ;; esac -for ref in $(get_remote_refs_for_fetch "$@") +# If --tags (and later --heads or --all) is specified, then we are +# not talking about defaults stored in Pull: line of remotes or +# branches file, and just fetch those and refspecs explicitly given. +# Otherwise we do what we always did. + +reflist=$(get_remote_refs_for_fetch "$@") +if test "$tags" +then + taglist=$(git-ls-remote --tags "$remote" | awk '{ print "."$2":"$2 }') + if test "$#" -gt 1 + then + # remote URL plus explicit refspecs; we need to merge them. + reflist="$reflist $taglist" + else + # No explicit refspecs; fetch tags only. + reflist=$taglist + fi +fi + +for ref in $reflist do refs="$refs $ref"