Skip to content

Commit

Permalink
prompt: respect GIT_TERMINAL_PROMPT to disable terminal prompts
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jeff King authored and Junio C Hamano committed Dec 4, 2014
1 parent 59b3865 commit e652c0e
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 4 deletions.
4 changes: 4 additions & 0 deletions Documentation/git.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
16 changes: 12 additions & 4 deletions prompt.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down

0 comments on commit e652c0e

Please sign in to comment.