Complete paths of working trees and refs for 'git worktree's various subcommands. The last two patches do the actual improvements, the first four are preparatory steps. Changes since v1: - Added an in-code comment and clarified the commit message of patch 5/6. v1: https://public-inbox.org/git/20191017173501.3198-1-szeder.dev@xxxxxxxxx/T/#u SZEDER Gábor (6): t9902-completion: add tests for the __git_find_on_cmdline() helper completion: clean up the __git_find_on_cmdline() helper function completion: return the index of found word from __git_find_on_cmdline() completion: simplify completing 'git worktree' subcommands and options completion: list existing working trees for 'git worktree' subcommands completion: list paths and refs for 'git worktree add' contrib/completion/git-completion.bash | 119 +++++++++++++++++++------ t/t9902-completion.sh | 57 ++++++++++++ 2 files changed, 150 insertions(+), 26 deletions(-) Range-diff against v1: 1: bd68b0b64b = 1: b370a97edc t9902-completion: add tests for the __git_find_on_cmdline() helper 2: b5c0312db6 = 2: fb8f1e4840 completion: clean up the __git_find_on_cmdline() helper function 3: 6999b0b8e2 = 3: 47aecb9ac0 completion: return the index of found word from __git_find_on_cmdline() 4: dd38374f2f = 4: 00c5a0f7df completion: simplify completing 'git worktree' subcommands and options 5: 619ff7021c ! 5: 2e4b1b3931 completion: list existing working trees for 'git worktree' subcommands @@ Commit message Never list the path of the main working tree, as it cannot be moved, removed, locked, or unlocked. - Arguably 'git worktree unlock <TAB>' should only complete locked - working trees, but 'git worktree list --porcelain' doesn't indicate - which working trees are locked. So for now it will complete the paths - of all existing working trees, including non-locked ones as well. + Ideally we would only list unlocked working trees for the 'move', + 'remove', and 'lock' subcommands, and only locked ones for 'unlock'. + Alas, 'git worktree list --porcelain' doesn't indicate which working + trees are locked, so for now we'll complete the paths of all existing + working trees. Signed-off-by: SZEDER Gábor <szeder.dev@xxxxxxxxx> @@ contrib/completion/git-completion.bash: _git_whatchanged () +{ + local IFS=$'\n' + __gitcomp_nl "$(git worktree list --porcelain | ++ # Skip the first entry: it's the path of the main worktree, ++ # which can't be moved, removed, locked, etc. + sed -n -e '2,$ s/^worktree //p')" +} + 6: 29a32e5d36 = 6: 16a9b5f4b2 completion: list paths and refs for 'git worktree add' -- 2.24.1.982.ga4d4aba446