git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 1/5] completion: reflog with implicit "show"

From
Rubén Justo <rjusto@gmail.com>
Date
Mar 2, 2024, 14:37 UTC
Message-ID
<ae0e2eaa-b7b9-4d95-8b73-c6be762341ef@gmail.com>
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
Previous: Rubén JustoNext: Rubén Justo
Message 18 of 22 in “completion for git-reflog show”
  1. 0/4 completion for git-reflog showRubén Justo, Jan 26, 2024
  2. 1/4 completion: introduce __gitcomp_subcommandRubén Justo, Jan 26, 2024
  3. Junio C HamanoJan 26, 2024
  4. Rubén JustoJan 26, 2024
  5. Junio C HamanoJan 26, 2024
  6. 2/4 completion: introduce __git_find_subcommandRubén Justo, Jan 26, 2024
  7. Junio C HamanoJan 26, 2024
  8. Rubén JustoJan 27, 2024
  9. 3/4 completion: reflog with implicit "show"Rubén Justo, Jan 26, 2024
  10. Junio C HamanoJan 26, 2024
  11. Rubén JustoJan 26, 2024
  12. Junio C HamanoFeb 21, 2024
  13. Rubén JustoFeb 21, 2024
  14. Rubén JustoFeb 29, 2024
  15. Junio C HamanoFeb 29, 2024
  16. 4/4 completion: reflog show <log-options>Rubén Justo, Jan 26, 2024
  17. 0/5 completion for git-reflog showRubén Justo, Mar 2, 2024
  18. 1/5 completion: reflog with implicit "show"Rubén Justo, Mar 2, 2024
  19. 3/5 completion: reflog show <log-options>Rubén Justo, Mar 2, 2024
  20. 2/5 completion: introduce __git_find_subcommandRubén Justo, Mar 2, 2024
  21. 4/5 completion: factor out __git_resolve_builtinsRubén Justo, Mar 2, 2024
  22. 5/5 completion: reflog subcommands and optionsRubén Justo, Mar 2, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.