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

[PATCHv2 2/8] t2024: Show failure to use refspec when DWIMming remote branch names

From
Johan Herland <johan@herland.net>
Date
Apr 20, 2013, 15:05 UTC
Message-ID
<1366470363-22309-3-git-send-email-johan@herland.net>
In-Reply-To
<1366470363-22309-1-git-send-email-johan@herland.net>

When using "git checkout foo" to DWIM the creation of local "foo" from some existing upstream "foo", we assume conventional refspecs as created by "git clone" or "git remote add", and fail to work correctly if the current refspecs do not follow the conventional "refs/remotes/$remote/*" pattern.

Signed-off-by: Johan Herland <johan@herland.net>
---
 t/t2024-checkout-dwim.sh | 52 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 51 insertions(+), 1 deletion(-)
diff --git a/t/t2024-checkout-dwim.sh b/t/t2024-checkout-dwim.sh
index 5650d21..36bf52f 100755
--- a/t/t2024-checkout-dwim.sh
+++ b/t/t2024-checkout-dwim.sh
@@ -22,6 +22,7 @@ test_tracking_branch() {
 }
 
 test_expect_success 'setup' '
+	test_commit my_master &&
 	(git init repo_a &&
 	 cd repo_a &&
 	 test_commit a_master &&
@@ -49,7 +50,7 @@ test_expect_success 'checkout of non-existing branch fails' '
 	test_must_fail git checkout xyzzy
 '
 
-test_expect_success 'checkout of branch from multiple remotes fails' '
+test_expect_success 'checkout of branch from multiple remotes fails #1' '
 	test_must_fail git checkout foo
 '
 
@@ -63,4 +64,53 @@ test_expect_success 'checkout of branch from a single remote succeeds #2' '
 	test_tracking_branch baz repo_b refs/remotes/other_b/baz
 '
 
+test_expect_success 'setup more remotes with unconventional refspecs' '
+	git checkout master &&
+	git branch -D bar &&
+	git branch -D baz &&
+	test "$(git rev-parse --verify HEAD)" = "$(git rev-parse --verify my_master)" &&
+	(git init repo_c &&
+	 cd repo_c &&
+	 test_commit c_master &&
+	 git checkout -b bar &&
+	 test_commit c_bar
+	 git checkout -b spam &&
+	 test_commit c_spam
+	) &&
+	(git init repo_d &&
+	 cd repo_d &&
+	 test_commit d_master &&
+	 git checkout -b baz &&
+	 test_commit f_baz
+	 git checkout -b eggs &&
+	 test_commit c_eggs
+	) &&
+	git remote add repo_c repo_c &&
+	git config remote.repo_c.fetch \
+	    "+refs/heads/*:refs/remotes/extra_dir/repo_c/extra_dir/*" &&
+	git fetch repo_c &&
+	git remote add repo_d repo_d &&
+	git config remote.repo_d.fetch \
+	    "+refs/heads/*:refs/repo_d/*" &&
+	git fetch repo_d
+'
+
+test_expect_failure 'checkout of branch from multiple remotes fails #2' '
+	test_must_fail git checkout bar
+'
+
+test_expect_failure 'checkout of branch from multiple remotes fails #3' '
+	test_must_fail git checkout baz
+'
+
+test_expect_failure 'checkout of branch from a single remote succeeds #3' '
+	git checkout spam &&
+	test_tracking_branch spam repo_c refs/remotes/extra_dir/repo_c/extra_dir/spam
+'
+
+test_expect_failure 'checkout of branch from a single remote succeeds #4' '
+	git checkout eggs &&
+	test_tracking_branch eggs repo_d refs/repo_d/eggs
+'
+
 test_done
-- 
1.8.1.3.704.g33f7d4f
Previous: Johan HerlandNext: Johan Herland
Message 5 of 12 in “[PATCHv2 0/8] Improving the search for remote-tracking branches”
  1. Johan HerlandApr 20, 2013
  2. 1/8 t2024: Add tests verifying current DWIM behavior of 'git checkout <branch>'Johan Herland, Apr 20, 2013
  3. Jonathan NiederApr 20, 2013
  4. Johan HerlandApr 20, 2013
  5. 2/8 t2024: Show failure to use refspec when DWIMming remote branch namesJohan Herland, Apr 20, 2013
  6. 3/8 checkout: Use remote refspecs when DWIMming tracking branchesJohan Herland, Apr 20, 2013
  7. 4/8 t3200.39: tracking setup should fail if there is no matching refspec.Johan Herland, Apr 20, 2013
  8. 5/8 t7201.24: Add refspec to keep --track workingJohan Herland, Apr 20, 2013
  9. 6/8 t9114.2: Don't use --track option against "svn-remote"-tracking branchesJohan Herland, Apr 20, 2013
  10. Eric WongApr 21, 2013
  11. 7/8 branch.c: Validate tracking branches with refspecs instead of refs/remotes/*Johan Herland, Apr 20, 2013
  12. 8/8 glossary: Update and rephrase the definition of a remote-tracking branchJohan Herland, Apr 20, 2013

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.