From: Junio C Hamano <gitster@pobox.com>
To: "Hardik Kumar" <hardikxk@gmail.com>
Cc: <git@vger.kernel.org>
Subject: Re: [PATCH] do not pass "repo" to builtin commmand implementations
Date: Fri, 28 Aug 2026 13:59:55 -0700 [thread overview]
Message-ID: <xmqq5x0u3qr8.fsf@gitster.g> (raw)
In-Reply-To: <DL0GH05O36T1.1J4TSL2PU73TO@gmail.com> (Hardik Kumar's message of "Fri, 28 Aug 2026 14:35:47 +0530")
"Hardik Kumar" <hardikxk@gmail.com> writes:
> This would certainly help make it more obvious as not use the pointer
> parameter. But would you not consider to eventually move towards
> something more efiicient in the future?
It is unclear what kind of more efficient alternative you have in
mind.
The primary motivation for this change is to make the implementation
of built-in commands less error-prone and harder to abuse. The
implementation of 'git foo' in cmd_foo() in builtin/foo.c performs
one-time initialization (such as calling git_config()) and
finalization that cannot be repeated, making it an anti-pattern to
call cmd_foo() from within cmd_bar(). Refraining from pretending
these functions can operate on an arbitrary caller-supplied
repository instance is one step toward preventing such misuse.
However, another motivation for this change is to encourage
developers who want to aid the libification effort to refactor code
out of cmd_foo() into reusable helper functions. Instead of keeping
those helpers within builtin/foo.c, they can be moved to library
files outside the builtin/ directory and take a pointer to 'struct
repository'.
The top-level cmd_foo() can still access 'the_repository' directly
and orchestrate the execution of 'git foo' by passing a pointer to
these helper functions. That way, more code becomes reusable.
next prev parent reply other threads:[~2026-08-28 20:59 UTC|newest]
Thread overview: 47+ 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
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-30 20:48 ` [PATCH v2 0/8] More sensible checkout/switch/restore code refactoring Junio C Hamano
2026-08-30 20:48 ` [PATCH v2 1/8] checkout: pass cb_option explicitly to branch name parsers Junio C Hamano
2026-09-01 11:31 ` Karthik Nayak
2026-08-30 20:48 ` [PATCH v2 2/8] checkout: validate new branch name in checkout_branch() Junio C Hamano
2026-09-01 11:36 ` Karthik Nayak
2026-08-30 20:48 ` [PATCH v2 3/8] checkout: validate stage and merge option compatibility in checkout_paths() Junio C Hamano
2026-09-01 11:53 ` Karthik Nayak
2026-09-01 17:47 ` Junio C Hamano
2026-09-02 11:20 ` Karthik Nayak
2026-09-02 22:40 ` Junio C Hamano
2026-09-03 9:21 ` Karthik Nayak
2026-08-30 20:48 ` [PATCH v2 4/8] checkout: extract option validation and pathspec helpers Junio C Hamano
2026-08-30 20:48 ` [PATCH v2 5/8] checkout: extract branch setup and tracking helpers Junio C Hamano
2026-08-30 20:48 ` [PATCH v2 6/8] checkout: restructure switch, restore, and checkout entrypoints Junio C Hamano
2026-09-01 14:14 ` Karthik Nayak
2026-09-01 23:25 ` Junio C Hamano
2026-09-02 11:02 ` Karthik Nayak
2026-08-30 20:48 ` [PATCH v2 7/8] checkout: wrap overly long lines Junio C Hamano
2026-08-30 20:48 ` [PATCH v2 8/8] checkout: move post_checkout_hook() to checkout.c 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 [this message]
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=xmqq5x0u3qr8.fsf@gitster.g \
--to=gitster@pobox.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox