git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Rubén Justo" <rjusto@gmail.com>
To: Git List <git@vger.kernel.org>
Cc: Junio C Hamano <gitster@pobox.com>
Subject: [PATCH v2 1/5] completion: reflog with implicit "show"
Date: Sat, 2 Mar 2024 15:37:34 +0100	[thread overview]
Message-ID: <ae0e2eaa-b7b9-4d95-8b73-c6be762341ef@gmail.com> (raw)
In-Reply-To: <ea6c8890-9ff3-46c9-b933-6a52083b1001@gmail.com>

When no subcommand is specified to "reflog", we assume "show" [1]:

    $ git reflog -h
    usage: git reflog [show] [<log-options>] [<ref>]
    ...

This implicit "show" is not being completed correctly:

    $ git checkout -b default
    $ git reflog def<TAB><TAB>
    ... no completion options ...

The expected result is:

    $ git reflog default

This happens because we're completing references after seeing a valid
subcommand in the command line.  This prevents the implicit "show" from
working properly, but also introduces a new problem: it keeps offering
subcommand options when the subcommand is implicit:

    $ git checkout -b explore
    $ git reflog default ex<TAB>
    ...
    $ git reflog default expire

The expected result is:

    $ git reflog default explore

To fix this, complete references even if no subcommand is present, or in
other words when the subcommand is implicit "show".

Also, only include completion options for subcommands when completing
the right position in the command line.

  1. cf39f54efc (git reflog show, 2007-02-08)

Signed-off-by: Rubén Justo <rjusto@gmail.com>
---
 contrib/completion/git-completion.bash |  9 ++++-----
 t/t9902-completion.sh                  | 11 +++++++++++
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 8c40ade494..ff216f1c65 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -2407,12 +2407,11 @@ _git_rebase ()
 _git_reflog ()
 {
 	local subcommands="show delete expire"
-	local subcommand="$(__git_find_on_cmdline "$subcommands")"
 
-	if [ -z "$subcommand" ]; then
-		__gitcomp "$subcommands"
-	else
-		__git_complete_refs
+	__git_complete_refs
+
+	if [ $((cword - __git_cmd_idx)) -eq 1 ]; then
+		__gitcompappend "$subcommands" "" "$cur" " "
 	fi
 }
 
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index aa9a614de3..dbd57e6a28 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -2618,6 +2618,17 @@ test_expect_success 'git clone --config= - value' '
 	EOF
 '
 
+test_expect_success 'git reflog show' '
+	test_when_finished "git checkout - && git branch -d shown" &&
+	git checkout -b shown &&
+	test_completion "git reflog sho" <<-\EOF &&
+	show Z
+	shown Z
+	EOF
+	test_completion "git reflog show sho" "shown " &&
+	test_completion "git reflog shown sho" "shown "
+'
+
 test_expect_success 'options with value' '
 	test_completion "git merge -X diff-algorithm=" <<-\EOF
 
-- 
2.44.0


  reply	other threads:[~2024-03-02 14:37 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-26 12:46 [PATCH 0/4] completion for git-reflog show Rubén Justo
2024-01-26 12:51 ` [PATCH 1/4] completion: introduce __gitcomp_subcommand Rubén Justo
2024-01-26 17:26   ` Junio C Hamano
2024-01-26 20:09     ` Rubén Justo
2024-01-26 20:34       ` Junio C Hamano
2024-01-26 12:51 ` [PATCH 2/4] completion: introduce __git_find_subcommand Rubén Justo
2024-01-26 17:30   ` Junio C Hamano
2024-01-27 13:20     ` Rubén Justo
2024-01-26 12:53 ` [PATCH 3/4] completion: reflog with implicit "show" Rubén Justo
2024-01-26 17:57   ` Junio C Hamano
2024-01-26 20:20     ` Rubén Justo
2024-02-21  1:46       ` Junio C Hamano
2024-02-21 18:06         ` Rubén Justo
2024-02-29 19:00           ` Rubén Justo
2024-02-29 19:22             ` Junio C Hamano
2024-01-26 12:53 ` [PATCH 4/4] completion: reflog show <log-options> Rubén Justo
2024-03-02 14:30 ` [PATCH v2 0/5] completion for git-reflog show Rubén Justo
2024-03-02 14:37   ` Rubén Justo [this message]
2024-03-02 15:50   ` [PATCH v2 3/5] completion: reflog show <log-options> Rubén Justo
2024-03-02 15:51   ` [PATCH v2 2/5] completion: introduce __git_find_subcommand Rubén Justo
2024-03-02 15:52   ` [PATCH v2 4/5] completion: factor out __git_resolve_builtins Rubén Justo
2024-03-02 15:52   ` [PATCH v2 5/5] completion: reflog subcommands and options Rubén Justo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ae0e2eaa-b7b9-4d95-8b73-c6be762341ef@gmail.com \
    --to=rjusto@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).