From: Junio C Hamano Date: Tue, 13 Aug 2013 16:31:35 GMT Subject: Re: git should not use a default user.email config value Message-ID: <7vwqnpy2l4.fsf@alter.siamese.dyndns.org> In-Reply-To: <20130812123921.GA16088@sigill.intra.peff.net> Jeff King writes: > diff --git a/config.c b/config.c > index e13a7b6..a31dc85 100644 > --- a/config.c > +++ b/config.c > @@ -119,10 +119,45 @@ int git_config_include(const char *var, const char *value, void *data) > return ret; > } > > +static NORETURN void die_bad_regex(int err, regex_t *re) > +{ > + char errbuf[1024]; > + regerror(err, re, errbuf, sizeof(errbuf)); > + if (cf && cf->name) > + die("bad regex (at %s:%d): %s", cf->name, cf->linenr, errbuf); > + else > + die("bad regex: %s", errbuf); > +} > + > +static int match_repo_path(const char *re_str) > +{ > + regex_t re; > + int ret; > + const char *repo_path; > + > + ret = regcomp(&re, re_str, REG_EXTENDED); > + if (ret) > + die_bad_regex(ret, &re); > + > + repo_path = absolute_path(get_git_dir()); > + ret = regexec(&re, repo_path, 0, NULL, 0); > + regfree(&re); > + return !ret; We do this every time during the parsing? Hmph, if you had "include.repo:/home/junio/frotz/.path" and "include.repo:/srv/project/git.git/.path" in your ~/.gitconfig, then a single regexp that is lazily prepared once will not cut it, so I guess that you cannot avoid it. Unlike "git init|clone --profile=foo" that requires you to be explicit about your profile upon invocation, this mechanism is much easier to use by having include..path in some global configuration, and the existing precedence rule makes it perfect. By starting /etc/gitconfig and/or your $HOME/.gitconfig with series of include..path, you can have the default definitions included from these magic include to take effect before anything else, and settings from other configuration files can override it.