* [PATCH] completion: add 'git history' subcommands
@ 2026-08-04 19:56 Vincent Mailhol
2026-08-05 6:19 ` Patrick Steinhardt
2026-08-13 19:05 ` [PATCH v3 0/4] completion: add support for 'git history' Vincent Mailhol
0 siblings, 2 replies; 12+ messages in thread
From: Vincent Mailhol @ 2026-08-04 19:56 UTC (permalink / raw)
To: git; +Cc: Junio C Hamano, Philippe Blain, Patrick Steinhardt,
Vincent Mailhol
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.
Signed-off-by: Vincent Mailhol <mailhol@kernel.org>
---
contrib/completion/git-completion.bash | 24 ++++++++++++++++++++++++
t/t9902-completion.sh | 17 +++++++++++++++++
2 files changed, 41 insertions(+)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index e875787710..f10813c8d7 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -2137,6 +2137,30 @@ _git_help ()
fi
}
+_git_history ()
+{
+ local subcommands subcommand
+
+ __git_resolve_builtins "history"
+
+ subcommands="$___git_resolved_builtins"
+ subcommand="$(__git_find_subcommand "$subcommands")"
+
+ if [ -z "$subcommand" ]; then
+ __gitcomp "$subcommands"
+ return
+ fi
+
+ case "$cur" in
+ --*)
+ __gitcomp_builtin "history_$subcommand"
+ ;;
+ *)
+ __git_complete_refs
+ ;;
+ esac
+}
+
_git_init ()
{
case "$cur" in
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index 9ae3c48ebd..08ecf682ed 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -3107,6 +3107,23 @@ test_expect_success 'git clone --config= - value' '
EOF
'
+test_expect_success 'git history subcommands' '
+ test_completion "git history " <<-\EOF
+ drop Z
+ fixup Z
+ reword Z
+ split Z
+ EOF
+'
+
+test_expect_success 'git history subcommand options' '
+ test_completion "git history fixup --upd" "--update-refs="
+'
+
+test_expect_success 'git history revisions' '
+ test_completion "git history split ma" "main "
+'
+
test_expect_success 'git reflog show' '
test_when_finished "git checkout - && git branch -d shown" &&
git checkout -b shown &&
---
base-commit: 5b2471720c93ee30e5764a19f3d3b3ae9ec9712a
change-id: 20260804-history_autocompletion-84620c2f8500
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH] completion: add 'git history' subcommands
2026-08-04 19:56 [PATCH] completion: add 'git history' subcommands Vincent Mailhol
@ 2026-08-05 6:19 ` Patrick Steinhardt
2026-08-05 11:56 ` D. Ben Knoble
2026-08-05 16:15 ` Junio C Hamano
2026-08-13 19:05 ` [PATCH v3 0/4] completion: add support for 'git history' Vincent Mailhol
1 sibling, 2 replies; 12+ messages in thread
From: Patrick Steinhardt @ 2026-08-05 6:19 UTC (permalink / raw)
To: Vincent Mailhol; +Cc: git, Junio C Hamano, Philippe Blain
On Tue, Aug 04, 2026 at 09:56:32PM +0200, Vincent Mailhol wrote:
> 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.
Ah, great! I wanted to write shell completion for git-history(1) for a
while but never really found the time to actually do it.
> diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
> index e875787710..f10813c8d7 100644
> --- a/contrib/completion/git-completion.bash
> +++ b/contrib/completion/git-completion.bash
> @@ -2137,6 +2137,30 @@ _git_help ()
> fi
> }
>
> +_git_history ()
> +{
> + local subcommands subcommand
> +
> + __git_resolve_builtins "history"
> +
> + subcommands="$___git_resolved_builtins"
> + subcommand="$(__git_find_subcommand "$subcommands")"
> +
> + if [ -z "$subcommand" ]; then
> + __gitcomp "$subcommands"
> + return
> + fi
Okay. We first try to figure out whether there is any subcommand passed
by the user already. If not, we complete available subcommands.
> + case "$cur" in
> + --*)
> + __gitcomp_builtin "history_$subcommand"
> + ;;
> + *)
> + __git_complete_refs
> + ;;
> + esac
> +}
Otherwise we try to either complete available options if we see a
leading "--", or alternatively we complete references. This works well
for "drop", "fixup" and "reword".
The one command where this falls flat a bit is `git history split`.
While the first non-option argument is indeed a reference, subsequent
arguments are pathspecs. So ideally, we'd notice that we already have a
reference there and, if so, complete file paths.
But that being said, I think this is a good-enough first iteration and a
strict improvement over the status quo -- we don't have to be perfect
right from the start. So if you want to also make that case work then
great, but I won't insist on it.
> diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
> index 9ae3c48ebd..08ecf682ed 100755
> --- a/t/t9902-completion.sh
> +++ b/t/t9902-completion.sh
> @@ -3107,6 +3107,23 @@ test_expect_success 'git clone --config= - value' '
> EOF
> '
>
> +test_expect_success 'git history subcommands' '
> + test_completion "git history " <<-\EOF
> + drop Z
> + fixup Z
> + reword Z
> + split Z
> + EOF
> +'
This will cause conflicts with "seen", as there's a new upcoming
"squash" command that's currently cooking there. That's fine though,
nothing you can do about that.
Thanks!
Patrick
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] completion: add 'git history' subcommands
2026-08-05 6:19 ` Patrick Steinhardt
@ 2026-08-05 11:56 ` D. Ben Knoble
2026-08-05 16:15 ` Junio C Hamano
1 sibling, 0 replies; 12+ messages in thread
From: D. Ben Knoble @ 2026-08-05 11:56 UTC (permalink / raw)
To: Patrick Steinhardt; +Cc: Vincent Mailhol, git, Junio C Hamano, Philippe Blain
Hi all,
I agree with Patrick's review below, this looks good to me! One note…
On Wed, Aug 5, 2026 at 2:25 AM Patrick Steinhardt <ps@pks.im> wrote:
>
> On Tue, Aug 04, 2026 at 09:56:32PM +0200, Vincent Mailhol wrote:
> > 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.
>
> Ah, great! I wanted to write shell completion for git-history(1) for a
> while but never really found the time to actually do it.
>
> > diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
> > index e875787710..f10813c8d7 100644
> > --- a/contrib/completion/git-completion.bash
> > +++ b/contrib/completion/git-completion.bash
> > @@ -2137,6 +2137,30 @@ _git_help ()
> > fi
> > }
> >
> > +_git_history ()
> > +{
> > + local subcommands subcommand
> > +
> > + __git_resolve_builtins "history"
> > +
> > + subcommands="$___git_resolved_builtins"
> > + subcommand="$(__git_find_subcommand "$subcommands")"
> > +
> > + if [ -z "$subcommand" ]; then
> > + __gitcomp "$subcommands"
> > + return
> > + fi
>
> Okay. We first try to figure out whether there is any subcommand passed
> by the user already. If not, we complete available subcommands.
>
> > + case "$cur" in
> > + --*)
> > + __gitcomp_builtin "history_$subcommand"
> > + ;;
> > + *)
> > + __git_complete_refs
> > + ;;
> > + esac
> > +}
>
> Otherwise we try to either complete available options if we see a
> leading "--", or alternatively we complete references. This works well
> for "drop", "fixup" and "reword".
>
> The one command where this falls flat a bit is `git history split`.
> While the first non-option argument is indeed a reference, subsequent
> arguments are pathspecs. So ideally, we'd notice that we already have a
> reference there and, if so, complete file paths.
…here: I think it's probably going to look a bit like what _git_reflog
and _git_config do, checking the subcommand and using somewhat more
specific completion in that case.
BTW, I'm also reminded of <xmqqpl6g9fyu.fsf@gitster.g>, where Junio
suggested we devise a way to improve _git_stash. Looking at it again
with some context, I bet we can reuse the __git_resolve_builtins
pattern there, too. Not for this patch, of course, just thinking
aloud!
> But that being said, I think this is a good-enough first iteration and a
> strict improvement over the status quo -- we don't have to be perfect
> right from the start. So if you want to also make that case work then
> great, but I won't insist on it.
>
> > diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
> > index 9ae3c48ebd..08ecf682ed 100755
> > --- a/t/t9902-completion.sh
> > +++ b/t/t9902-completion.sh
> > @@ -3107,6 +3107,23 @@ test_expect_success 'git clone --config= - value' '
> > EOF
> > '
> >
> > +test_expect_success 'git history subcommands' '
> > + test_completion "git history " <<-\EOF
> > + drop Z
> > + fixup Z
> > + reword Z
> > + split Z
> > + EOF
> > +'
>
> This will cause conflicts with "seen", as there's a new upcoming
> "squash" command that's currently cooking there. That's fine though,
> nothing you can do about that.
>
> Thanks!
>
> Patrick
Thanks!
--
D. Ben Knoble
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] completion: add 'git history' subcommands
2026-08-05 6:19 ` Patrick Steinhardt
2026-08-05 11:56 ` D. Ben Knoble
@ 2026-08-05 16:15 ` Junio C Hamano
2026-08-05 21:20 ` Vincent Mailhol
1 sibling, 1 reply; 12+ messages in thread
From: Junio C Hamano @ 2026-08-05 16:15 UTC (permalink / raw)
To: Patrick Steinhardt; +Cc: Vincent Mailhol, git, Philippe Blain
Patrick Steinhardt <ps@pks.im> writes:
> On Tue, Aug 04, 2026 at 09:56:32PM +0200, Vincent Mailhol wrote:
>> 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.
>
> Ah, great! I wanted to write shell completion for git-history(1) for a
> while but never really found the time to actually do it.
>
>> diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
>> index e875787710..f10813c8d7 100644
>> --- a/contrib/completion/git-completion.bash
>> +++ b/contrib/completion/git-completion.bash
>> @@ -2137,6 +2137,30 @@ _git_help ()
>> fi
>> }
>>
>> +_git_history ()
>> +{
>> + local subcommands subcommand
>> +
>> + __git_resolve_builtins "history"
>> +
>> + subcommands="$___git_resolved_builtins"
>> + subcommand="$(__git_find_subcommand "$subcommands")"
>> +
>> + if [ -z "$subcommand" ]; then
>> + __gitcomp "$subcommands"
>> + return
>> + fi
>
> Okay. We first try to figure out whether there is any subcommand passed
> by the user already. If not, we complete available subcommands.
This may be a tangent, but anyway. I was looking at this patch (not
that I think I am capable of giving a completion patch a serious
review), comparing with other completions, and the similarity of the
boilerplate part above was so striking. I suspect that these were
organically grown, but at some point when the tree is quiescent, can
we coalesce the completion routines for subcommands that share the
same pattern for better maintainability?
Thanks.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] completion: add 'git history' subcommands
2026-08-05 16:15 ` Junio C Hamano
@ 2026-08-05 21:20 ` Vincent Mailhol
2026-08-06 5:18 ` Patrick Steinhardt
0 siblings, 1 reply; 12+ messages in thread
From: Vincent Mailhol @ 2026-08-05 21:20 UTC (permalink / raw)
To: Junio C Hamano, Patrick Steinhardt; +Cc: git, Philippe Blain
On 05/08/2026 at 18:15, Junio C Hamano wrote:
> Patrick Steinhardt <ps@pks.im> writes:
>
>> On Tue, Aug 04, 2026 at 09:56:32PM +0200, Vincent Mailhol wrote:
>>> 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.
>>
>> Ah, great! I wanted to write shell completion for git-history(1) for a
>> while but never really found the time to actually do it.
>>
>>> diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
>>> index e875787710..f10813c8d7 100644
>>> --- a/contrib/completion/git-completion.bash
>>> +++ b/contrib/completion/git-completion.bash
>>> @@ -2137,6 +2137,30 @@ _git_help ()
>>> fi
>>> }
>>>
>>> +_git_history ()
>>> +{
>>> + local subcommands subcommand
>>> +
>>> + __git_resolve_builtins "history"
>>> +
>>> + subcommands="$___git_resolved_builtins"
>>> + subcommand="$(__git_find_subcommand "$subcommands")"
>>> +
>>> + if [ -z "$subcommand" ]; then
>>> + __gitcomp "$subcommands"
>>> + return
>>> + fi
>>
>> Okay. We first try to figure out whether there is any subcommand passed
>> by the user already. If not, we complete available subcommands.
>
> This may be a tangent, but anyway. I was looking at this patch (not
> that I think I am capable of giving a completion patch a serious
> review), comparing with other completions, and the similarity of the
> boilerplate part above was so striking. I suspect that these were
> organically grown, but at some point when the tree is quiescent, can
> we coalesce the completion routines for subcommands that share the
> same pattern for better maintainability?
I am not sure if this would increase the maintainability.
For example, I started looking at Patrick's suggestion ※ to cover the
git history split
special case. If we add this, we would need to dispatch this in
_git_history() by adding something like:
if [ "$subcommand" = "split" ]; then
__git_complete_history_split
return
fi
but if we coalesce the completion routine for the subcommands, where
should this dispatcher go?
I see this boilerplate as a skeleton waiting for extensions. Of course,
maybe I am missing some points and maybe we can coalesce the code while
still allowing for extensions. But currently, I am not able to depict
how this should look like.
※ The fact that I started to look at the 'git history split' completion
doesn't mean that I am committing myself to implement it. I will do a
best effort try in my available time. If I get a decent result, I will
share, if not, I would ask you to bear with the current patch!
Yours sincerely,
Vincent Mailhol
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] completion: add 'git history' subcommands
2026-08-05 21:20 ` Vincent Mailhol
@ 2026-08-06 5:18 ` Patrick Steinhardt
0 siblings, 0 replies; 12+ messages in thread
From: Patrick Steinhardt @ 2026-08-06 5:18 UTC (permalink / raw)
To: Vincent Mailhol; +Cc: Junio C Hamano, git, Philippe Blain
On Wed, Aug 05, 2026 at 11:20:58PM +0200, Vincent Mailhol wrote:
> On 05/08/2026 at 18:15, Junio C Hamano wrote:
> ※ The fact that I started to look at the 'git history split' completion
> doesn't mean that I am committing myself to implement it. I will do a
> best effort try in my available time. If I get a decent result, I will
> share, if not, I would ask you to bear with the current patch!
Works for me. Would be great if you could give us an update though over
the next days to say whether you will or will not submit a v2 with `git
history split`.
Thanks!
Patrick
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v3 0/4] completion: add support for 'git history'
2026-08-04 19:56 [PATCH] completion: add 'git history' subcommands Vincent Mailhol
2026-08-05 6:19 ` Patrick Steinhardt
@ 2026-08-13 19:05 ` Vincent Mailhol
2026-08-13 19:05 ` [PATCH v3 1/4] completion: add 'git history' subcommands Vincent Mailhol
` (4 more replies)
1 sibling, 5 replies; 12+ messages in thread
From: Vincent Mailhol @ 2026-08-13 19:05 UTC (permalink / raw)
To: git
Cc: Junio C Hamano, Philippe Blain, Patrick Steinhardt, Ben Knoble,
Vincent Mailhol
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
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 <mailhol@kernel.org>
---
Changes in v3:
- Ignore the split "<option> <value>" syntax for options that take
arguments. This simplifies revision detection and avoids hard-coding
option names.
- Test that options are not completed before a subcommand.
Link to v2: https://lore.kernel.org/r/20260806-history_autocompletion-v2-0-7e60f52a1c20@kernel.org
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/20260804-history_autocompletion-v1-1-6f7459ffb677@kernel.org
---
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 | 65 ++++++++++++++++++++++++++++++++++
t/t9902-completion.sh | 50 ++++++++++++++++++++++++++
2 files changed, 115 insertions(+)
Range-diff versus v2:
1: 529ecbe28c ! 1: 5764875d09 completion: add 'git history' subcommands
@@ Commit message
Signed-off-by: Vincent Mailhol <mailhol@kernel.org>
---
+ Changes in v3:
+
+ - Ignore the split "<option> <value>" syntax for options that take
+ arguments. This simplifies revision detection and avoids hard-coding
+ option names.
+ - Test that options are not completed before a subcommand.
+
Changes in v2:
- Test options before and after revisions.
- Do not complete options after "--".
- - Stop revision completion after the first required
+ - Stop revision completion after the first required revision.
## contrib/completion/git-completion.bash ##
@@ contrib/completion/git-completion.bash: _git_help ()
@@ contrib/completion/git-completion.bash: _git_help ()
+
+ for ((i = __git_cmd_idx + 2; i < cword; i++)); do
+ case "${words[i]}" in
-+ --empty|--update-refs)
-+ ((i++))
-+ ;;
+ -*)
+ ;;
+ *)
@@ t/t9902-completion.sh: test_expect_success 'git clone --config= - value' '
'
+test_expect_success 'git history subcommands' '
-+ test_completion "git history " <<-\EOF
++ test_completion "git history " <<-\EOF &&
+ drop Z
+ fixup Z
+ reword Z
+ split Z
+ EOF
++ test_completion "git history --" ""
+'
+
+test_expect_success 'git history subcommand options' '
@@ t/t9902-completion.sh: test_expect_success 'git clone --config= - value' '
+
+test_expect_success 'git history revisions' '
+ 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 split --update-refs=head ma" "main " &&
++ test_completion "git history fixup --empty=drop ma" "main " &&
+ test_completion "git history reword main m" ""
+'
+
2: 691965330f < -: ---------- completion: complete 'git history --empty' values
3: 02303a7762 < -: ---------- completion: complete 'git history --update-refs' values
-: ---------- > 2: 224fb8dc32 completion: complete 'git history --empty' values
-: ---------- > 3: 60a54d5a8b completion: complete 'git history --update-refs' values
4: 39823df359 ! 4: c895589110 completion: complete 'git history split' pathspecs
@@ Commit message
Signed-off-by: Vincent Mailhol <mailhol@kernel.org>
---
+ Changes in v3:
+
+ - No changes.
+
Changes in v2:
- New patch.
---
base-commit: 4f2b99511996c64e58c74e2b8bd3d7ec33452a47
change-id: 20260804-history_autocompletion-84620c2f8500
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v3 1/4] completion: add 'git history' subcommands
2026-08-13 19:05 ` [PATCH v3 0/4] completion: add support for 'git history' Vincent Mailhol
@ 2026-08-13 19:05 ` Vincent Mailhol
2026-08-13 19:05 ` [PATCH v3 2/4] completion: complete 'git history --empty' values Vincent Mailhol
` (3 subsequent siblings)
4 siblings, 0 replies; 12+ messages in thread
From: Vincent Mailhol @ 2026-08-13 19:05 UTC (permalink / raw)
To: git
Cc: Junio C Hamano, Philippe Blain, Patrick Steinhardt, Ben Knoble,
Vincent Mailhol
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 <mailhol@kernel.org>
---
Changes in v3:
- Ignore the split "<option> <value>" syntax for options that take
arguments. This simplifies revision detection and avoids hard-coding
option names.
- Test that options are not completed before a subcommand.
Changes in v2:
- Test options before and after revisions.
- Do not complete options after "--".
- Stop revision completion after the first required revision.
---
contrib/completion/git-completion.bash | 45 ++++++++++++++++++++++++++++++++++
t/t9902-completion.sh | 30 +++++++++++++++++++++++
2 files changed, 75 insertions(+)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index e875787710..1727768487 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -2137,6 +2137,51 @@ _git_help ()
fi
}
+__git_history_has_revision ()
+{
+ local i
+
+ for ((i = __git_cmd_idx + 2; i < cword; i++)); do
+ case "${words[i]}" in
+ -*)
+ ;;
+ *)
+ return 0
+ ;;
+ esac
+ done
+ return 1
+}
+
+_git_history ()
+{
+ local subcommands subcommand
+
+ __git_resolve_builtins "history"
+
+ subcommands="$___git_resolved_builtins"
+ subcommand="$(__git_find_subcommand "$subcommands")"
+
+ if [ -z "$subcommand" ]; then
+ __gitcomp "$subcommands"
+ return
+ fi
+
+ if ! __git_has_doubledash; then
+ case "$cur" in
+ --*)
+ __gitcomp_builtin "history_$subcommand"
+ return
+ ;;
+ esac
+ fi
+
+ if ! __git_history_has_revision; then
+ __git_complete_refs
+ return
+ fi
+}
+
_git_init ()
{
case "$cur" in
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index 9ae3c48ebd..d0d8f2ba4a 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -3107,6 +3107,36 @@ test_expect_success 'git clone --config= - value' '
EOF
'
+test_expect_success 'git history subcommands' '
+ test_completion "git history " <<-\EOF &&
+ drop Z
+ fixup Z
+ reword Z
+ split Z
+ EOF
+ test_completion "git history --" ""
+'
+
+test_expect_success 'git history subcommand options' '
+ 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 --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' '
test_when_finished "git checkout - && git branch -d shown" &&
git checkout -b shown &&
--
2.54.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 2/4] completion: complete 'git history --empty' values
2026-08-13 19:05 ` [PATCH v3 0/4] completion: add support for 'git history' Vincent Mailhol
2026-08-13 19:05 ` [PATCH v3 1/4] completion: add 'git history' subcommands Vincent Mailhol
@ 2026-08-13 19:05 ` Vincent Mailhol
2026-08-13 19:05 ` [PATCH v3 3/4] completion: complete 'git history --update-refs' values Vincent Mailhol
` (2 subsequent siblings)
4 siblings, 0 replies; 12+ messages in thread
From: Vincent Mailhol @ 2026-08-13 19:05 UTC (permalink / raw)
To: git
Cc: Junio C Hamano, Philippe Blain, Patrick Steinhardt, Ben Knoble,
Vincent Mailhol
The "--empty" option accepts "drop", "keep", or "abort" for the "drop"
and "fixup" subcommands. Complete these values for the documented
--empty=<value>
form.
While parse-options also accepts the split
--empty <value>
form, it is not documented. Omit it from completion as a trade-off for
code simplicity.
Signed-off-by: Vincent Mailhol <mailhol@kernel.org>
---
Changes in v3:
- Complete only the documented stuck form.
Changes in v2:
- New patch.
---
contrib/completion/git-completion.bash | 9 +++++++++
t/t9902-completion.sh | 6 +++++-
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 1727768487..7f3cabd595 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -2169,6 +2169,15 @@ _git_history ()
if ! __git_has_doubledash; then
case "$cur" in
+ --empty=*)
+ case "$subcommand" in
+ drop|fixup)
+ __gitcomp "drop keep abort" "" \
+ "${cur##--empty=}"
+ ;;
+ esac
+ return
+ ;;
--*)
__gitcomp_builtin "history_$subcommand"
return
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index d0d8f2ba4a..851be383e1 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -3127,7 +3127,11 @@ test_expect_success 'git history subcommand options' '
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_completion "git history reword main -- --d" "" &&
+ test_completion "git history fixup --empty=ke" "keep " &&
+ test_completion "git history fixup --empty=drop" "drop " &&
+ test_completion "git history drop --empty=ab" "abort " &&
+ test_completion "git history reword --empty=ke" ""
'
test_expect_success 'git history revisions' '
--
2.54.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 3/4] completion: complete 'git history --update-refs' values
2026-08-13 19:05 ` [PATCH v3 0/4] completion: add support for 'git history' Vincent Mailhol
2026-08-13 19:05 ` [PATCH v3 1/4] completion: add 'git history' subcommands Vincent Mailhol
2026-08-13 19:05 ` [PATCH v3 2/4] completion: complete 'git history --empty' values Vincent Mailhol
@ 2026-08-13 19:05 ` Vincent Mailhol
2026-08-13 19:05 ` [PATCH v3 4/4] completion: complete 'git history split' pathspecs Vincent Mailhol
2026-08-13 20:30 ` [PATCH v3 0/4] completion: add support for 'git history' Kristoffer Haugsbakk
4 siblings, 0 replies; 12+ messages in thread
From: Vincent Mailhol @ 2026-08-13 19:05 UTC (permalink / raw)
To: git
Cc: Junio C Hamano, Philippe Blain, Patrick Steinhardt, Ben Knoble,
Vincent Mailhol
The "--update-refs" option accepts either "branches" or "head".
Complete these values for the documented
--update-refs=<value>
form.
While parse-options also accepts the split
--update-refs <value>
form, it is not documented. Omit it from completion as a trade-off for
code simplicity.
Signed-off-by: Vincent Mailhol <mailhol@kernel.org>
---
Changes in v3:
- Complete only the documented stuck form.
Changes in v2:
- New patch.
---
contrib/completion/git-completion.bash | 5 +++++
t/t9902-completion.sh | 5 ++++-
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 7f3cabd595..19600940dc 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -2178,6 +2178,11 @@ _git_history ()
esac
return
;;
+ --update-refs=*)
+ __gitcomp "branches head" "" \
+ "${cur##--update-refs=}"
+ return
+ ;;
--*)
__gitcomp_builtin "history_$subcommand"
return
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index 851be383e1..b225dd3800 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -3131,7 +3131,10 @@ test_expect_success 'git history subcommand options' '
test_completion "git history fixup --empty=ke" "keep " &&
test_completion "git history fixup --empty=drop" "drop " &&
test_completion "git history drop --empty=ab" "abort " &&
- test_completion "git history reword --empty=ke" ""
+ test_completion "git history reword --empty=ke" "" &&
+ test_completion "git history fixup --update-refs=branch" "branches " &&
+ test_completion "git history split --update-refs=he" "head " &&
+ test_completion "git history reword main -- --update-refs=he" ""
'
test_expect_success 'git history revisions' '
--
2.54.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 4/4] completion: complete 'git history split' pathspecs
2026-08-13 19:05 ` [PATCH v3 0/4] completion: add support for 'git history' Vincent Mailhol
` (2 preceding siblings ...)
2026-08-13 19:05 ` [PATCH v3 3/4] completion: complete 'git history --update-refs' values Vincent Mailhol
@ 2026-08-13 19:05 ` Vincent Mailhol
2026-08-13 20:30 ` [PATCH v3 0/4] completion: add support for 'git history' Kristoffer Haugsbakk
4 siblings, 0 replies; 12+ messages in thread
From: Vincent Mailhol @ 2026-08-13 19:05 UTC (permalink / raw)
To: git
Cc: Junio C Hamano, Philippe Blain, Patrick Steinhardt, Ben Knoble,
Vincent Mailhol
Arguments following the required revision of "git history split" are
pathspecs. Complete them from tracked paths, including after an explicit
"--".
Signed-off-by: Vincent Mailhol <mailhol@kernel.org>
---
Changes in v3:
- No changes.
Changes in v2:
- New patch.
---
contrib/completion/git-completion.bash | 6 ++++++
t/t9902-completion.sh | 13 +++++++++++++
2 files changed, 19 insertions(+)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 19600940dc..6172b6182f 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -2194,6 +2194,12 @@ _git_history ()
__git_complete_refs
return
fi
+
+ case "$subcommand" in
+ split)
+ __git_complete_index_file "--cached"
+ ;;
+ esac
}
_git_init ()
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index b225dd3800..194bca8d6c 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -3144,6 +3144,19 @@ test_expect_success 'git history revisions' '
test_completion "git history reword main m" ""
'
+test_expect_success 'git history split pathspecs' '
+ test_completion "git history split main -- --update-refs=h" "" &&
+ test_completion "git history split main -- --update-refs h" "" &&
+ test_completion "git history split --dry-run main file" <<-\EOF &&
+ file1Z
+ file2Z
+ EOF
+ test_completion "git history split main -- file" <<-\EOF
+ file1Z
+ file2Z
+ EOF
+'
+
test_expect_success 'git reflog show' '
test_when_finished "git checkout - && git branch -d shown" &&
git checkout -b shown &&
--
2.54.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v3 0/4] completion: add support for 'git history'
2026-08-13 19:05 ` [PATCH v3 0/4] completion: add support for 'git history' Vincent Mailhol
` (3 preceding siblings ...)
2026-08-13 19:05 ` [PATCH v3 4/4] completion: complete 'git history split' pathspecs Vincent Mailhol
@ 2026-08-13 20:30 ` Kristoffer Haugsbakk
4 siblings, 0 replies; 12+ messages in thread
From: Kristoffer Haugsbakk @ 2026-08-13 20:30 UTC (permalink / raw)
To: Vincent Mailhol, git
Cc: Junio C Hamano, Philippe Blain, Patrick Steinhardt, D. Ben Knoble
On Thu, Aug 13, 2026, at 21:05, Vincent Mailhol wrote:
> 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
>
> options. Finally, Patch #4 adds completion for pathspecs accepted by
> "split".
It looks like one line was accidentally deleted/blanked. But I think
it would say the same thing as on v2:
---
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".
---
Was the paragraph reflowed with
"#3" at the start and treated like
a comment line?
>
>[snip]
sent from mobile
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2026-08-13 20:31 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-04 19:56 [PATCH] completion: add 'git history' subcommands Vincent Mailhol
2026-08-05 6:19 ` Patrick Steinhardt
2026-08-05 11:56 ` D. Ben Knoble
2026-08-05 16:15 ` Junio C Hamano
2026-08-05 21:20 ` Vincent Mailhol
2026-08-06 5:18 ` Patrick Steinhardt
2026-08-13 19:05 ` [PATCH v3 0/4] completion: add support for 'git history' Vincent Mailhol
2026-08-13 19:05 ` [PATCH v3 1/4] completion: add 'git history' subcommands Vincent Mailhol
2026-08-13 19:05 ` [PATCH v3 2/4] completion: complete 'git history --empty' values Vincent Mailhol
2026-08-13 19:05 ` [PATCH v3 3/4] completion: complete 'git history --update-refs' values Vincent Mailhol
2026-08-13 19:05 ` [PATCH v3 4/4] completion: complete 'git history split' pathspecs Vincent Mailhol
2026-08-13 20:30 ` [PATCH v3 0/4] completion: add support for 'git history' Kristoffer Haugsbakk
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox