Re: git should not use a default user.email config value
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:58:24
Jeff King [off-list ref] writes:
quoted hunk
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.<magic>.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.<magic>.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.