config: add new way to pass config via --config-env
While it's already possible to pass runtime configuration via `git -c <key>=<value>`, it may be undesirable to use when the value contains sensitive information. E.g. if one wants to set `http.extraHeader` to contain an authentication token, doing so via `-c` would trivially leak those credentials via e.g. ps(1), which typically also shows command arguments. To enable this usecase without leaking credentials, this commit introduces a new switch `--config-env=<key>=<envvar>`. Instead of directly passing a value for the given key, it instead allows the user to specify the name of an environment variable. The value of that variable will then be used as value of the key. Co-authored-by: Jeff King <peff@peff.net> Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
b0812b6ac0
commit
ce81b1da23
4
git.c
4
git.c
@ -29,7 +29,7 @@ const char git_usage_string[] =
|
||||
" [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]\n"
|
||||
" [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]\n"
|
||||
" [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
|
||||
" [--super-prefix=<path>]\n"
|
||||
" [--super-prefix=<path>] [--config-env=<name>=<envvar>]\n"
|
||||
" <command> [<args>]");
|
||||
|
||||
const char git_more_info_string[] =
|
||||
@ -255,6 +255,8 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)
|
||||
git_config_push_parameter((*argv)[1]);
|
||||
(*argv)++;
|
||||
(*argc)--;
|
||||
} else if (skip_prefix(cmd, "--config-env=", &cmd)) {
|
||||
git_config_push_env(cmd);
|
||||
} else if (!strcmp(cmd, "--literal-pathspecs")) {
|
||||
setenv(GIT_LITERAL_PATHSPECS_ENVIRONMENT, "1", 1);
|
||||
if (envchanged)
|
||||
|
||||
Reference in New Issue
Block a user