1. Stefan Saasen
  2. git


Junio C Hamano  committed b815a72 Merge

Merge branch 'kf/askpass-config'

* kf/askpass-config:
Extend documentation of core.askpass and GIT_ASKPASS.
Allow core.askpass to override SSH_ASKPASS.
Add a new option 'core.askpass'.

  • Participants
  • Parent commits e250c59, 453842c
  • Branches master

Comments (0)

Files changed (7)

File Documentation/config.txt

View file
  • Ignore whitespace
 	to the value of `$HOME` and "{tilde}user/" to the specified user's
 	home directory.  See linkgit:gitignore[5].
+	Some commands (e.g. svn and http interfaces) that interactively
+	ask for a password can be told to use an external program given
+	via the value of this variable. Can be overridden by the 'GIT_ASKPASS'
+	environment variable. If not set, fall back to the value of the
+	'SSH_ASKPASS' environment variable or, failing that, a simple password
+	prompt. The external program shall be given a suitable prompt as
+	command line argument and write the password on its STDOUT.
 	Commands such as `commit` and `tag` that lets you edit
 	messages by launching an editor uses the value of this

File Documentation/git.txt

View file
  • Ignore whitespace
 personal `.ssh/config` file.  Please consult your ssh documentation
 for further details.
+	If this environment variable is set, then git commands which need to
+	acquire passwords or passphrases (e.g. for HTTP or IMAP authentication)
+	will call this program with a suitable prompt as command line argument
+	and read the password from its STDOUT. See also the 'core.askpass'
+	option in linkgit:git-config[1].
 	If this environment variable is set to "1", then commands such
 	as 'git blame' (in incremental mode), 'git rev-list', 'git log',

File cache.h

View file
  • Ignore whitespace
 extern int pager_use_color;
 extern const char *editor_program;
+extern const char *askpass_program;
 extern const char *excludes_file;
 /* base85 */

File config.c

View file
  • Ignore whitespace
 	if (!strcmp(var, "core.editor"))
 		return git_config_string(&editor_program, var, value);
+	if (!strcmp(var, "core.askpass"))
+		return git_config_string(&askpass_program, var, value);
 	if (!strcmp(var, "core.excludesfile"))
 		return git_config_pathname(&excludes_file, var, value);

File connect.c

View file
  • Ignore whitespace
 char *git_getpass(const char *prompt)
-	char *askpass;
+	const char *askpass;
 	struct child_process pass;
 	const char *args[3];
 	static struct strbuf buffer = STRBUF_INIT;
 	askpass = getenv("GIT_ASKPASS");
+	if (!askpass)
+		askpass = askpass_program;
+	if (!askpass)
+		askpass = getenv("SSH_ASKPASS");
 	if (!askpass || !(*askpass))
 		return getpass(prompt);

File environment.c

View file
  • Ignore whitespace
 const char *pager_program;
 int pager_use_color = 1;
 const char *editor_program;
+const char *askpass_program;
 const char *excludes_file;
 enum auto_crlf auto_crlf = AUTO_CRLF_FALSE;
 int read_replace_refs = 1;

File git.c

View file
  • Ignore whitespace
 	int handled = 0;
-	if (!getenv("GIT_ASKPASS") && getenv("SSH_ASKPASS"))
-		setenv("GIT_ASKPASS", getenv("SSH_ASKPASS"), 1);
 	while (*argc > 0) {
 		const char *cmd = (*argv)[0];
 		if (cmd[0] != '-')