git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: "brian m. carlson" <sandals@crustytoothpaste.net>
Cc: Jonathan Nieder <jrnieder@gmail.com>, git@vger.kernel.org
Subject: [PATCH 2/2] prompt: respect GIT_TERMINAL_PROMPT to disable terminal prompts
Date: Wed, 3 Dec 2014 22:52:29 -0500	[thread overview]
Message-ID: <20141204035228.GB21492@peff.net> (raw)
In-Reply-To: <20141204034206.GA1493@peff.net>

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>
---
I also considered adding a "git --[no-]terminal-prompt"
option, but it seemed like overkill to me. I imagine the
common use would be to just set this at the top of a script.
But it would be trivial to add if we want to.

No tests, because our lib-terminal.sh infrastructure is not
up to the challenge of fooling getpass(). Besides not
handling input at all, git will actually open /dev/tty
itself. So we would have to open a pty and then set it as
the controlling terminal for the sub-process.  It's probably
possible, but I'm not sure the portability headaches are
worth testing such a trivial feature.

 Documentation/git.txt |  4 ++++
 prompt.c              | 16 ++++++++++++----
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/Documentation/git.txt b/Documentation/git.txt
index afb48d3..54f7a1c 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -906,6 +906,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 e5b4938..8181eeb 100644
--- a/prompt.c
+++ b/prompt.c
@@ -57,11 +57,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;
 }
-- 
2.2.0.390.gf60752d

  parent reply	other threads:[~2014-12-04  3:52 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-03  0:03 Disabling credential helper? brian m. carlson
2014-12-03  0:59 ` Jonathan Nieder
2014-12-03  1:21   ` Jeff King
2014-12-03  1:29     ` Jonathan Nieder
2014-12-03  1:36       ` Jeff King
2014-12-04  1:33         ` Jeff King
2014-12-04  6:07           ` Junio C Hamano
2014-12-03 17:14     ` Junio C Hamano
2014-12-04  0:42     ` brian m. carlson
2014-12-04  3:42       ` [PATCH 0/2] disabling terminal prompts Jeff King
2014-12-04  3:46         ` [PATCH 1/2] credential: let helpers tell us to quit Jeff King
2014-12-04  3:52         ` Jeff King [this message]
2014-12-04 18:24           ` [PATCH 2/2] prompt: respect GIT_TERMINAL_PROMPT to disable terminal prompts Junio C Hamano
2014-12-04 21:01             ` Jeff King
2014-12-04 21:33               ` Junio C Hamano
2014-12-05  9:10                 ` Jeff King
2014-12-05 17:37                   ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20141204035228.GB21492@peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=jrnieder@gmail.com \
    --cc=sandals@crustytoothpaste.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).