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

Re: [PATCH v2 6/8] checkout: restructure switch, restore, and checkout entrypoints

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 1, 2026, 23:25 UTC
Message-ID
<xmqqik4olfk3.fsf@gitster.g>
In-Reply-To
<CAOLa=ZTHGAfRZJKjrB=u-AxiUWgL2p_5HijdfJmCN_wJCE8BqA@mail.gmail.com>
Karthik Nayak <karthik.188@gmail.com> writes:
Show 38 quoted lines
> Junio C Hamano <gitster@pobox.com> writes:
>
>> cmd_switch(), cmd_restore(), and cmd_checkout() pass their options
>> to checkout_main(), which parses options and configuration,
>> validates and dispatches to checkout_branch() or checkout_paths().
>>
>> Now that option initialization, validation, and branch setup have been
>> split into dedicated helper functions, restructure cmd_switch(),
>> cmd_restore(), and cmd_checkout() to invoke these helpers directly and
>> dispatch to checkout_branch() or checkout_paths().
>>
>> In cmd_restore(), handle the --staged default from_treeish = "HEAD" and
>> resolve opts.from_treeish into new_branch_info and opts.source_tree.
>>
>> This allows us to remove checkout_main() and enum checkout_command
>> as they are no longer needed.
>>
>> Signed-off-by: Junio C Hamano <gitster@pobox.com>
>> ---
>>  builtin/checkout.c | 297 +++++++++++++++++++++++----------------------
>>  1 file changed, 149 insertions(+), 148 deletions(-)
>>
>> diff --git a/builtin/checkout.c b/builtin/checkout.c
>> index 2edaca5539..b18515ac7f 100644
>> --- a/builtin/checkout.c
>> +++ b/builtin/checkout.c
>> @@ -1341,12 +1341,6 @@ static void setup_new_branch_info_and_source_tree(
>>  }
>>
>>
>> -enum checkout_command {
>> -	CHECKOUT_CHECKOUT = 1,
>> -	CHECKOUT_SWITCH = 2,
>> -	CHECKOUT_RESTORE = 3,
>> -};
>> -
>
> Okay so this is how the first commit fits in. Now it makes sense.

Yes. The point of the series was to get rid of the monolithic checkout_main() that everybody goes through. And the enum is primarily for that monolith to decide which code path the original request is about.

In the step that gets rid of the monolith, the enum no longer becomes needed, even though an error message with advice to tell which options are mutually incompatible may need to know the exact name of the option. That makes [1/8] more reasonable than passing enums around.

Previous: Karthik NayakNext: Karthik Nayak
Message 38 of 47 in “builtin: replace the_repository parameter in is_bare_repository()”
  1. builtin: replace the_repository parameter in is_bare_repository()Hardik Kumar, Aug 27, 2026
  2. Junio C HamanoAug 27, 2026
  3. Junio C HamanoAug 27, 2026
  4. Hardik KumarAug 27, 2026
  5. Junio C HamanoAug 27, 2026
  6. Ben KnobleAug 27, 2026
  7. Junio C HamanoAug 27, 2026
  8. D. Ben KnobleAug 28, 2026
  9. Junio C HamanoAug 28, 2026
  10. 0/8 More sensible checkout/switch/restore code refactoringJunio C Hamano, Aug 28, 2026
  11. 1/8 checkout: pass cb_option explicitly to branch name parsersJunio C Hamano, Aug 28, 2026
  12. 2/8 checkout: validate new branch name in checkout_branch()Junio C Hamano, Aug 28, 2026
  13. 3/8 checkout: validate stage and merge option compatibility in checkout_paths()Junio C Hamano, Aug 28, 2026
  14. 4/8 checkout: extract option validation and pathspec helpersJunio C Hamano, Aug 28, 2026
  15. 5/8 checkout: extract branch setup and tracking helpersJunio C Hamano, Aug 28, 2026
  16. 6/8 checkout: restructure switch, restore, and checkout entrypointsJunio C Hamano, Aug 28, 2026
  17. 7/8 checkout: wrap overly long linesJunio C Hamano, Aug 28, 2026
  18. Junio C HamanoAug 28, 2026
  19. Junio C HamanoAug 29, 2026
  20. 8/8 checkout: move post_checkout_hook() to checkout.cJunio C Hamano, Aug 28, 2026
  21. Junio C HamanoAug 28, 2026
  22. Junio C HamanoAug 29, 2026
  23. 0/8 More sensible checkout/switch/restore code refactoringJunio C Hamano, Aug 30, 2026
  24. 1/8 checkout: pass cb_option explicitly to branch name parsersJunio C Hamano, Aug 30, 2026
  25. Karthik NayakSep 1, 2026
  26. 2/8 checkout: validate new branch name in checkout_branch()Junio C Hamano, Aug 30, 2026
  27. Karthik NayakSep 1, 2026
  28. 3/8 checkout: validate stage and merge option compatibility in checkout_paths()Junio C Hamano, Aug 30, 2026
  29. Karthik NayakSep 1, 2026
  30. Junio C HamanoSep 1, 2026
  31. Karthik NayakSep 2, 2026
  32. Junio C HamanoSep 2, 2026
  33. Karthik NayakSep 3, 2026
  34. 4/8 checkout: extract option validation and pathspec helpersJunio C Hamano, Aug 30, 2026
  35. 5/8 checkout: extract branch setup and tracking helpersJunio C Hamano, Aug 30, 2026
  36. 6/8 checkout: restructure switch, restore, and checkout entrypointsJunio C Hamano, Aug 30, 2026
  37. Karthik NayakSep 1, 2026
  38. Junio C HamanoSep 1, 2026
  39. Karthik NayakSep 2, 2026
  40. 7/8 checkout: wrap overly long linesJunio C Hamano, Aug 30, 2026
  41. 8/8 checkout: move post_checkout_hook() to checkout.cJunio C Hamano, Aug 30, 2026
  42. D. Ben KnobleAug 29, 2026
  43. do not pass "repo" to builtin commmand implementationsJunio C Hamano, Aug 27, 2026
  44. Hardik KumarAug 28, 2026
  45. Junio C HamanoAug 28, 2026
  46. Hardik KumarAug 28, 2026
  47. Hardik KumarAug 27, 2026

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.