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

[PATCH] refspec: make @ a valid refspec

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Nov 22, 2020, 16:46 UTC
Message-ID
<20201122164641.2091160-1-felipe.contreras@gmail.com>

Since commit 9ba89f484e git learned how to push to a remote branch using the source @, for example:

  git push origin @:master
However, if the right-hand side is missing, the push fails:
  git push origin @

It is obvious what is the desired behavior, and allowing the push makes things more consistent.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 refspec.c             | 5 ++++-
 t/t5511-refspec.sh    | 2 ++
 t/t5516-fetch-push.sh | 9 +++++++++
 3 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/refspec.c b/refspec.c
index c49347c2d7..adbfb3283a 100644
--- a/refspec.c
+++ b/refspec.c
@@ -71,7 +71,10 @@ static int parse_refspec(struct refspec_item *item, const char *refspec, int fet
 	}
 
 	item->pattern = is_glob;
-	item->src = xstrndup(lhs, llen);
+	if (llen == 1 && *lhs == '@')
+		item->src = xstrdup("HEAD");
+	else
+		item->src = xstrndup(lhs, llen);
 	flags = REFNAME_ALLOW_ONELEVEL | (is_glob ? REFNAME_REFSPEC_PATTERN : 0);
 
 	if (item->negative) {
diff --git a/t/t5511-refspec.sh b/t/t5511-refspec.sh
index f541f30bc2..f808649de4 100755
--- a/t/t5511-refspec.sh
+++ b/t/t5511-refspec.sh
@@ -58,6 +58,8 @@ test_refspec fetch 'HEAD~4:refs/remotes/frotz/new'		invalid
 
 test_refspec push 'HEAD'
 test_refspec fetch 'HEAD'
+test_refspec push '@'
+test_refspec fetch '@'
 test_refspec push 'refs/heads/ nitfol'				invalid
 test_refspec fetch 'refs/heads/ nitfol'				invalid
 
diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh
index d11382f769..12c0c7c06b 100755
--- a/t/t5516-fetch-push.sh
+++ b/t/t5516-fetch-push.sh
@@ -501,6 +501,15 @@ test_expect_success 'push with config remote.*.push = HEAD' '
 	check_push_result testrepo $the_first_commit heads/local
 '
 
+test_expect_success 'push with @' '
+
+	mk_test testrepo heads/master &&
+	git checkout master &&
+	git push testrepo @ &&
+	check_push_result testrepo $the_commit heads/master
+
+'
+
 test_expect_success 'push with remote.pushdefault' '
 	mk_test up_repo heads/master &&
 	mk_test down_repo heads/master &&
-- 
2.29.2
Next: Jeff King
Message 1 of 13 in “refspec: make @ a valid refspec”
  1. refspec: make @ a valid refspecFelipe Contreras, Nov 22, 2020
  2. Jeff KingNov 24, 2020
  3. Junio C HamanoNov 24, 2020
  4. Felipe ContrerasNov 24, 2020
  5. Junio C HamanoNov 24, 2020
  6. Jacob KellerNov 24, 2020
  7. Junio C HamanoNov 24, 2020
  8. Jacob KellerNov 24, 2020
  9. Felipe ContrerasNov 25, 2020
  10. Junio C HamanoNov 25, 2020
  11. Felipe ContrerasNov 25, 2020
  12. Felipe ContrerasNov 25, 2020
  13. Felipe ContrerasDec 4, 2020

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.