git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3 05/17] refs DWIMmery: use the same rule for both "git fetch" and others

From
Junio C Hamano <gitster@pobox.com>
Date
Nov 9, 2011, 01:01 UTC
Message-ID
<1320800523-5407-6-git-send-email-gitster@pobox.com>
In-Reply-To
<1320800523-5407-1-git-send-email-gitster@pobox.com>

"git log frotz" can DWIM to "refs/remotes/frotz/HEAD", but in the remote access context, "git fetch frotz" to fetch what the other side happened to have fetched from what it calls 'frotz' (which may not have any relation to what we consider is 'frotz') the last time would not make much sense, so the fetch rules table did not include "refs/remotes/%.*s/HEAD".

When the user really wants to, "git fetch $there remotes/frotz/HEAD" would let her do so anyway, so this is not about safety or security; it merely is about confusion avoidance and discouraging meaningless usage.

Specifically, it is _not_ about ambiguity avoidance. A name that would become ambiguous if we use the same rules table for both fetch and local rev-parse would be ambiguous locally at the remote side.

So for the same reason as we added rule to allow "git fetch $there v1.0" instead of "git fetch $there tags/v1.0" in the previous commit, here is a bit longer rope for the users, which incidentally simplifies our code.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 cache.h          |    2 +-
 refs.c           |    8 --------
 t/t5510-fetch.sh |    5 ++---
 3 files changed, 3 insertions(+), 12 deletions(-)
diff --git a/cache.h b/cache.h
index be07ec7..26322dd 100644
--- a/cache.h
+++ b/cache.h
@@ -873,7 +873,7 @@ extern int get_sha1_mb(const char *str, unsigned char *sha1);
 
 extern int refname_match(const char *abbrev_name, const char *full_name, const char **rules);
 extern const char *ref_rev_parse_rules[];
-extern const char *ref_fetch_rules[];
+#define ref_fetch_rules ref_rev_parse_rules
 
 extern int create_symref(const char *ref, const char *refs_heads_master, const char *logmsg);
 extern int validate_headref(const char *ref);
diff --git a/refs.c b/refs.c
index ff20eeb..026c7ea 100644
--- a/refs.c
+++ b/refs.c
@@ -995,14 +995,6 @@ const char *ref_rev_parse_rules[] = {
 	NULL
 };
 
-const char *ref_fetch_rules[] = {
-	"%.*s",
-	"refs/%.*s",
-	"refs/tags/%.*s",
-	"refs/heads/%.*s",
-	NULL
-};
-
 int refname_match(const char *abbrev_name, const char *full_name, const char **rules)
 {
 	const char **p;
diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh
index 7e433b1..251d138 100755
--- a/t/t5510-fetch.sh
+++ b/t/t5510-fetch.sh
@@ -116,7 +116,7 @@ test_expect_success 'fetch must not resolve short tag name' '
 
 '
 
-test_expect_success 'fetch must not resolve short remote name' '
+test_expect_success 'fetch can now resolve short remote name' '
 
 	cd "$D" &&
 	git update-ref refs/remotes/six/HEAD HEAD &&
@@ -125,8 +125,7 @@ test_expect_success 'fetch must not resolve short remote name' '
 	cd six &&
 	git init &&
 
-	test_must_fail git fetch .. six:six
-
+	git fetch .. six:six
 '
 
 test_expect_success 'create bundle 1' '
-- 
1.7.8.rc1.82.g90e080
Previous: Junio C HamanoNext: Junio C Hamano
Message 6 of 21 in “Pulling signed tags”
  1. 00/17 Pulling signed tagsJunio C Hamano, Nov 9, 2011
  2. 01/17 Split GPG interface into its own helper libraryJunio C Hamano, Nov 9, 2011
  3. 02/17 fetch: do not store peeled tag object names in FETCH_HEADJunio C Hamano, Nov 9, 2011
  4. 03/17 merge: notice local merging of tags and keep it unwrappedJunio C Hamano, Nov 9, 2011
  5. 04/17 fetch: allow "git fetch $there v1.0" to fetch a tagJunio C Hamano, Nov 9, 2011
  6. 05/17 refs DWIMmery: use the same rule for both "git fetch" and othersJunio C Hamano, Nov 9, 2011
  7. 06/17 fmt-merge-msg: avoid early returnsJunio C Hamano, Nov 9, 2011
  8. 07/17 fmt-merge-msg: package options into a structureJunio C Hamano, Nov 9, 2011
  9. 08/17 fmt-merge-msg: Add contents of merged tag in the merge messageJunio C Hamano, Nov 9, 2011
  10. 09/17 merge: make usage of commit->util more extensibleJunio C Hamano, Nov 9, 2011
  11. 10/17 merge: record tag objects without peeling in MERGE_HEADJunio C Hamano, Nov 9, 2011
  12. 11/17 commit: copy merged signed tags to headers of merge commitJunio C Hamano, Nov 9, 2011
  13. 12/17 merge: force edit mode when merging a tag objectJunio C Hamano, Nov 9, 2011
  14. 13/17 commit: teach --amend to carry forward extra headersJunio C Hamano, Nov 9, 2011
  15. 14/17 commit: teach --gpg-sign optionJunio C Hamano, Nov 9, 2011
  16. 15/17 log: --show-signatureJunio C Hamano, Nov 9, 2011
  17. 16/17 test "commit -S" and "log --show-signature"Junio C Hamano, Nov 9, 2011
  18. 17/17 pretty: %G[?GS] placeholdersJunio C Hamano, Nov 9, 2011
  19. Robin H. JohnsonNov 9, 2011
  20. 18/17 request-pull: use the annotated tag contentsJunio C Hamano, Nov 9, 2011
  21. Junio C HamanoNov 9, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.