* git git<tab> completes non-existent command `git gitk` @ 2020-05-23 22:25 Anthony Sottile 2020-05-24 21:38 ` Matheus Tavares 0 siblings, 1 reply; 4+ messages in thread From: Anthony Sottile @ 2020-05-23 22:25 UTC (permalink / raw) To: Git Mailing List easiest to reproduce is with docker ```dockerfile FROM ubuntu:focal RUN : \ && apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ bash-completion \ git \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* ``` ```console $ docker run --rm -ti test bash root@23e691ecc7ba:/# [ -f /etc/bash_completion ] && . /etc/bash_completion root@23e691ecc7ba:/# git gitk ``` (I typed git git<tab>) ```console $ git gitk git: 'gitk' is not a git command. See 'git --help'. ``` this is a bit annoying because I have some aliases/commands for git-github-* the git version I have is 2.25.1: ```console $ git --version git version 2.25.1 ``` Anthony ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: git git<tab> completes non-existent command `git gitk` 2020-05-23 22:25 git git<tab> completes non-existent command `git gitk` Anthony Sottile @ 2020-05-24 21:38 ` Matheus Tavares 2020-05-25 0:27 ` Junio C Hamano 0 siblings, 1 reply; 4+ messages in thread From: Matheus Tavares @ 2020-05-24 21:38 UTC (permalink / raw) To: asottile; +Cc: git Hi, Anthony On Sat, May 23, 2020 at 7:25 PM Anthony Sottile <asottile@umich.edu> wrote: > > easiest to reproduce is with docker > > ```dockerfile > FROM ubuntu:focal > RUN : \ > && apt-get update \ > && DEBIAN_FRONTEND=noninteractive apt-get install -y > --no-install-recommends \ > bash-completion \ > git \ > && apt-get clean \ > && rm -rf /var/lib/apt/lists/* > ``` > > ```console > $ docker run --rm -ti test bash > root@23e691ecc7ba:/# [ -f /etc/bash_completion ] && . /etc/bash_completion > root@23e691ecc7ba:/# git gitk > ``` > > (I typed git git<tab>) > > ```console > $ git gitk > git: 'gitk' is not a git command. See 'git --help'. > ``` > this is a bit annoying because I have some aliases/commands for git-github-* > > the git version I have is 2.25.1: Thanks for the report. This is also reproducible in Git 2.27.0-rc1. To complete subcommands, git-completion.bash uses[1] the output of: git --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config And the list returned by the line above contains "gitk", because this command is in the "mainporcelain" category (in command-list.txt). One possible solution to the invalid completion you mentioned, without having to re-categorize "gitk", is to explicitly exclude it in git-completion.bash: diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index b1d6e5ebed..f07394584f 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -3214,7 +3214,10 @@ __git_main () then __gitcomp "$GIT_TESTING_PORCELAIN_COMMAND_LIST" else - __gitcomp "$(__git --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config)" + local cmds="$(__git --list-cmds=list-mainporcelain,others,nohelpers,list-complete,config | \ + sed -e '/^gitk$/d')" + local aliases="$(__git --list-cmds=alias,config)" + __gitcomp "$cmds $aliases" fi ;; esac (I had to split the list into "cmds" and "aliases" so that we could still give completion for a valid "git gitk" alias, if present.) This should solve the problem, althought it's admittedly not very elegant... Nevertheless, I'd be happy to send a complete patch if folks are happy with the workaround. In the meantime, you could use: git config completion.commands -gitk To locally remove the completion for "gitk". Thanks, Matheus [1]: See contrib/completion/git-completion.bash +3218 (https://github.com/git/git/blob/master/contrib/completion/git-completion.bash#L3218) ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: git git<tab> completes non-existent command `git gitk` 2020-05-24 21:38 ` Matheus Tavares @ 2020-05-25 0:27 ` Junio C Hamano 2020-05-25 1:53 ` Matheus Tavares Bernardino 0 siblings, 1 reply; 4+ messages in thread From: Junio C Hamano @ 2020-05-25 0:27 UTC (permalink / raw) To: Matheus Tavares; +Cc: asottile, git Matheus Tavares <matheus.bernardino@usp.br> writes: > This should solve the problem, althought it's admittedly not very elegant... > Nevertheless, I'd be happy to send a complete patch if folks are happy with the > workaround. Please don't. > In the meantime, you could use: > > git config completion.commands -gitk > > To locally remove the completion for "gitk". I think an equivalent of this in-core would be the way to go. I wonder if there are any commands other than gitk that cannot be invoked as a subcommand of "git" potty. t/t9902-completion.sh would be a good place to test this. ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: git git<tab> completes non-existent command `git gitk` 2020-05-25 0:27 ` Junio C Hamano @ 2020-05-25 1:53 ` Matheus Tavares Bernardino 0 siblings, 0 replies; 4+ messages in thread From: Matheus Tavares Bernardino @ 2020-05-25 1:53 UTC (permalink / raw) To: Junio C Hamano; +Cc: Anthony Sottile, git On Sun, May 24, 2020 at 9:27 PM Junio C Hamano <gitster@pobox.com> wrote: > > Matheus Tavares <matheus.bernardino@usp.br> writes: > > > In the meantime, you could use: > > > > git config completion.commands -gitk > > > > To locally remove the completion for "gitk". > > I think an equivalent of this in-core would be the way to go. I'm not sure I understand the idea, but would that be something along these lines? Adding a "nocomplete" category in commands-list.txt, to do the opposite of the "complete" we already have[1]. Then adding a new group name to "--list-cmds" (such as "--list-cmds=completeonly"), which would include the commands that are in "complete" and exclude those in "nocomplete"? We then might be able to complete subcommands with the output of: git --list-cmds=list-mainporcelain,others,nohelpers,alias,completeonly,config [1]: "nocomplete" would only be relevant in conjunction with "list-mainporcelain", as the commands in the latter (as gitk) are currently completed by default (even without "complete"). > I wonder if there are any commands other than gitk that cannot be > invoked as a subcommand of "git" potty. In the list suggested by git-completion, I think gitk is the only one (if I haven't missed any). ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-05-25 1:54 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-05-23 22:25 git git<tab> completes non-existent command `git gitk` Anthony Sottile 2020-05-24 21:38 ` Matheus Tavares 2020-05-25 0:27 ` Junio C Hamano 2020-05-25 1:53 ` Matheus Tavares Bernardino
Code repositories for project(s) associated with this public inbox https://80x24.org/mirrors/git.git 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 read-only IMAP folder(s) and NNTP newsgroup(s).