[PATCH v7 0/2] Conditional config includes based on remote URL
- From
- Jonathan Tan <jonathantanmy@google.com>
- Date
- Dec 14, 2021, 21:31 UTC
- Message-ID
- <cover.1639509048.git.jonathantanmy@google.com>
- In-Reply-To
- <cover.1634077795.git.jonathantanmy@google.com>
Thanks, everyone, for your comments. I've followed Glen's code suggestion and Junio's documentation suggestion, as you can see in the range-diff.
Jonathan Tan (2): config: make git_config_include() static config: include file if remote URL matches a glob
Documentation/config.txt | 27 ++++++++ config.c | 132 ++++++++++++++++++++++++++++++++++++--- config.h | 46 ++++---------- t/t1300-config.sh | 118 ++++++++++++++++++++++++++++++++++ 4 files changed, 282 insertions(+), 41 deletions(-)
Range-diff against v6:
1: b2dcae03ed = 1: b2dcae03ed config: make git_config_include() static
2: de2be06818 ! 2: 7c70089074 config: include file if remote URL matches a glob
@@ Documentation/config.txt: all branches that begin with `foo/`. This is useful if
+Files included by this option (directly or indirectly) are not allowed
+to contain remote URLs.
++
-+This keyword is designed to be forwards compatible with a naming
-+scheme that supports more variable-based include conditions, but
-+currently Git only supports the exact keyword described above.
++Note that unlike other includeIf conditions, resolving this condition
++relies on information that is not yet known at the point of reading the
++condition. A typical use case is this option being present as a
++system-level or global-level config, and the remote URL being in a
++local-level config; hence the need to scan ahead when resolving this
++condition. In order to avoid the chicken-and-egg problem in which
++potentially-included files can affect whether such files are potentially
++included, Git breaks the cycle by prohibiting these files from affecting
++the resolution of these conditions (thus, prohibiting them from
++declaring remote URLs).
+++
++As for the naming of this keyword, it is for forwards compatibiliy with
++a naming scheme that supports more variable-based include conditions,
++but currently Git only supports the exact keyword described above.
+
A few more notes on matching via `gitdir` and `gitdir/i`:
@@ config.c: static int git_config_include(const char *var, const char *value, void
+ if (inc->opts->unconditional_remote_url)
+ inc->fn = forbid_remote_url;
ret = handle_path_include(value, inc);
-+ if (inc->opts->unconditional_remote_url)
-+ inc->fn = old_fn;
++ inc->fn = old_fn;
+ }
return ret;-- 2.34.1.173.g76aa8bc2d0-goog