[PATCH v2 0/4] completion: add support for 'git history'
Vincent Mailhol <[email protected]> Thu, 06 Aug 2026 22:27:35 +0200
| Newsgroups | org.kernel.vger.git |
|---|---|
| Message-ID | <[email protected]> |
This series adds Bash completion for the subcommands of "git history" and their options. Patch #1 adds the basic subcommand and options completion. Patch #2 and #3 take care of the value of the --empty and --update-refs options. Finally, Patch #4 adds completion for pathspecs accepted by "split". For each of the completions, add a set of relevant test cases. Signed-off-by: Vincent Mailhol <[email protected]> --- Changes in v2: - Complete exactly one required revision and leave subsequent arguments to subcommand-specific completion. - Do not complete options after "--". - Complete values for "--empty" and "--update-refs". - Complete pathspecs for "git history split". - Expand the test coverage for options, revisions, and pathspecs. Link to v1: https://lore.kernel.org/r/[email protected] --- Vincent Mailhol (4): completion: add 'git history' subcommands completion: complete 'git history --empty' values completion: complete 'git history --update-refs' values completion: complete 'git history split' pathspecs contrib/completion/git-completion.bash | 68 ++++++++++++++++++++++++++++++++++ t/t9902-completion.sh | 49 ++++++++++++++++++++++++ 2 files changed, 117 insertions(+) Range-diff versus v1: 1: d0574dca8c ! 1: 6625c7ac29 completion: add 'git history' subcommands @@ Metadata ## Commit message ## completion: add 'git history' subcommands - Use the parse-options completion helpers for the "git history" - subcommands and their options. Complete positional arguments as - revisions, and add coverage for each kind of completion. + Use the parse-options completion helpers for the + + git history + + subcommands and their options. All current history subcommands take a + revision as their first positional argument, so complete that argument + as a revision. + + Once the revision is present, leave any further positional arguments to + subcommand-specific completion. This allows a subcommand to complete + another kind of argument, such as the pathspec accepted by + + git history split + + or another revision if a future subcommand accepts one. Signed-off-by: Vincent Mailhol <[email protected]> + --- + Changes in v2: + + - Test options before and after revisions. + - Do not complete options after "--". + - Stop revision completion after the first required ## contrib/completion/git-completion.bash ## @@ contrib/completion/git-completion.bash: _git_help () fi } ++__git_history_has_revision () ++{ ++ local i ++ ++ for ((i = __git_cmd_idx + 2; i < cword; i++)); do ++ case "${words[i]}" in ++ --empty|--update-refs) ++ ((i++)) ++ ;; ++ -*) ++ ;; ++ *) ++ return 0 ++ ;; ++ esac ++ done ++ return 1 ++} ++ +_git_history () +{ + local subcommands subcommand @@ contrib/completion/git-completion.bash: _git_help () + return + fi + -+ case "$cur" in -+ --*) -+ __gitcomp_builtin "history_$subcommand" -+ ;; -+ *) ++ if ! __git_has_doubledash; then ++ case "$cur" in ++ --*) ++ __gitcomp_builtin "history_$subcommand" ++ return ++ ;; ++ esac ++ fi ++ ++ if ! __git_history_has_revision; then + __git_complete_refs -+ ;; -+ esac ++ return ++ fi +} + _git_init () @@ t/t9902-completion.sh: test_expect_success 'git clone --config= - value' ' +' + +test_expect_success 'git history subcommand options' ' -+ test_completion "git history fixup --upd" "--update-refs=" ++ test_completion "git history split main --" <<-\EOF && ++ --update-refs=Z ++ --dry-run Z ++ --no-dry-run Z ++ EOF ++ test_completion "git history fixup --upd" "--update-refs=" && ++ test_completion "git history fixup --ree" "--reedit-message " && ++ test_completion "git history split --upd" "--update-refs=" && ++ test_completion "git history split main --dry" "--dry-run " && ++ test_completion "git history reword main -- --d" "" +' + +test_expect_success 'git history revisions' ' -+ test_completion "git history split ma" "main " ++ test_completion "git history split ma" "main " && ++ test_completion "git history split --update-refs head ma" "main " && ++ test_completion "git history fixup --empty drop ma" "main " && ++ test_completion "git history reword main m" "" +' + test_expect_success 'git reflog show' ' -: ---------- > 2: f618f35153 completion: complete 'git history --empty' values -: ---------- > 3: abae09f208 completion: complete 'git history --update-refs' values -: ---------- > 4: 7bfb6664dc completion: complete 'git history split' pathspecs --- base-commit: c56d675cccfbcf71406c4a6806c7745e4a756294 change-id: 20260804-history_autocompletion-84620c2f8500