X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=git-fetch.sh;h=48818f822451b3d69e7cd90e81e34bf137ead4dd;hb=fb6a9f93d39e4e5fdb83673a927f71a34e9fb7c0;hp=68356343a63b8c07def2edcbed4d3b8c06776921;hpb=692c7fc9cb81a2f68b23199d5b8612494fe4d317;p=git.git diff --git a/git-fetch.sh b/git-fetch.sh index 68356343..48818f82 100755 --- a/git-fetch.sh +++ b/git-fetch.sh @@ -94,6 +94,9 @@ append_fetch_head () { # remote-nick is the URL given on the command line (or a shorthand) # remote-name is the $GIT_DIR relative refs/ path we computed # for this refspec. + + # the $note_ variable will be fed to git-fmt-merge-msg for further + # processing. case "$remote_name_" in HEAD) note_= ;; @@ -103,10 +106,13 @@ append_fetch_head () { refs/tags/*) note_="$(expr "$remote_name_" : 'refs/tags/\(.*\)')" note_="tag '$note_' of " ;; + refs/remotes/*) + note_="$(expr "$remote_name_" : 'refs/remotes/\(.*\)')" + note_="remote branch '$note_' of " ;; *) note_="$remote_name of " ;; esac - remote_1_=$(expr "$remote_" : '\(.*\)\.git/*$') && + remote_1_=$(expr "z$remote_" : 'z\(.*\)\.git/*$') && remote_="$remote_1_" note_="$note_$remote_" @@ -147,10 +153,10 @@ fast_forward_local () { else echo >&2 "* $1: storing $3" fi - git-update-ref "$1" "$2" + git-update-ref "$1" "$2" ;; - refs/heads/*) + refs/heads/* | refs/remotes/*) # $1 is the ref being updated. # $2 is the new value for the ref. local=$(git-rev-parse --verify "$1^0" 2>/dev/null) @@ -160,7 +166,10 @@ fast_forward_local () { mb=$(git-merge-base "$local" "$2") && case "$2,$mb" in $local,*) - echo >&2 "* $1: same as $3" + if test -n "$verbose" + then + echo >&2 "* $1: same as $3" + fi ;; *,$local) echo >&2 "* $1: fast forward to $3" @@ -205,12 +214,12 @@ esac reflist=$(get_remote_refs_for_fetch "$@") if test "$tags" then - taglist=$(IFS=" " && + taglist=`IFS=" " && git-ls-remote $upload_pack --tags "$remote" | while read sha1 name do case "$name" in - (*^*) continue ;; + *^*) continue ;; esac if git-check-ref-format "$name" then @@ -218,7 +227,7 @@ then else echo >&2 "warning: tag ${name} ignored" fi - done) + done` if test "$#" -gt 1 then # remote URL plus explicit refspecs; we need to merge them. @@ -239,22 +248,22 @@ fetch_main () { # These are relative path from $GIT_DIR, typically starting at refs/ # but may be HEAD - if expr "$ref" : '\.' >/dev/null + if expr "z$ref" : 'z\.' >/dev/null then not_for_merge=t - ref=$(expr "$ref" : '\.\(.*\)') + ref=$(expr "z$ref" : 'z\.\(.*\)') else not_for_merge= fi - if expr "$ref" : '\+' >/dev/null + if expr "z$ref" : 'z+' >/dev/null then single_force=t - ref=$(expr "$ref" : '\+\(.*\)') + ref=$(expr "z$ref" : 'z+\(.*\)') else single_force= fi - remote_name=$(expr "$ref" : '\([^:]*\):') - local_name=$(expr "$ref" : '[^:]*:\(.*\)') + remote_name=$(expr "z$ref" : 'z\([^:]*\):') + local_name=$(expr "z$ref" : 'z[^:]*:\(.*\)') rref="$rref$LF$remote_name" @@ -264,14 +273,22 @@ fetch_main () { if [ -n "$GIT_SSL_NO_VERIFY" ]; then curl_extra_args="-k" fi - remote_name_quoted=$(perl -e ' + max_depth=5 + depth=0 + head="ref: $remote_name" + while (expr "z$head" : "zref:" && expr $depth \< $max_depth) >/dev/null + do + remote_name_quoted=$(perl -e ' my $u = $ARGV[0]; + $u =~ s/^ref:\s*//; $u =~ s{([^-a-zA-Z0-9/.])}{sprintf"%%%02x",ord($1)}eg; print "$u"; - ' "$remote_name") - head=$(curl -nsfL $curl_extra_args "$remote/$remote_name_quoted") && - expr "$head" : "$_x40\$" >/dev/null || - die "Failed to fetch $remote_name from $remote" + ' "$head") + head=$(curl -nsfL $curl_extra_args "$remote/$remote_name_quoted") + depth=$( expr \( $depth + 1 \) ) + done + expr "z$head" : "z$_x40\$" >/dev/null || + die "Failed to fetch $remote_name from $remote" echo >&2 Fetching "$remote_name from $remote" using http git-http-fetch -v -a "$head" "$remote/" || exit ;; @@ -356,7 +373,7 @@ fetch_main () { break ;; esac done - local_name=$(expr "$found" : '[^:]*:\(.*\)') + local_name=$(expr "z$found" : 'z[^:]*:\(.*\)') append_fetch_head "$sha1" "$remote" \ "$remote_name" "$remote_nick" "$local_name" "$not_for_merge" done