All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: "D. Ben Knoble" <ben.knoble@gmail.com>
Cc: Hardik Kumar <hardikxk@gmail.com>,  git@vger.kernel.org
Subject: Re: [PATCH] builtin: replace the_repository parameter in is_bare_repository()
Date: Fri, 28 Aug 2026 15:51:00 -0700	[thread overview]
Message-ID: <xmqqh5kd3lm3.fsf@gitster.g> (raw)
In-Reply-To: <CALnO6CCsJGmgmvKyMdX3q1Kr5AnBwYJ=_UiQ9+m7jWe7hv=3Qw@mail.gmail.com> (D. Ben Knoble's message of "Fri, 28 Aug 2026 07:41:39 -0400")

"D. Ben Knoble" <ben.knoble@gmail.com> writes:

>> > Hm. What if a program wants to do « exactly what ‘git switch’ does
>> > » sans shelling out?
>>
>> Instead of cheating, properly factor out reusable part from
>> cmd_checkout() into a set of libified routines, and make both
>> cmd_checkout() and cmd_switch() to call them
>>
>> An approach like that would help "libify" things.  libifying is not
>> just reducing dependence of globals.
>>
>> Calling main() from something else is not a libification.
>
> Sensible. Thanks!

I actually answered a wrong question though ;-) 

The way cmd_switch() and cmd_restore() were introduced by sharing
what used to serve cmd_checkout() was serviceable, but ugly.  Had we
started from separate implementations for 'switch' and 'restore'
that were later merged into 'checkout', we would not have ended up
with a design centered on a single monolithic choke point like
checkout_main().

That is what I meant by "cheating instead of refactoring reusable
parts".  However, that is not directly relevant to your example.

It is an anti-pattern to call the top-level implementation of 'git
foo' in cmd_foo() directly from cmd_bar(), since these cmd_foo()
functions are like main() in ordinary programs, performing one-time
initialization (such as git_config() calls) and finalization that
cannot be repeated.  To help our codebase, as well as the use case
you imagined in your message, it would help to trim down these
non-reusable cmd_foo() implementations by turning them into mere
orchestrators that call refactored helper functions.  Such a change
would put cmd_foo() and a client that wants to reuse 'git switch'
functionality on the same footing, allowing more of our code to be
used in different contexts.  I think that is what people mean by
the "libification" effort.

  reply	other threads:[~2026-08-28 22:51 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-27 18:29 [PATCH] builtin: replace the_repository parameter in is_bare_repository() Hardik Kumar
2026-08-27 19:09 ` Junio C Hamano
2026-08-27 19:51   ` Junio C Hamano
2026-08-27 20:09     ` Hardik Kumar
2026-08-27 20:28       ` Junio C Hamano
2026-08-27 21:12         ` Ben Knoble
2026-08-27 21:39           ` Junio C Hamano
2026-08-28 11:41             ` D. Ben Knoble
2026-08-28 22:51               ` Junio C Hamano [this message]
2026-08-28 22:51                 ` [PATCH 0/8] More sensible checkout/switch/restore code refactoring Junio C Hamano
2026-08-28 22:51                   ` [PATCH 1/8] checkout: pass cb_option explicitly to branch name parsers Junio C Hamano
2026-08-28 22:52                   ` [PATCH 2/8] checkout: validate new branch name in checkout_branch() Junio C Hamano
2026-08-28 22:52                   ` [PATCH 3/8] checkout: validate stage and merge option compatibility in checkout_paths() Junio C Hamano
2026-08-28 22:52                   ` [PATCH 4/8] checkout: extract option validation and pathspec helpers Junio C Hamano
2026-08-28 22:52                   ` [PATCH 5/8] checkout: extract branch setup and tracking helpers Junio C Hamano
2026-08-28 22:52                   ` [PATCH 6/8] checkout: restructure switch, restore, and checkout entrypoints Junio C Hamano
2026-08-28 22:52                   ` [PATCH 7/8] checkout: wrap overly long lines Junio C Hamano
2026-08-28 22:55                     ` Junio C Hamano
2026-08-29  2:06                       ` Junio C Hamano
2026-08-28 22:52                   ` [PATCH 8/8] checkout: move post_checkout_hook() to checkout.c Junio C Hamano
2026-08-28 22:57                     ` Junio C Hamano
2026-08-29  2:05                       ` Junio C Hamano
2026-08-29 13:24                 ` [PATCH] builtin: replace the_repository parameter in is_bare_repository() D. Ben Knoble
2026-08-27 21:35         ` [PATCH] do not pass "repo" to builtin commmand implementations Junio C Hamano
2026-08-28  9:05           ` Hardik Kumar
2026-08-28 20:59             ` Junio C Hamano
2026-08-28  4:01         ` [PATCH] builtin: replace the_repository parameter in is_bare_repository() Hardik Kumar
2026-08-27 19:56   ` Hardik Kumar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=xmqqh5kd3lm3.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=ben.knoble@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=hardikxk@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.