Thanks everyone for your comments. Here's an update.
Jonathan Tan (2):
config: make git_config_include() static
config: include file if remote URL matches a glob
Documentation/config.txt | 12 ++++
config.c | 133 ++++++++++++++++++++++++++++++++++++---
config.h | 44 ++++---------
t/t1300-config.sh | 118 ++++++++++++++++++++++++++++++++++
4 files changed, 265 insertions(+), 42 deletions(-)
Range-diff against v3:
1: b2dcae03ed = 1: b2dcae03ed config: make git_config_include() static
2: 1c1a07a0b6 ! 2: 3b3af0da98 config: include file if remote URL matches a glob
@@ Documentation/config.txt: all branches that begin with `foo/`. This is useful if
+ The data that follows the keyword `hasremoteurl:` is taken to
+ be a pattern with standard globbing wildcards and two
+ additional ones, `**/` and `/**`, that can match multiple
-+ components. The rest of the config files will be scanned for
-+ remote URLs, and then if there at least one remote URL that
-+ matches this pattern, the include condition is met.
++ components. The first time this keyword is seen, the rest of
++ the config files will be scanned for remote URLs (without
++ applying any values). If there exists at least one remote URL
++ that matches this pattern, the include condition is met.
++
+Files included by this option (directly or indirectly) are not allowed
+to contain remote URLs.
@@ t/t1300-config.sh: test_expect_success '--get and --get-all with --fixed-value'
+ git -C hasremoteurlTest config --get user.ssm &&
+ test_must_fail git -C hasremoteurlTest config --get user.no
+'
++
++test_expect_success 'includeIf.hasremoteurl forbids remote url in such included files' '
++ git init hasremoteurlTest &&
++ test_when_finished "rm -rf hasremoteurlTest" &&
++
++ cat >"$(pwd)"/include-with-url <<-\EOF &&
++ [remote "bar"]
++ url = bar
++ EOF
++ cat >>hasremoteurlTest/.git/config <<-EOF &&
++ [includeIf "hasremoteurl:foo"]
++ path = "$(pwd)/include-with-url"
++ EOF
++
++ # test with any Git command
++ test_must_fail git -C hasremoteurlTest status 2>err &&
++ grep "fatal: remote URLs cannot be configured in file directly or indirectly included by includeIf.hasremoteurl" err
++'
+
test_done
--
2.34.0.rc2.393.gf8c9666880-goog