Add a new option 'core.askpass'.
authorAnselm Kruis <a.kruis@science-computing.de>
Mon, 30 Aug 2010 13:38:38 +0000 (15:38 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 31 Aug 2010 17:49:02 +0000 (10:49 -0700)
Setting this option has the same effect as setting the environment variable
'GIT_ASKPASS'.

Signed-off-by: Knut Franke <k.franke@science-computing.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config.txt
cache.h
config.c
connect.c
environment.c

index e75434b..b9ab7df 100644 (file)
@@ -450,6 +450,12 @@ core.excludesfile::
        to the value of `$HOME` and "{tilde}user/" to the specified user's
        home directory.  See linkgit:gitignore[5].
 
+core.askpass::
+       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 when it is set, and the
+       environment variable `GIT_ASKPASS` is not set.
+
 core.editor::
        Commands such as `commit` and `tag` that lets you edit
        messages by launching an editor uses the value of this
diff --git a/cache.h b/cache.h
index c9fa3df..c742757 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -1029,6 +1029,7 @@ extern int pager_in_use(void);
 extern int pager_use_color;
 
 extern const char *editor_program;
+extern const char *askpass_program;
 extern const char *excludes_file;
 
 /* base85 */
index cdcf583..ac55730 100644 (file)
--- a/config.c
+++ b/config.c
@@ -560,6 +560,9 @@ static int git_default_core_config(const char *var, const char *value)
        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);
 
index 02e738a..e296bfc 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -621,12 +621,14 @@ int finish_connect(struct child_process *conn)
 
 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))
                return getpass(prompt);
index 83d38d3..e7760d8 100644 (file)
@@ -37,6 +37,7 @@ size_t delta_base_cache_limit = 16 * 1024 * 1024;
 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;