Re: Friendly refspecs

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Jeff King
Date: Tuesday, April 15, 2008 - 9:25 pm

On Tue, Apr 15, 2008 at 11:48:23PM -0400, Jeff King wrote:


Hmm. Here is a quick patch I worked up, but it causes t5516:14 (push
with ambiguity) to fail. However, I'm not sure the test is right: it
looks like it's trying to find ambiguity between remotes/origin/master
and remotes/frotz/master, but in fact matches _neither_ of them. So it
was failing before as we expected, but for the wrong reason.

---
 remote.c              |   23 +++++++++++++++++++----
 t/t5516-fetch-push.sh |    8 ++++++++
 2 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/remote.c b/remote.c
index 08af7f9..2f5d062 100644
--- a/remote.c
+++ b/remote.c
@@ -851,10 +851,25 @@ static int match_explicit(struct ref *src, struct ref *dst,
 	case 0:
 		if (!memcmp(dst_value, "refs/", 5))
 			matched_dst = make_linked_ref(dst_value, dst_tail);
-		else
-			error("dst refspec %s does not match any "
-			      "existing ref on the remote and does "
-			      "not start with refs/.", dst_value);
+		else {
+			/*
+			 * We don't have a full ref name for the dst and
+			 * it doesn't exist, so let's assume it's the same
+			 * type as our src.
+			 */
+			struct strbuf tmp = STRBUF_INIT;
+			const char *c;
+			int slashes;
+			for (c = matched_src->name, slashes = 0;
+					*c && slashes < 2; c++) {
+				strbuf_addch(&tmp, *c);
+				if (*c == '/')
+					slashes++;
+			}
+			strbuf_addstr(&tmp, dst_value);
+			dst_value = strbuf_detach(&tmp, NULL);
+			matched_dst = make_linked_ref(dst_value, dst_tail);
+		}
 		break;
 	default:
 		matched_dst = NULL;
diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh
index 793ffc6..370f79a 100755
--- a/t/t5516-fetch-push.sh
+++ b/t/t5516-fetch-push.sh
@@ -285,6 +285,14 @@ test_expect_success 'push with colon-less refspec (4)' '
 
 '
 
+test_expect_success 'push with non-existant, incomplete dest' '
+
+	mk_test &&
+	git push testrepo master:brandnewbranch &&
+	check_push_result $the_commit heads/brandnewbranch
+
+'
+
 test_expect_success 'push with HEAD' '
 
 	mk_test heads/master &&
-- 
1.5.5.64.geecd2.dirty

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
git annoyances, Ingo Molnar, (Wed Apr 9, 3:14 am)
Re: git annoyances, Björn, (Wed Apr 9, 3:41 am)
Re: git annoyances, Jeff King, (Wed Apr 9, 7:57 am)
Re: git annoyances, Avery Pennarun, (Wed Apr 9, 10:08 am)
Re: git annoyances, Daniel Barkalow, (Wed Apr 9, 12:21 pm)
Friendly refspecs (Was: Re: git annoyances), Teemu Likonen, (Wed Apr 9, 1:08 pm)
Re: Friendly refspecs (Was: Re: git annoyances), Avery Pennarun, (Wed Apr 9, 1:32 pm)
Re: Friendly refspecs (Was: Re: git annoyances), Jeff King, (Wed Apr 9, 1:34 pm)
Re: git annoyances, Ingo Molnar, (Wed Apr 9, 1:41 pm)
Re: git annoyances, Junio C Hamano, (Wed Apr 9, 2:04 pm)
Re: Friendly refspecs, Junio C Hamano, (Wed Apr 9, 2:21 pm)
Re: git annoyances, Jon Loeliger, (Wed Apr 9, 2:39 pm)
Re: git annoyances, Jeff King, (Wed Apr 9, 2:45 pm)
Re: Friendly refspecs (Was: Re: git annoyances), Teemu Likonen, (Wed Apr 9, 3:25 pm)
Re: Friendly refspecs (Was: Re: git annoyances), Jeff King, (Wed Apr 9, 3:51 pm)
Re: git annoyances, Nicolas Pitre, (Wed Apr 9, 4:45 pm)
Re: git annoyances, André Goddard Rosa, (Wed Apr 9, 4:56 pm)
Re: Friendly refspecs (Was: Re: git annoyances), Jeff King, (Wed Apr 9, 5:03 pm)
Re: Friendly refspecs (Was: Re: git annoyances), Jeff King, (Wed Apr 9, 5:11 pm)
Re: git annoyances, Jean-Christian de Rivaz, (Wed Apr 9, 11:08 pm)
Re: Friendly refspecs, Teemu Likonen, (Thu Apr 10, 12:38 am)
Re: Friendly refspecs, Junio C Hamano, (Thu Apr 10, 12:51 am)
Re: Friendly refspecs, Jeff King, (Thu Apr 10, 1:03 am)
Re: git annoyances, Sverre Rabbelier, (Thu Apr 10, 1:19 am)
Re: git annoyances, Karl , (Thu Apr 10, 1:41 am)
git-bisect annoyances, Ingo Molnar, (Thu Apr 10, 4:47 am)
Re: git annoyances, Daniel Barkalow, (Thu Apr 10, 7:08 am)
Re: git annoyances, Avery Pennarun, (Thu Apr 10, 8:05 am)
Re: git annoyances, Govind Salinas, (Thu Apr 10, 12:45 pm)
Re: git-bisect annoyances, Christian Couder, (Thu Apr 10, 10:41 pm)
Re: git-bisect annoyances, Junio C Hamano, (Thu Apr 10, 10:56 pm)
Re: git annoyances, Karl , (Fri Apr 11, 12:00 am)
Re: git annoyances, Luciano Rocha, (Fri Apr 11, 3:15 am)
Re: git annoyances, Wincent Colaiuta, (Fri Apr 11, 3:27 am)
Re: git-bisect annoyances, Ingo Molnar, (Fri Apr 11, 4:41 am)
Re: [PATCH] When a remote is added but not fetched, tell t ..., Johannes Schindelin, (Fri Apr 11, 8:21 am)
Re: [PATCH] Default to fetching a remote after adding it., Stephen Sinclair, (Fri Apr 11, 12:17 pm)
Re: [PATCH] Default to fetching a remote after adding it., Wincent Colaiuta, (Fri Apr 11, 12:36 pm)
Re: git-bisect annoyances, Christian Couder, (Fri Apr 11, 11:56 pm)
Re: [PATCH] Default to fetching a remote after adding it., Johannes Schindelin, (Sat Apr 12, 7:33 am)
Re: [PATCH] Default to fetching a remote after adding it., Johannes Schindelin, (Sat Apr 12, 8:24 am)
Re: Friendly refspecs, Teemu Likonen, (Sun Apr 13, 2:31 am)
[PATCH] Add examples section to 'git fetch' manual, Teemu Likonen, (Sun Apr 13, 2:34 am)
Re: [PATCH] Add examples section to 'git fetch' manual, Junio C Hamano, (Sun Apr 13, 11:56 am)
Re: [PATCH] Add examples section to 'git fetch' manual, Matt Graham, (Sun Apr 13, 12:48 pm)
Re: [PATCH] Add examples section to 'git fetch' manual, Teemu Likonen, (Sun Apr 13, 1:05 pm)
Re: [PATCH] Add examples section to 'git fetch' manual, Junio C Hamano, (Sun Apr 13, 6:02 pm)
Re: Friendly refspecs, Jeff King, (Tue Apr 15, 8:48 pm)
Re: Friendly refspecs, Jeff King, (Tue Apr 15, 9:25 pm)
Re: Friendly refspecs, Junio C Hamano, (Tue Apr 15, 9:41 pm)
Re: Friendly refspecs, Jeff King, (Tue Apr 15, 9:47 pm)
Re: Friendly refspecs, Daniel Barkalow, (Wed Apr 16, 8:42 am)