Here's a reroll addressing Ævar's comments about needless $(pwd) and separating out include_by_remote_url() to make things more consistent. Jonathan Tan (2): config: make git_config_include() static config: include file if remote URL matches a glob Documentation/config.txt | 16 +++++ config.c | 133 ++++++++++++++++++++++++++++++++++++--- config.h | 46 ++++---------- t/t1300-config.sh | 118 ++++++++++++++++++++++++++++++++++ 4 files changed, 272 insertions(+), 41 deletions(-) Range-diff against v5: 1: b2dcae03ed = 1: b2dcae03ed config: make git_config_include() static 2: d3b8e00717 ! 2: de2be06818 config: include file if remote URL matches a glob @@ config.c: static int include_by_branch(const char *cond, size_t cond_len) + return found; +} + ++static int include_by_remote_url(struct config_include_data *inc, ++ const char *cond, size_t cond_len) ++{ ++ if (inc->opts->unconditional_remote_url) ++ return 1; ++ if (!inc->remote_urls) ++ populate_remote_urls(inc); ++ return at_least_one_url_matches_glob(cond, cond_len, ++ inc->remote_urls); ++} ++ +static int include_condition_is_true(struct config_include_data *inc, const char *cond, size_t cond_len) { + const struct config_options *opts = inc->opts; -- if (skip_prefix_mem(cond, cond_len, "gitdir:", &cond, &cond_len)) -+ if (skip_prefix_mem(cond, cond_len, "gitdir:", &cond, &cond_len)) { + if (skip_prefix_mem(cond, cond_len, "gitdir:", &cond, &cond_len)) return include_by_gitdir(opts, cond, cond_len, 0); -- else if (skip_prefix_mem(cond, cond_len, "gitdir/i:", &cond, &cond_len)) -+ } else if (skip_prefix_mem(cond, cond_len, "gitdir/i:", &cond, &cond_len)) { +@@ config.c: static int include_condition_is_true(const struct config_options *opts, return include_by_gitdir(opts, cond, cond_len, 1); -- else if (skip_prefix_mem(cond, cond_len, "onbranch:", &cond, &cond_len)) -+ } else if (skip_prefix_mem(cond, cond_len, "onbranch:", &cond, &cond_len)) { + else if (skip_prefix_mem(cond, cond_len, "onbranch:", &cond, &cond_len)) return include_by_branch(cond, cond_len); -+ } else if (skip_prefix_mem(cond, cond_len, "hasconfig:remote.*.url:", &cond, -+ &cond_len)) { -+ if (inc->opts->unconditional_remote_url) -+ return 1; -+ if (!inc->remote_urls) -+ populate_remote_urls(inc); -+ return at_least_one_url_matches_glob(cond, cond_len, -+ inc->remote_urls); -+ } ++ else if (skip_prefix_mem(cond, cond_len, "hasconfig:remote.*.url:", &cond, ++ &cond_len)) ++ return include_by_remote_url(inc, cond, cond_len); /* unknown conditionals are always false */ return 0; @@ t/t1300-config.sh: test_expect_success '--get and --get-all with --fixed-value' + git init hasremoteurlTest && + test_when_finished "rm -rf hasremoteurlTest" && + -+ cat >"$(pwd)"/include-this <<-\EOF && ++ cat >include-this <<-\EOF && + [user] + this = this-is-included + EOF -+ cat >"$(pwd)"/dont-include-that <<-\EOF && ++ cat >dont-include-that <<-\EOF && + [user] + that = that-is-not-included + EOF @@ t/t1300-config.sh: test_expect_success '--get and --get-all with --fixed-value' + git init hasremoteurlTest && + test_when_finished "rm -rf hasremoteurlTest" && + -+ cat >"$(pwd)"/include-two-three <<-\EOF && ++ cat >include-two-three <<-\EOF && + [user] + two = included-config + three = included-config @@ t/t1300-config.sh: test_expect_success '--get and --get-all with --fixed-value' + git init hasremoteurlTest && + test_when_finished "rm -rf hasremoteurlTest" && + -+ printf "[user]\ndss = yes\n" >"$(pwd)/double-star-start" && -+ printf "[user]\ndse = yes\n" >"$(pwd)/double-star-end" && -+ printf "[user]\ndsm = yes\n" >"$(pwd)/double-star-middle" && -+ printf "[user]\nssm = yes\n" >"$(pwd)/single-star-middle" && -+ printf "[user]\nno = no\n" >"$(pwd)/no" && ++ printf "[user]\ndss = yes\n" >double-star-start && ++ printf "[user]\ndse = yes\n" >double-star-end && ++ printf "[user]\ndsm = yes\n" >double-star-middle && ++ printf "[user]\nssm = yes\n" >single-star-middle && ++ printf "[user]\nno = no\n" >no && + + cat >>hasremoteurlTest/.git/config <<-EOF && + [remote "foo"] @@ t/t1300-config.sh: test_expect_success '--get and --get-all with --fixed-value' + git init hasremoteurlTest && + test_when_finished "rm -rf hasremoteurlTest" && + -+ cat >"$(pwd)"/include-with-url <<-\EOF && ++ cat >include-with-url <<-\EOF && + [remote "bar"] + url = bar + EOF -- 2.34.1.400.ga245620fadb-goog