On Tue, Sep 28, 2021 at 01:52:26AM +0200, Ævar Arnfjörð Bjarmason wrote: > An implicit assumption of mine in the simpler positive-match-only > version (which I should have made clear) is that anyone who needs this > sort of complexity can just arrange to wrap their "git" in a function, > or do this sort of thing in their ~/.bashrc, i.e. just: > > if code_of_arbitrary_complexity > then > export GIT_DO_XYZ_INCLUDES=1 > fi > > Then in your config: > > includeIf.envBool:GIT_DO_XYZ_INCLUDES.path=~/.gitconfig.d/xyz.cfg > > And having written that out I think the best thing to do is probably to > have a version that only does the envExists and envBool version (or just > envBool), and skip envIs and envMatch entirely. I'm not sure I agree. If you are willing to wrap git, then you can just add: git -c include.path=~/.gitconfig.d/xyz.cfg to the command-line in the first place. Or if you're willing to use our undocumented interface, you can even do it in your .bashrc: if code_of_arbitrary_complexity then GIT_CONFIG_PARAMETERS="'include.path'='~/.gitconfig.d/xyz.cfg'" fi The value of this env matching is that it is done at run-time without wrapping, and can meaningfully inspect the state of the world. E.g., the $TERM thing that started this thread. > In the case of env:PATH we're just setting users up for some buggy or > unexpected interaction with something that would be better done either > via a gitdir include, or if they really need $PATH they can just wrap > "git" in a function that sets a boolean inclusion variable. Yes, I have trouble imagining why any matching on env:PATH would be useful (or $PWD, since we have the much less confusing gitdir conditional). Which isn't to say I want to forbid it, but just because people can shoot themselves in the foot with complexity doesn't mean that "envIs" is a bad thing when it's not misused. > > I think it's just the mashed-up colons that I find ugly in the first > > one. But I agree the latter isn't that nice either, and introduces the > > ambiguity you describe. > > FWIW I hacked up a --config-key --config-value pairing so you could set > keys with "=" in them on the command-line, I'm not sure I like the > interface, but it gets rid of that ":" v.s. "=" edge case: > https://github.com/avar/git/commit/a86053df48b Yeah, we talked about that a while ago, but nobody liked the interface enough to actually code it (and as far as I know, it's really theoretical; nobody has actually wanted to set such an option from the command-line yet, and we have the --config-env stuff for people who want to robustly pass along arbitrary keys). A perhaps more subtle but less awkward to type version is to just require two arguments, like: git --config <key> <value> ... but I'd just as soon continue to leave it un-implemented if nobody has actually needed it in practice. -Peff