Re: How to undo previously set configuration? (again)
- From
Jeff King <peff@peff.net>
- Date
- May 1, 2019, 21:15 UTC
- Message-ID
- <20190501211525.GB15902@sigill.intra.peff.net>
- In-Reply-To
- <87r29iqsf9.fsf@evledraar.gmail.com>
On Wed, May 01, 2019 at 02:18:34PM +0200, Ævar Arnfjörð Bjarmason wrote:
> We can make it fancier, but we already deal with this, e.g. if you do
> "git config -l" we'll show "include{,if}" directives at the same "level"
> as other "normal" keys.We show them, but we _do_ interpret them if the caller asks for it with --includes (which defaults to on when doing the usual "look in all files").
I think we'd have something similar here, where the caller can ask to apply excludes or not.
Show 20 quoted lines
> We also provide no way in "git config" to properly interpret a > value. E.g. does a "user.email" showing up twice for me mean I have two > E-Mails at the same time, or does the last one win? We both know the > answer, but git-config itself doesn't, and that information lives in > docs/code outside of it. > > Similarly we'd just print a sequence of: > > user.name=foo > user.email=bar > exclude.key=user.* > user.name=baz > > And it would be up to some "smarter" reader of the config data to > realize that the end result is one where we have no "user.email" set, > and "user.name=baz". > > But yeah, optionally having some new --list-normalized or > --list-after-excludes or whatever would be great, and presumably not > hard if we had some central "excludes" mechanism...
I think that is all because "--list" really is just about dumping all values, not about interpreting. If we had an exclude mechanism, then I'd expect:
git config user.name
to apply it just like git_config_get_string() would.
Because of its lack of interpretation, I don't think --list is actually good for much besides debugging. Some scripts do use it to avoid making a bunch of individual git-config calls, but they'd be much better served by a --stdin mode which let you feed in a sequence of operations ("I want x.y.z, as a single last-one-wins value, and interpreted as a bool") and get a sequence of outputs.
-Peff