aboutsummaryrefslogtreecommitdiffstats
path: root/config.c
diff options
context:
space:
mode:
Diffstat (limited to 'config.c')
-rw-r--r--config.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/config.c b/config.c
index 8f324ed3a6..ed89c557bd 100644
--- a/config.c
+++ b/config.c
@@ -345,6 +345,31 @@ void git_config_push_parameter(const char *text)
strbuf_release(&env);
}
+void git_config_push_env(const char *spec)
+{
+ struct strbuf buf = STRBUF_INIT;
+ const char *env_name;
+ const char *env_value;
+
+ env_name = strrchr(spec, '=');
+ if (!env_name)
+ die(_("invalid config format: %s"), spec);
+ env_name++;
+ if (!*env_name)
+ die(_("missing environment variable name for configuration '%.*s'"),
+ (int)(env_name - spec - 1), spec);
+
+ env_value = getenv(env_name);
+ if (!env_value)
+ die(_("missing environment variable '%s' for configuration '%.*s'"),
+ env_name, (int)(env_name - spec - 1), spec);
+
+ strbuf_add(&buf, spec, env_name - spec);
+ strbuf_addstr(&buf, env_value);
+ git_config_push_parameter(buf.buf);
+ strbuf_release(&buf);
+}
+
static inline int iskeychar(int c)
{
return isalnum(c) || c == '-';