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

[PATCH v2 0/9] refactor completion for switch and checkout

From
Jacob Keller <jacob.e.keller@intel.com>
Date
May 27, 2020, 11:38 UTC
Message-ID
<20200527113831.3294409-1-jacob.e.keller@intel.com>
From: Jacob Keller <jacob.keller@gmail.com>

completion support for git switch is subpar for a number of cases. Most notable is difference in behavior between these two completions:

  $git switch <TAB>
  Display all 784 possibilities? (y or n)
  <list of all references and DWIM remotes>
  $git switch --track<TAB>
  jk-refactor-git-switch-completion master`

If --track is provided, tab completion becomes almost useless, because we would expect to complete remote references, but instead can only complete local branches!

This series was motivated by a desire to fix the completion for the above two cases, but I noticed several other issues on the way, including some issues understanding what the current logic did.

This series aims to improve the completion support, and comes with many additional test cases that cover the new behavior implemented in the various patches.

This is a rework of a previous series posted, available at the following URL: https://lore.kernel.org/git/20200425022045.1089291-1-jacob.e.keller@intel.com/

Note that although I've marked this as a v2, I did not find the range-diff to be satisfying or useful and have not included it. Besides not being very useful, not many folks seem to have reviewed the original anyways.

The most notable change in behavior since v1 is how we handle the -c/-C options. It makes sense to complete the argument of -c differently than how we handle the start-point after we already have a completed branch name. The exact requirements of *how* we complete branch names is easily modified if anyone has a better suggestion.

Finally, I also applied many of the same improvements to checkout where appropriate, and have included many more additional tests for both git switch and git checkout.

Jacob Keller (9):
  completion: replace overloaded track term for __git_complete_refs
  completion: improve handling of DWIM mode for switch/checkout
  completion: extract function __git_dwim_remote_heads
  completion: perform DWIM logic directly in __git_complete_refs
  completion: improve completion for git switch with no options
  completion: improve handling of --detach in checkout
  completion: improve handling of --track in switch/checkout
  completion: improve handling of -c/-C and -b/-B in switch/checkout
  completion: improve handling of --orphan option of switch/checkout
 contrib/completion/git-completion.bash | 252 +++++++++++---
 t/t9902-completion.sh                  | 455 +++++++++++++++++++++++++
 2 files changed, 668 insertions(+), 39 deletions(-)
-- 
2.25.2
Next: Jacob Keller
Message 1 of 13 in “refactor completion for switch and checkout”
  1. 0/9 refactor completion for switch and checkoutJacob Keller, May 27, 2020
  2. 4/9 completion: perform DWIM logic directly in __git_complete_refsJacob Keller, May 27, 2020
  3. 9/9 completion: improve handling of --orphan option of switch/checkoutJacob Keller, May 27, 2020
  4. 8/9 completion: improve handling of -c/-C and -b/-B in switch/checkoutJacob Keller, May 27, 2020
  5. 3/9 completion: extract function __git_dwim_remote_headsJacob Keller, May 27, 2020
  6. 6/9 completion: improve handling of --detach in checkoutJacob Keller, May 27, 2020
  7. 2/9 completion: improve handling of DWIM mode for switch/checkoutJacob Keller, May 27, 2020
  8. Junio C HamanoMay 27, 2020
  9. Jacob KellerMay 27, 2020
  10. Jacob KellerMay 28, 2020
  11. 1/9 completion: replace overloaded track term for __git_complete_refsJacob Keller, May 27, 2020
  12. 5/9 completion: improve completion for git switch with no optionsJacob Keller, May 27, 2020
  13. 7/9 completion: improve handling of --track in switch/checkoutJacob Keller, May 27, 2020

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.