Re: [BUG] completion.commands does not remove multiple commands
- From
Jeff King <peff@peff.net>
- Date
- Feb 28, 2019, 23:05 UTC
- Message-ID
- <20190228230506.GA20625@sigill.intra.peff.net>
- In-Reply-To
- <20190228223123.GZ16125@zaya.teonanacatl.net>
On Thu, Feb 28, 2019 at 05:31:23PM -0500, Todd Zullinger wrote:
Show 15 quoted lines
> Hi,
>
> I was playing with the completion.commands config added in
> 6532f3740b ("completion: allow to customize the completable
> command list", 2018-05-20) and noticed an issue removing
> multiple commands.
>
> I wanted to remove completion for cherry and mergetool, so I
> added them both to the config:
>
> git config completion.commands "-cherry -mergetool"
>
> But git still completes cherry in this case, only removing
> mergetool. Swapping the items in the config yields the
> opposite result (cherry is removed and mergetool is not).I can reproduce your problem, though the test you included passes for me even with the current tip of master. I suspect this is the problem:
diff --git a/help.c b/help.c index 520c9080e8..026f881715 100644 --- a/help.c +++ b/help.c @@ -393,8 +393,8 @@ void list_cmds_by_config(struct string_list *list) const char *p = strchrnul(cmd_list, ' '); strbuf_add(&sb, cmd_list, p - cmd_list); - if (*cmd_list == '-') - string_list_remove(list, cmd_list + 1, 0); + if (sb.buf[0] == '-') + string_list_remove(list, sb.buf + 1, 0); else string_list_insert(list, sb.buf); strbuf_release(&sb); though I can't help but wonder if the whole thing would be simpler using string_list_split(). -Peff