git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Brandon Williams <bmwill@google.com>
To: Jonathan Nieder <jrnieder@gmail.com>
Cc: git@vger.kernel.org, peff@peff.net, gitster@pobox.com
Subject: Re: [PATCH 4/4] config: don't implicitly use gitdir
Date: Mon, 12 Jun 2017 18:23:37 -0700	[thread overview]
Message-ID: <20170613012337.GH154599@google.com> (raw)
In-Reply-To: <20170613010518.GB133952@aiede.mtv.corp.google.com>

On 06/12, Jonathan Nieder wrote:
> Hi,
> 
> Brandon Williams wrote:
> 
> > Commit 2185fde56 (config: handle conditional include when $GIT_DIR is
> > not set up) added a 'git_dir' field to the config_options struct.  Let's
> > use this option field explicitly all the time instead of occasionally
> > falling back to calling 'git_pathdup("config")' to get the path to the
> > local repository configuration.  This allows 'do_git_config_sequence()'
> > to not implicitly rely on global repository state.
> >
> > Signed-off-by: Brandon Williams <bmwill@google.com>
> > ---
> >  builtin/config.c | 2 ++
> >  config.c         | 6 ++----
> >  2 files changed, 4 insertions(+), 4 deletions(-)
> 
> Unlike the previous 3, this one makes me pause for a moment: it means
> that "gitdir:" includes and .git/config discovery would stop working
> if the caller does not remember to set git_dir in their
> config_options.
> 
> So we have to inspect callers.
> 
> Callers that set respect_includes = 1:
> 
> - read_early_config carefully sets git_dir *phew*
> - git_config_raw doesn't and is used approximately everywhere.
> 
> do_git_config_sequence call chain:
> - called by git_config_with_options, which is called by
>   - read_early_config
>   - git_config_raw
>   - various callers in builtin/config.c, using &config_options
> 
> > --- a/builtin/config.c
> > +++ b/builtin/config.c
> > @@ -539,6 +539,8 @@ int cmd_config(int argc, const char **argv, const char *prefix)
> >  		config_options.respect_includes = !given_config_source.file;
> >  	else
> >  		config_options.respect_includes = respect_includes_opt;
> > +	if (have_git_dir())
> > +		config_options.git_dir = get_git_common_dir();
> 
> nit: because of the context, this 'if' can be "if (!nongit)".

Will do.

> 
> [...]
> > --- a/config.c
> > +++ b/config.c
> > @@ -219,8 +219,6 @@ static int include_by_gitdir(const struct config_options *opts,
> >  
> >  	if (opts->git_dir)
> >  		git_dir = opts->git_dir;
> > -	else if (have_git_dir())
> > -		git_dir = get_git_dir();
> >  	else
> >  		goto done;
> 
> I wonder if this should have a sanity-check:
> 
> 	else if (have_git_dir())
> 		BUG("caller forgot to set opts->git_dir");
> 
> Alternatively, could this patch rename git_config_with_options?  That
> way any other patch in flight that calls git_config_with_options would
> conflict with this patch, giving us an opportunity to make sure it
> also sets git_dir.  As another nice side benefit it would make it easy
> for someone reading the patch to verify it didn't miss any callers.

That kind of defeats the purpose of the patch.  The point is to not rely
on global repository state and with the BUG statement we still are
relying on global state.

And I don't know if I agree with renaming a function just to rename it.

> 
> > @@ -1548,8 +1546,6 @@ static int do_git_config_sequence(const struct config_options *opts,
> >  
> >  	if (opts->git_dir)
> >  		repo_config = mkpathdup("%s/config", opts->git_dir);
> > -	else if (have_git_dir())
> > -		repo_config = git_pathdup("config");
> >  	else
> >  		repo_config = NULL;
> 
> Likewise: either this should get a sanity check
> 
> 	else if (have_git_dir())
> 		BUG("caller forgot to set opts->git_dir");
> 
> or the public interface git_config_with_options should be renamed.
> 
> > @@ -1613,6 +1609,8 @@ static void git_config_raw(config_fn_t fn, void *data)
> >  	struct config_options opts = {0};
> >  
> >  	opts.respect_includes = 1;
> > +	if (have_git_dir())
> > +		opts.git_dir = get_git_common_dir();
> 
> curious: Why get_git_common_dir() instead of get_git_dir()?

Needs to be commondir since the config is stored in the common git
directory and not a per worktree git directory.

-- 
Brandon Williams

  reply	other threads:[~2017-06-13  1:23 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-12 21:34 [PATCH 0/4] config.h Brandon Williams
2017-06-12 21:34 ` [PATCH 1/4] config: create config.h Brandon Williams
2017-06-12 21:34 ` [PATCH 2/4] config: remove git_config_iter Brandon Williams
2017-06-13  0:49   ` Jonathan Nieder
2017-06-13  0:57     ` Jeff King
2017-06-12 21:34 ` [PATCH 3/4] config: don't include config.h by default Brandon Williams
2017-06-12 21:34 ` [PATCH 4/4] config: don't implicitly use gitdir Brandon Williams
2017-06-13  1:05   ` Jonathan Nieder
2017-06-13  1:23     ` Brandon Williams [this message]
2017-06-13  1:33       ` Jonathan Nieder
2017-06-13  1:38       ` Jonathan Nieder
2017-06-13  2:59         ` Jeff King
2017-06-13  6:16           ` Brandon Williams
2017-06-13  6:45             ` Jeff King
2017-06-13  7:08             ` Jeff King
2017-06-13 14:43               ` Brandon Williams
2017-06-13 17:06           ` Jonathan Nieder
2017-06-13  5:52         ` Brandon Williams
2017-06-13  6:29           ` Jeff King
2017-06-13 14:47             ` Brandon Williams
2017-06-12 21:45 ` [PATCH 0/4] config.h Jeff King
2017-06-12 21:53   ` Brandon Williams
2017-06-12 22:02     ` Jeff King
2017-06-12 22:06       ` Brandon Williams
2017-06-13  1:07 ` Jonathan Nieder
2017-06-13 21:03 ` [PATCH v2 0/6] config.h Brandon Williams
2017-06-13 21:03   ` [PATCH v2 1/6] config: create config.h Brandon Williams
2017-06-13 21:13     ` Jonathan Nieder
2017-06-13 21:03   ` [PATCH v2 2/6] config: remove git_config_iter Brandon Williams
2017-06-13 21:14     ` Jonathan Nieder
2017-06-13 21:03   ` [PATCH v2 3/6] config: don't include config.h by default Brandon Williams
2017-06-13 21:58     ` Jonathan Nieder
2017-06-13 21:03   ` [PATCH v2 4/6] config: don't implicitly use gitdir Brandon Williams
2017-06-13 21:08     ` Jonathan Nieder
2017-06-13 21:38       ` Brandon Williams
2017-06-13 21:51         ` Jonathan Nieder
2017-06-13 21:55           ` Junio C Hamano
2017-06-13 22:05             ` Jonathan Nieder
2017-06-14  4:40               ` Jacob Keller
2017-06-14  6:25         ` Jeff King
2017-06-14 17:14           ` Brandon Williams
2017-06-13 21:03   ` [PATCH v2 5/6] setup: teach discover_git_directory to respect the commondir Brandon Williams
2017-06-14  6:15     ` Jeff King
2017-06-14 17:19       ` Brandon Williams
2017-06-13 21:03   ` [PATCH v2 6/6] config: respect commondir Brandon Williams
2017-06-14 18:07   ` [PATCH v3 0/6] config.h Brandon Williams
2017-06-14 18:07     ` [PATCH v3 1/6] config: create config.h Brandon Williams
2017-06-14 18:07     ` [PATCH v3 2/6] config: remove git_config_iter Brandon Williams
2017-06-14 18:07     ` [PATCH v3 3/6] config: don't include config.h by default Brandon Williams
2017-06-14 18:07     ` [PATCH v3 4/6] setup: teach discover_git_directory to respect the commondir Brandon Williams
2017-06-14 18:07     ` [PATCH v3 5/6] config: respect commondir Brandon Williams
2017-06-14 18:07     ` [PATCH v3 6/6] config: don't implicitly use gitdir or commondir Brandon Williams
2017-06-15 19:59     ` [PATCH v3 0/6] config.h Junio C Hamano
2017-06-15 20:33       ` Brandon Williams
2017-06-15 21:09         ` Junio C Hamano
2017-06-15 21:18           ` Brandon Williams
2017-06-16  0:12             ` Brandon Williams

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

  List information: http://vger.kernel.org/majordomo-info.html

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

  git send-email \
    --in-reply-to=20170613012337.GH154599@google.com \
    --to=bmwill@google.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jrnieder@gmail.com \
    --cc=peff@peff.net \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).