Git Mailing List Archive mirror
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: Elsie Hupp <git@elsiehupp.com>
Cc: Junio C Hamano <gitster@pobox.com>,
	reto@labrat.space, philipoakley@iee.email, git@vger.kernel.org
Subject: Re: Multiple --global config workspaces?
Date: Tue, 18 Oct 2022 16:53:26 -0400	[thread overview]
Message-ID: <Y08SRgwIvDcsWF0Z@coredump.intra.peff.net> (raw)
In-Reply-To: <ACFF4036-3DD1-4647-90BB-77F029326715@elsiehupp.com>

On Tue, Oct 18, 2022 at 12:02:30AM -0400, Elsie Hupp wrote:

> > Right, the value of an include path expands to a single file, and we do
> > not do any globbing. I suppose it would be possible to do, and we'd read
> > each file in sequence. But I'm not sure I'm convinced of the utility of
> > that (and again, it doesn't help the discoverability problem you had).
> 
> My thought is that globbing (I’m not sure of the terminology) should
> be supported to the extent that it’s valid bash syntax, and breaking
> consistency with bash could cause more confusion than just letting the
> user do weird or inadvisable things with the path variable that
> nonetheless have entirely predictable outcomes.

I'm not sure I buy this. We are not otherwise consistent with bash for
value expansion. For instance, we don't allow variable expansion like
$HOME. The only thing we share is the "~" magic.

Moreover, you are thinking of include.path as "cat":

> So, because, e.g., the following works:
> 
> > elsiehupp@Alpha:~$ cat ./**/github/.gitconfig
> > [user]
> > 	email = github@elsiehupp.com
> 
> …one would expect, e.g., this gitconfig line to work, as well:
> 
> > [include] path = ./**/github/.gitconfig

The expansion of the glob is done by the shell. But it is "cat" which is
happy to receive multiple files as input. But many other commands are
not, and include.path is not.

None of which is to say you're wrong to think of it this way. It's a
perfectly valid mental model. It just happens not to be the mental model
we used when implementing it.

I'm not entirely opposed to expanding globs in include.path values if
somebody wants to go to the trouble to implement it, but:

  1. I'd be more convinced by a concrete use case. It sounds like
     conditional includes were the real sticking point for yours. Maybe
     somebody wants to do include.path on ".gitconfig.d/*" or something?
     I dunno.

  2. It does involve breaking backwards compatibility slightly, in that
     glob metacharacters do not currently need to be quoted. It's
     somewhat unlikely somebody would have included them literally,
     though.

     But having include.dir or similar would extend the system without
     breaking compatibility.

> > elsiehupp@Alpha:~$ git config --get-all user.email
> > github@elsiehupp.com
> > gitlab@elsiehupp.com
> > gnome@elsiehupp.com
> > launchpad@elsiehupp.com
> > github@elsiehupp.com
> > xdg@elsiehupp.com
> 
> I don’t know off the top of my head what happens when a single
> variable is defined multiple times. I do get the following output,
> though:

It depends on the variable. Most single-value options in Git are "last
one wins", but some are lists (e.g., remote.*.fetch). We also hold
config values for other porcelain scripts whose semantics we may not
even know ourselves. There are options to "git config" for specifying
how to handle these (e.g., --get-all).

-Peff

  reply	other threads:[~2022-10-18 20:53 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-11  3:06 Multiple --global config workspaces? Elsie Hupp
2022-10-11  5:50 ` Junio C Hamano
2022-10-11 13:13   ` Jeff King
2022-10-11 16:55     ` Elsie Hupp
2022-10-11 18:41       ` Elsie Hupp
2022-10-14 19:39       ` Jeff King
2022-10-15 10:56         ` Matthias Aßhauer
2022-10-15 18:14           ` Jeff King
2022-10-18  4:02         ` Elsie Hupp
2022-10-18 20:53           ` Jeff King [this message]
2022-10-20  2:29             ` Elsie Hupp
2022-10-20  2:39               ` Elsie Hupp
2022-10-11 13:56   ` Philip Oakley
2022-10-11  5:51 ` Reto

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=Y08SRgwIvDcsWF0Z@coredump.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@elsiehupp.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=philipoakley@iee.email \
    --cc=reto@labrat.space \
    /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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).