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

[BUG] completion.commands does not remove multiple commands

From
Todd Zullinger <tmz@pobox.com>
Date
Feb 28, 2019, 22:31 UTC
Message-ID
<20190228223123.GZ16125@zaya.teonanacatl.net>
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).

With luck this will be a clear and easily resolved issue in list_cmds_by_config() (in help.c).

Here's an example in test form:
-- 8< --
diff --git c/t/t9902-completion.sh w/t/t9902-completion.sh
index 3a2c6326d8..06cee36ae5 100755
--- c/t/t9902-completion.sh
+++ w/t/t9902-completion.sh
@@ -1483,6 +1483,14 @@ test_expect_success 'git --help completion' '
 	test_completion "git --help core" "core-tutorial "
 '
 
+test_expect_failure 'completion.commands removes multiple commands' '
+	test_config completion.commands "-cherry -mergetool" &&
+	git --list-cmds=list-mainporcelain,list-complete,config |
+		grep ^cherry >actual &&
+	echo cherry-pick >expected &&
+	test_cmp expected actual
+'
+
 test_expect_success 'setup for integration tests' '
 	echo content >file1 &&
 	echo more >file2 &&
-- 8< --

That's not quite normal form for t9902, but I was undable to
create a working test using the test_completion functions.
The tests set GIT_TESTING_PORCELAIN_COMMAND_LIST and
GIT_TESTING_ALL_COMMAND_LIST which override the settings in
the completion script.  I played a bit with adjusting those
to add cherry{,-pick} to the command lists, unsetting those
vars for the test, and such, to no avail.

In the end, I'm not really sure that calling --list-cmds
directly is such a bad way to go for testing this issue.
-- 
Todd
Next: Jeff King
Message 1 of 35 in “[BUG] completion.commands does not remove multiple commands”
  1. Todd ZullingerFeb 28, 2019
  2. Jeff KingFeb 28, 2019
  3. Todd ZullingerMar 1, 2019
  4. Jeff KingMar 1, 2019
  5. Todd ZullingerMar 1, 2019
  6. Jeff KingMar 1, 2019
  7. Duy NguyenMar 2, 2019
  8. Junio C HamanoMar 2, 2019
  9. Todd ZullingerMar 2, 2019
  10. SZEDER GáborMar 2, 2019
  11. Todd ZullingerMar 3, 2019
  12. Jeff KingMar 3, 2019
  13. 1/3 doc: note config file restrictions for completion.commandsTodd Zullinger, Mar 1, 2019
  14. Duy NguyenMar 17, 2019
  15. 1/4 git: read local config in --list-cmdsTodd Zullinger, Mar 17, 2019
  16. Duy NguyenMar 18, 2019
  17. 0/4 completion.commands: fix multiple command removalsTodd Zullinger, Mar 20, 2019
  18. Junio C HamanoMar 21, 2019
  19. Todd ZullingerMar 21, 2019
  20. Duy NguyenMar 21, 2019
  21. 1/4 git: read local config in --list-cmdsTodd Zullinger, Mar 20, 2019
  22. 2/4 t9902: test multiple removals via completion.commandsTodd Zullinger, Mar 20, 2019
  23. 3/4 completion: fix multiple command removalsTodd Zullinger, Mar 20, 2019
  24. 4/4 completion: use __git when calling --list-cmdsTodd Zullinger, Mar 20, 2019
  25. 0/4 completion.commands: fix multiple command removalsTodd Zullinger, Mar 17, 2019
  26. 2/4 t9902: test multiple removals via completion.commandsTodd Zullinger, Mar 17, 2019
  27. 3/4 completion: fix multiple command removalsTodd Zullinger, Mar 17, 2019
  28. 4/4 completion: use __git when calling --list-cmdsTodd Zullinger, Mar 17, 2019
  29. 2/3 t9902: test multiple removals via completion.commandsTodd Zullinger, Mar 1, 2019
  30. Eric SunshineMar 1, 2019
  31. SZEDER GáborMar 1, 2019
  32. Todd ZullingerMar 1, 2019
  33. 3/3 completion: fix multiple command removalsTodd Zullinger, Mar 1, 2019
  34. Jeff KingMar 1, 2019
  35. SZEDER GáborFeb 28, 2019

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.