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

[PATCH] pull: refuse complete src:dst fetchspec arguments

From
Thomas Rast <trast@student.ethz.ch>
Date
Oct 20, 2009, 18:23 UTC
Message-ID
<d561e70f0aa802ceb96eba16d3bb2316134d69c8.1256062808.git.trast@student.ethz.ch>

git-pull has historically accepted full fetchspecs, meaning that you could do

  git pull $repo A:B

which would simultaneously fetch the remote branch A into the local branch B and merge B into HEAD. This got especially confusing if B was checked out. New users variously mistook pull for fetch or read that command as "merge the remote A into my B", neither of which is correct.

Since the above usage should be very rare and can be done with separate calls to fetch and merge, we just disallow full fetchspecs in git-pull.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
---
This actually came up on IRC *twice* this week.
 git-pull.sh     |   19 +++++++++++++++++++
 t/t5520-pull.sh |   12 ------------
 2 files changed, 19 insertions(+), 12 deletions(-)
diff --git a/git-pull.sh b/git-pull.sh
index fc78592..8f06491 100755
--- a/git-pull.sh
+++ b/git-pull.sh
@@ -131,6 +131,25 @@ error_on_no_merge_candidates () {
 	exit 1
 }
 
+check_full_fetchspec () {
+	shift	# discard remote argument, if any
+	for arg in "$@"
+	do
+		case "$arg" in
+		*:*)
+			echo "$arg"
+			return
+			;;
+		esac
+	done
+}
+
+full_fetchspec=$(check_full_fetchspec "$@")
+if test -n "$full_fetchspec"
+then
+	die "full fetchspec '$full_fetchspec' not allowed"
+fi
+
 test true = "$rebase" && {
 	if ! git rev-parse -q --verify HEAD >/dev/null
 	then
diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh
index dd2ee84..a566a99 100755
--- a/t/t5520-pull.sh
+++ b/t/t5520-pull.sh
@@ -29,18 +29,6 @@ test_expect_success 'checking the results' '
 	diff file cloned/file
 '
 
-test_expect_success 'pulling into void using master:master' '
-	mkdir cloned-uho &&
-	(
-		cd cloned-uho &&
-		git init &&
-		git pull .. master:master
-	) &&
-	test -f file &&
-	test -f cloned-uho/file &&
-	test_cmp file cloned-uho/file
-'
-
 test_expect_success 'test . as a remote' '
 
 	git branch copy master &&
-- 
1.6.5.1.144.g40216
Next: Thomas Rast
Message 1 of 21 in “pull: refuse complete src:dst fetchspec arguments”
  1. pull: refuse complete src:dst fetchspec argumentsThomas Rast, Oct 20, 2009
  2. Thomas RastOct 20, 2009
  3. Wesley J. LandakerOct 20, 2009
  4. Sean EstabrooksOct 20, 2009
  5. Junio C HamanoOct 20, 2009
  6. Daniel BarkalowOct 21, 2009
  7. Sean EstabrooksOct 21, 2009
  8. Daniel BarkalowOct 21, 2009
  9. Sean EstabrooksOct 21, 2009
  10. Björn SteinbrinkOct 21, 2009
  11. Daniel BarkalowOct 21, 2009
  12. Thomas RastOct 21, 2009
  13. Jeff KingOct 23, 2009
  14. Daniel BarkalowOct 23, 2009
  15. Jeff KingOct 24, 2009
  16. Junio C HamanoOct 24, 2009
  17. Thomas RastOct 21, 2009
  18. Thomas RastNov 15, 2009
  19. Junio C HamanoNov 15, 2009
  20. Nanako ShiraishiDec 29, 2009
  21. Junio C HamanoDec 29, 2009

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.