Skip to contentSkip to conversation

worktree: add completion for the rev argument in git worktree add <path> <rev>

PATCH In review Johannes Schindelin via GitGitGadget 2 participants 3 messages Dec 10, 2018 – Dec 11, 2018

lore
Share & tools
lore
#0 lore raw

cover worktree: add completion for the rev argument in git worktree add <path> <rev>

This is inspired by one of those half-finished contributions in the Git for Windows project. Fall cleaning, if you like.

Johannes Schindelin (1):
completion: complete <rev> in git worktree add <path> <rev>

 contrib/completion/git-completion.bash | 5 +++++
 1 file changed, 5 insertions(+)

base-commit: d166e6afe5f257217836ef24a73764eba390c58d
Published-As: https://github.com/gitgitgadget/git/releases/tags/pr-82%2Fdscho%2Fcomplete-worktree-add-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-82/dscho/complete-worktree-add-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/82

Signature · 1 line
gitgitgadget
#1 lore raw

PATCH 1/1 completion: complete <rev> in `git worktree add <path> <rev>`

From: Johannes Schindelin <[email protected]>

The second non-option argument to git worktree's add command is an optional revision. Let's complete it.

Inspired by https://github.com/git-for-windows/git/pull/1681.

---
 contrib/completion/git-completion.bash | 5 +++++
 1 file changed, 5 insertions(+)
contrib/completion/git-completion.bash +5 -0
index 9e8ec95c3c..4194b4a2e7 100644
@@ -2773,6 +2773,11 @@ _git_worktree ()
 		add,--*)
 			__gitcomp_builtin worktree_add
 			;;
+		add,*)
+			if [ $(__git_count_arguments "worktree") -eq 2 ]; then
+				__git_complete_refs
+			fi
+			;;
 		list,--*)
 			__gitcomp_builtin worktree_list
 			;;
Signature · 1 line
gitgitgadget
#2 lore raw

Re: [PATCH 1/1] completion: complete <rev> in `git worktree add <path> <rev>`

Quoted 17 lines · Johannes Schindelin via GitGitGadget

From: Johannes Schindelin <[email protected]>

The second non-option argument to git worktree's add command is an optional revision. Let's complete it.

Inspired by https://github.com/git-for-windows/git/pull/1681.

---
 contrib/completion/git-completion.bash | 5 +++++
 1 file changed, 5 insertions(+)
contrib/completion/git-completion.bash +0 -0
index 9e8ec95c3c..4194b4a2e7 100644

contrib/completion/git-completion.bash _git_worktree () · line 2780

Quoted 8 lines
contrib/completion/git-completion.bash +5 -0
@@ -2773,6 +2773,11 @@ _git_worktree ()
 		add,--*)
 			__gitcomp_builtin worktree_add
 			;;
+		add,*)
+			if [ $(__git_count_arguments "worktree") -eq 2 ]; then
+				__git_complete_refs
+			fi
+			;;

Unfortunately, this seems to work only in the following case:

git worktree add path <TAB>

i.e. when the two-be-completed word is still empty. However,

git worktree add path m<TAB>

doesn't work anymore, as it lists paths instead of refs. Furthermore,

  git worktree add --detach path <TAB>
  git worktree add --detach path m<TAB>
  git worktree add -b newbranch path <TAB>

list paths as well.

However, I presume unintentionally,

git worktree add -b <TAB>

does the right thing and lists refs, but with

git worktree add -b m<TAB>

we are back at paths instead of refs. OTOH,

  git worktree add --detach <TAB>
  git worktree add --lock <TAB>

will erroneously list refs.

I wrote a completion function for 'git worktree' a long while ago, back when it had only two subcommands, which did mostly the right thing, but I found it too convoluted for serious submission. Here it is for inspiration:

https://public-inbox.org/git/[email protected]/

Quoted 5 lines
contrib/completion/git-completion.bash +0 -0
 		list,--*)
 			__gitcomp_builtin worktree_list
 			;;
Signature · 1 line
gitgitgadget