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

[PATCH] completion: complete remote branches with switch --track

From
Jacob Keller <jacob.e.keller@intel.com>
Date
Apr 22, 2020, 20:15 UTC
Message-ID
<20200422201541.3766173-1-jacob.e.keller@intel.com>
From: Jacob Keller <jacob.keller@gmail.com>

If the --track option is supplied to git switch, then a new branch will be created tracking the specified remote branch.

Fix git completion support so that remote branches will be completed when --track is enabled.

Add a couple of simple test cases to help cover this new behavior. Note that ideally completion for --track would only allow remote branches, and would not complete all refs like HEAD, FETCH_HEAD, etc, so one of the new tests is a test_expect_failure to capture this.

Fixes: ae36fe694180 ("completion: support switch")
Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
---
I wasn't able to figure out how to get completion to ignore things like tags
and similar, but I think this is still an improvement.
 contrib/completion/git-completion.bash |  8 +++++---
 t/t9902-completion.sh                  | 22 ++++++++++++++++++++++
 2 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index c21786f2fd00..6de341fd1587 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -2235,12 +2235,14 @@ _git_switch ()
 		if [ -n "$(__git_find_on_cmdline "--guess")" ]; then
 			track_opt='--track'
 		fi
-		if [ -z "$(__git_find_on_cmdline "-d --detach")" ]; then
-			only_local_ref=y
-		else
+		if [ -n "$(__git_find_on_cmdline "-d --detach")" ]; then
 			# --guess --detach is invalid combination, no
 			# dwim will be done when --detach is specified
 			track_opt=
+		elif [ -z "$(__git_find_on_cmdline "--track")" ]; then
+			# if neither --detach or --track are specified then
+			# match only local refs.
+			only_local_ref=y
 		fi
 		if [ $only_local_ref = y -a -z "$track_opt" ]; then
 			__gitcomp_direct "$(__git_heads "" "$cur" " ")"
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index 5505e5aa249e..a2478eae6933 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -1760,6 +1760,28 @@ do
 	'
 done
 
+test_expect_success 'git switch - default local branches only' '
+	test_completion "git switch m" <<-\EOF
+	master Z
+	master-in-other Z
+	mybranch Z
+	mytag Z
+	EOF
+'
+
+test_expect_failure 'git switch - --track remote branches' '
+	test_completion "git switch --track " <<-\EOF
+	other/branch-in-other Z
+	other/master-in-other Z
+	EOF
+'
+
+test_expect_success 'git switch - --track remote branches partial completion' '
+	test_completion "git switch --track other/master-in" <<-\EOF
+	other/master-in-other Z
+	EOF
+'
+
 test_expect_success 'git config - section' '
 	test_completion "git config br" <<-\EOF
 	branch.Z
-- 
2.25.2
Next: Jonathan Nieder
Message 1 of 4 in “completion: complete remote branches with switch --track”
  1. completion: complete remote branches with switch --trackJacob Keller, Apr 22, 2020
  2. Jonathan NiederApr 23, 2020
  3. Jacob KellerApr 23, 2020
  4. Jacob KellerApr 23, 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.