diff options
author | Jeff King <peff@peff.net> | 2011-12-10 05:40:57 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-12-12 16:09:38 -0800 |
commit | 1cb0134f3414be187cc3eb98e9740aeeb07dcb16 (patch) | |
tree | 89ad60e8b4e903d7d93c26af177ae5e6df9980ce /prompt.c | |
parent | d3c58b83aee2007ca76dc5d1242c09b6f7989c76 (diff) | |
download | git-1cb0134f3414be187cc3eb98e9740aeeb07dcb16.tar.gz |
refactor git_getpass into generic prompt function
This will allow callers to specify more options (e.g.,
leaving echo on). The original git_getpass becomes a slim
wrapper around the new function.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'prompt.c')
-rw-r--r-- | prompt.c | 46 |
1 files changed, 30 insertions, 16 deletions
@@ -3,26 +3,13 @@ #include "strbuf.h" #include "prompt.h" -char *git_getpass(const char *prompt) +static char *do_askpass(const char *cmd, const char *prompt) { - 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)) { - char *result = getpass(prompt); - if (!result) - die_errno("Could not read password"); - return result; - } - - args[0] = askpass; + args[0] = cmd; args[1] = prompt; args[2] = NULL; @@ -35,7 +22,7 @@ char *git_getpass(const char *prompt) strbuf_reset(&buffer); if (strbuf_read(&buffer, pass.out, 20) < 0) - die("failed to read password from %s\n", askpass); + die("failed to get '%s' from %s\n", prompt, cmd); close(pass.out); @@ -46,3 +33,30 @@ char *git_getpass(const char *prompt) return buffer.buf; } + +char *git_prompt(const char *prompt, int flags) +{ + char *r; + + if (flags & PROMPT_ASKPASS) { + const char *askpass; + + askpass = getenv("GIT_ASKPASS"); + if (!askpass) + askpass = askpass_program; + if (!askpass) + askpass = getenv("SSH_ASKPASS"); + if (askpass && *askpass) + return do_askpass(askpass, prompt); + } + + r = getpass(prompt); + if (!r) + die_errno("could not read '%s'", prompt); + return r; +} + +char *git_getpass(const char *prompt) +{ + return git_prompt(prompt, PROMPT_ASKPASS); +} |