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

[PATCH v3 04/16] completion: add tests showing subpar switch/checkout --track logic

From
Jacob Keller <jacob.e.keller@intel.com>
Date
May 28, 2020, 18:10 UTC
Message-ID
<20200528181048.3509470-5-jacob.e.keller@intel.com>
In-Reply-To
<20200528181048.3509470-1-jacob.e.keller@intel.com>
From: Jacob Keller <jacob.keller@gmail.com>

When the --track option is provided to git switch or git checkout, and no branch is specified by -c or -b, git will interpret the tracking branch to determine the local branch name to use. This "Do What I Mean" logic is similar but distinct from the default DWIM logic of interpreting a unique remote branch name as a request to create and track that branch.

For example, `git switch --track origin/master` is interpreted as a request to create a local branch named master that is tracking origin/master.

The current completion for git checkout in this regard is only somewhat poor:

 $git checkout --track <TAB>
 HEAD
 master
 matching-branch
 matching-tag
 other/branch-in-other
 other/master-in-other

At least it still includes remote references. The clutter from including all references isn't too bad.

However, git switch completion is terrible:
 $git switch --track <TAB>
 master
 matching-branch

It only shows local branches, not even allowing any form of completion of the remote references!

Add tests which highlight the expected behavior of completing --track on its own.

Note that when -c/-C or -b/-B are provided we do expect completing more references, but this will be discussed in a future change that addresses these options specifically.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
---
 t/t9902-completion.sh | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index 01aba598e7fc..8a3995f82f38 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -1414,6 +1414,40 @@ test_expect_failure 'git checkout - with -d, complete only references' '
 	EOF
 '
 
+#TODO: --track should only complete fully specified remote branches
+test_expect_failure 'git switch - with --track, complete only remote branches' '
+	test_completion "git switch --track " <<-\EOF
+	other/branch-in-other Z
+	other/master-in-other Z
+	EOF
+'
+
+#TODO: --track should only complete fully specified remote branches
+test_expect_failure 'git checkout - with --track, complete only remote branches' '
+	test_completion "git checkout --track " <<-\EOF
+	other/branch-in-other Z
+	other/master-in-other Z
+	EOF
+'
+
+test_expect_success 'git switch - with --no-track, complete only local branch names' '
+	test_completion "git switch --no-track " <<-\EOF
+	master Z
+	matching-branch Z
+	EOF
+'
+
+test_expect_success 'git checkout - with --no-track, complete only local references' '
+	test_completion "git checkout --no-track " <<-\EOF
+	HEAD Z
+	master Z
+	matching-branch Z
+	matching-tag Z
+	other/branch-in-other Z
+	other/master-in-other Z
+	EOF
+'
+
 test_expect_success 'teardown after ref completion' '
 	git branch -d matching-branch &&
 	git tag -d matching-tag &&
-- 
2.25.2
Previous: Jacob KellerNext: Jacob Keller
Message 11 of 17 in “improve switch/checkout completion”
  1. 00/16 improve switch/checkout completionJacob Keller, May 28, 2020
  2. 10/16 completion: perform DWIM logic directly in __git_complete_refsJacob Keller, May 28, 2020
  3. 08/16 completion: replace overloaded track term for __git_complete_refsJacob Keller, May 28, 2020
  4. 09/16 completion: extract function __git_dwim_remote_headsJacob Keller, May 28, 2020
  5. 14/16 completion: improve handling of --track in switch/checkoutJacob Keller, May 28, 2020
  6. 16/16 completion: improve handling of --orphan option of switch/checkoutJacob Keller, May 28, 2020
  7. 12/16 completion: improve completion for git switch with no optionsJacob Keller, May 28, 2020
  8. 07/16 completion: add tests showing subpar switch/checkout --orphan logicJacob Keller, May 28, 2020
  9. 11/16 completion: improve handling of DWIM mode for switch/checkoutJacob Keller, May 28, 2020
  10. 03/16 completion: add tests showing subar checkout --detach logicJacob Keller, May 28, 2020
  11. 04/16 completion: add tests showing subpar switch/checkout --track logicJacob Keller, May 28, 2020
  12. 02/16 completion: add tests showing subpar DWIM logic for switch/checkoutJacob Keller, May 28, 2020
  13. 01/16 completion: add test showing subpar git switch completionJacob Keller, May 28, 2020
  14. 13/16 completion: improve handling of --detach in checkoutJacob Keller, May 28, 2020
  15. 05/16 completion: add tests showing subpar -c/-C startpoint completionJacob Keller, May 28, 2020
  16. 06/16 completion: add tests showing subpar -c/C argument completionJacob Keller, May 28, 2020
  17. 15/16 completion: improve handling of -c/-C and -b/-B in switch/checkoutJacob Keller, May 28, 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.