From: Tom Prince Date: Thu, 29 Sep 2005 23:53:09 GMT Subject: [PATCH] Fix handling of not_for_merge '.' flag in refspec. Message-ID: <11280379894186-git-send-email-tom.prince@ualberta.net> canon_refs_list_for_fetch did not know about '.', so it mangled any reference with it. Further, it added '.' to any refspec on the command line other than the first. Signed-off-by: Tom Prince --- Documentation/pull-fetch-param.txt | 5 +++-- git-parse-remote.sh | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 3 deletions(-) 446dda983492e3c07dc73b271cb9208a4359a734 diff --git a/Documentation/pull-fetch-param.txt b/Documentation/pull-fetch-param.txt --- a/Documentation/pull-fetch-param.txt +++ b/Documentation/pull-fetch-param.txt @@ -49,7 +49,7 @@ :: The canonical format of a parameter is - '+?:'; that is, an optional plus '+', followed + '.?+?:'; that is, an optional plus '+', followed by the source ref, followed by a colon ':', followed by the destination ref. @@ -68,7 +68,8 @@ ref that matches it is fast forwarded using . Again, if the optional plus '+' is used, the local ref is updated even if it does not result in a fast forward - update. + update. If the optional dot '.' is used, the remote ref + is fetched, but not used for merging. Some short-cut notations are also supported. diff --git a/git-parse-remote.sh b/git-parse-remote.sh --- a/git-parse-remote.sh +++ b/git-parse-remote.sh @@ -72,8 +72,15 @@ canon_refs_list_for_fetch () { dot_prefix= for ref do + not_for_merge= force= case "$ref" in + .*) + ref=$(expr "$ref" : '\.\(.*\)') + not_for_merge=. + ;; + esac + case "$ref" in +*) ref=$(expr "$ref" : '\+\(.*\)') force=+ @@ -94,7 +101,12 @@ canon_refs_list_for_fetch () { heads/* | tags/* ) local="refs/$local" ;; *) local="refs/heads/$local" ;; esac - echo "${dot_prefix}${force}${remote}:${local}" + case "$octopus$not_for_merge" in + '') + not_for_merge=$dot_prefix + ;; + esac + echo "${not_for_merge}${force}${remote}:${local}" dot_prefix=. done } @@ -114,6 +126,7 @@ get_remote_default_refs_for_fetch () { # This prefixes the second and later default refspecs # with a '.', to signal git-fetch to mark them # not-for-merge. + octopus= canon_refs_list_for_fetch $(sed -ne '/^Pull: */{ s///p }' "$GIT_DIR/remotes/$1") @@ -155,6 +168,7 @@ get_remote_refs_for_fetch () { ;; esac fi + octopus=t canon_refs_list_for_fetch "$ref" done ;;