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

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

From
Johan Herland <johan@herland.net>
Date
Apr 21, 2013, 21:52 UTC
Message-ID
<1366581126-3880-3-git-send-email-johan@herland.net>
In-Reply-To
<1366581126-3880-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.

Improved-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Johan Herland <johan@herland.net>
---
 t/t2024-checkout-dwim.sh | 70 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 69 insertions(+), 1 deletion(-)
diff --git a/t/t2024-checkout-dwim.sh b/t/t2024-checkout-dwim.sh
index 1452bea..b1e3444 100755
--- a/t/t2024-checkout-dwim.sh
+++ b/t/t2024-checkout-dwim.sh
@@ -24,6 +24,7 @@ test_branch_upstream () {
 }
 
 test_expect_success 'setup' '
+	test_commit my_master &&
 	git init repo_a &&
 	(
 		cd repo_a &&
@@ -58,7 +59,7 @@ test_expect_success 'checkout of non-existing branch fails' '
 	test_branch master
 '
 
-test_expect_success 'checkout of branch from multiple remotes fails' '
+test_expect_success 'checkout of branch from multiple remotes fails #1' '
 	git checkout -B master &&
 	test_might_fail git branch -D foo &&
 
@@ -96,4 +97,71 @@ test_expect_success '--no-guess suppresses branch auto-vivification' '
 	test_branch master
 '
 
+test_expect_success 'setup more remotes with unconventional refspecs' '
+	git checkout -B 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 remote add repo_d repo_d &&
+	git config remote.repo_d.fetch \
+		"+refs/heads/*:refs/repo_d/*" &&
+	git fetch --all
+'
+
+test_expect_failure 'checkout of branch from multiple remotes fails #2' '
+	git checkout -B master &&
+	test_might_fail git branch -D bar &&
+
+	test_must_fail git checkout bar &&
+	test_must_fail git rev-parse --verify refs/heads/bar &&
+	test_branch master
+'
+
+test_expect_failure 'checkout of branch from multiple remotes fails #3' '
+	git checkout -B master &&
+	test_might_fail git branch -D baz &&
+
+	test_must_fail git checkout baz &&
+	test_must_fail git rev-parse --verify refs/heads/baz &&
+	test_branch master
+'
+
+test_expect_failure 'checkout of branch from a single remote succeeds #3' '
+	git checkout -B master &&
+	test_might_fail git branch -D spam &&
+
+	git checkout spam &&
+	test_branch spam &&
+	test_cmp_rev refs/remotes/extra_dir/repo_c/extra_dir/spam HEAD &&
+	test_branch_upstream spam repo_c spam
+'
+
+test_expect_failure 'checkout of branch from a single remote succeeds #4' '
+	git checkout -B master &&
+	test_might_fail git branch -D eggs &&
+
+	git checkout eggs &&
+	test_branch eggs &&
+	test_cmp_rev refs/repo_d/eggs HEAD &&
+	test_branch_upstream eggs repo_d eggs
+'
+
 test_done
-- 
1.8.1.3.704.g33f7d4f
Previous: Johan HerlandNext: Johan Herland
Message 3 of 9 in “[PATCHv3 0/8] Improving the search for remote-tracking branches”
  1. Johan HerlandApr 21, 2013
  2. 1/8 t2024: Add tests verifying current DWIM behavior of 'git checkout <branch>'Johan Herland, Apr 21, 2013
  3. 2/8 t2024: Show failure to use refspec when DWIMming remote branch namesJohan Herland, Apr 21, 2013
  4. 3/8 checkout: Use remote refspecs when DWIMming tracking branchesJohan Herland, Apr 21, 2013
  5. 4/8 t3200.39: tracking setup should fail if there is no matching refspec.Johan Herland, Apr 21, 2013
  6. 5/8 t7201.24: Add refspec to keep --track workingJohan Herland, Apr 21, 2013
  7. 6/8 t9114.2: Don't use --track option against "svn-remote"-tracking branchesJohan Herland, Apr 21, 2013
  8. 7/8 branch.c: Validate tracking branches with refspecs instead of refs/remotes/*Johan Herland, Apr 21, 2013
  9. 8/8 glossary: Update and rephrase the definition of a remote-tracking branchJohan Herland, Apr 21, 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.