summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2014-12-03 22:52:29 -0500
committerJunio C Hamano <gitster@pobox.com>2014-12-04 10:22:42 -0800
commite652c0eb5d772076f92245c7e076bf6aaf6af223 (patch)
tree2ba5c9483f0d1f1f45a35bb038b02d9e0e5c1590
parent59b386526a6cdd0289cdf35dd8038ae1bdfd630f (diff)
downloadgit-jk/credential-quit.tar.gz
prompt: respect GIT_TERMINAL_PROMPT to disable terminal promptsjk/credential-quit
If you run git as part of an automated system, you might prefer git to die rather than try to issue a prompt on the terminal (because there would be nobody to see it and respond, and the process would hang forever). This usually works out of the box because getpass() (and our more featureful replacements) will fail when there is no tty, but this does not cover all cases. For example, a batch system run via ssh might have a tty, even when the user does not expect it. Let's provide an environment variable the user can set to avoid even trying to touch the tty at all. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--Documentation/git.txt4
-rw-r--r--prompt.c16
2 files changed, 16 insertions, 4 deletions
diff --git a/Documentation/git.txt b/Documentation/git.txt
index 5627845114..72b6a2df14 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -901,6 +901,10 @@ for further details.
and read the password from its STDOUT. See also the 'core.askpass'
option in linkgit:git-config[1].
+'GIT_TERMINAL_PROMPT'::
+ If this environment variable is set to `0`, git will not prompt
+ on the terminal (e.g., when asking for HTTP authentication).
+
'GIT_CONFIG_NOSYSTEM'::
Whether to skip reading settings from the system-wide
`$(prefix)/etc/gitconfig` file. This environment variable can
diff --git a/prompt.c b/prompt.c
index d7bb17cb66..35ddbfab0c 100644
--- a/prompt.c
+++ b/prompt.c
@@ -58,11 +58,19 @@ char *git_prompt(const char *prompt, int flags)
r = do_askpass(askpass, prompt);
}
- if (!r)
- r = git_terminal_prompt(prompt, flags & PROMPT_ECHO);
if (!r) {
- /* prompts already contain ": " at the end */
- die("could not read %s%s", prompt, strerror(errno));
+ const char *err;
+
+ if (git_env_bool("GIT_TERMINAL_PROMPT", 1)) {
+ r = git_terminal_prompt(prompt, flags & PROMPT_ECHO);
+ err = strerror(errno);
+ } else {
+ err = "terminal prompts disabled";
+ }
+ if (!r) {
+ /* prompts already contain ": " at the end */
+ die("could not read %s%s", prompt, err);
+ }
}
return r;
}