From: David Cantrell <david@xxxxxxxxxxxxxxx> If no --args are present after 'git restore' it assumes that you want to tab-complete one of the files with unstaged uncommitted changes. If a file has been staged we don't want to list it, as restoring those requires a slightly more complex `git restore --staged`, so we only list those files that are --modified. While --committable also looks like a good candidate, that includes changes that have been staged. Signed-off-by: David Cantrell <david@xxxxxxxxxxxxxxx> --- Improved bash tab completion for 'git restore' - adds support for auto-completing filenames This adds tab-completion of filenames to the bash completions for git restore. Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1227%2FDrHyde%2Ffilename-completion-for-git-restore-v3 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1227/DrHyde/filename-completion-for-git-restore-v3 Pull-Request: https://github.com/git/git/pull/1227 Range-diff vs v2: 1: 2bb8f1cb1c4 ! 1: 779744b9fc5 tab completion of filenames for 'git restore' @@ Commit message tab completion of filenames for 'git restore' If no --args are present after 'git restore' it assumes that you want - to tab-complete one of the files with uncommitted changes + to tab-complete one of the files with unstaged uncommitted changes. + + If a file has been staged we don't want to list it, as restoring those + requires a slightly more complex `git restore --staged`, so we only list + those files that are --modified. While --committable also looks like + a good candidate, that includes changes that have been staged. Signed-off-by: David Cantrell <david@xxxxxxxxxxxxxxx> ## contrib/completion/git-completion.bash ## @@ contrib/completion/git-completion.bash: _git_restore () - case "$cur" in - --conflict=*) - __gitcomp "diff3 merge zdiff3" "" "${cur##--conflict=}" -+ return - ;; - --source=*) - __git_complete_refs --cur="${cur##--source=}" -+ return - ;; --*) __gitcomp_builtin restore -+ return ;; ++ *) ++ if __git rev-parse --verify --quiet HEAD >/dev/null; then ++ __git_complete_index_file "--modified" ++ fi esac -+ -+ if __git rev-parse --verify --quiet HEAD >/dev/null; then -+ __git_complete_index_file "--committable" -+ fi } - __git_revert_inprogress_options=$__git_sequencer_inprogress_options 2: 16aa4d0b2e4 < -: ----------- if a file has been staged we don't want to list it contrib/completion/git-completion.bash | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 49a328aa8a4..ba5c395d2d8 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -2890,6 +2890,10 @@ _git_restore () --*) __gitcomp_builtin restore ;; + *) + if __git rev-parse --verify --quiet HEAD >/dev/null; then + __git_complete_index_file "--modified" + fi esac } base-commit: 1a4874565fa3b6668042216189551b98b4dc0b1b -- gitgitgadget