[PATCH v6 0/2] Conditional config includes based on remote URL
flat view
STALE1724d
SUPERSEDED
From: Jonathan Tan <hidden>
Date: 2021-12-07 23:23:59
Revision v6 of 7 in this series.
Revisions (7)
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