# [PATCH] Fix handling of not_for_merge '.' flag in refspec.

2 messages from 2005-09-29 to 2005-09-30. Participants: Tom Prince, Junio C Hamano.
Thread: https://gitlist.dev/t/1982

## Tom Prince, 2005-09-29 23:53

Subject: [PATCH] Fix handling of not_for_merge '.' flag in refspec.
Message-ID: <11280379894186-git-send-email-tom.prince@ualberta.net>
URL: https://gitlist.dev/e/11280379894186-git-send-email-tom.prince%40ualberta.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 <tom.prince@ualberta.net>


---

 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 @@
 
 <refspec>::
 	The canonical format of a <refspec> parameter is
-	'+?<src>:<dst>'; that is, an optional plus '+', followed
+	'.?+?<src>:<dst>'; 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 <src>.
 	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
 	    ;;

```

## Junio C Hamano, 2005-09-30 00:47

Subject: Re: [PATCH] Fix handling of not_for_merge '.' flag in refspec.
Message-ID: <7vk6gzcrf8.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7vk6gzcrf8.fsf%40assigned-by-dhcp.cox.net
In-Reply-To: <11280379894186-git-send-email-tom.prince@ualberta.net>

```
Tom Prince <tom.prince@ualberta.net> writes:

> 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.

The dot trick was supposed to be internal.  If you have the
following three lines in a remotes/xyzzy file:

	URL: http://xyzzy.xz/balances.git
        Pull: frotz nitfol
        Pull: rezrov

    $ git pull xyzzy

    - fetch frotz, nitfol, and rezrov; merge frotz into the
      current branch

    $ git pull xyzzy nitfol

    - fetch nitfol only; merge nitfol into the current branch.

    $ git pull xyzzy nitfol rezrov

    - fetch nitfol and rezrov; merge them into the current
      branch (an Octopus).

The '.' is in no way part of the <refspec> format.  It may not
be a bad idea to explicitly forbid it, but currently we don't.

```
