diff options
author | Junio C Hamano <gitster@pobox.com> | 2012-02-16 14:18:00 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-02-16 14:18:00 -0800 |
commit | f3f3c4dec6351cb875bdd24e685f2e613eb249c1 (patch) | |
tree | e025c24f187d4a68ac367897fbf3d1384c7e6240 | |
parent | 35c60a08075aa608b2653f9df3685906fe8f634e (diff) | |
parent | 84d72733fc8cb90ac7fef04bb114da1e14d8b147 (diff) | |
download | git-f3f3c4dec6351cb875bdd24e685f2e613eb249c1.tar.gz git-f3f3c4dec6351cb875bdd24e685f2e613eb249c1.tar.xz |
Merge branch 'jk/prompt-fallback-to-tty' into maint
* jk/prompt-fallback-to-tty:
prompt: fall back to terminal if askpass fails
prompt: clean up strbuf usage
-rw-r--r-- | prompt.c | 27 |
1 files changed, 18 insertions, 9 deletions
@@ -9,6 +9,7 @@ static char *do_askpass(const char *cmd, const char *prompt) struct child_process pass; const char *args[3]; static struct strbuf buffer = STRBUF_INIT; + int err = 0; args[0] = cmd; args[1] = prompt; @@ -19,25 +20,30 @@ static char *do_askpass(const char *cmd, const char *prompt) pass.out = -1; if (start_command(&pass)) - exit(1); + return NULL; - strbuf_reset(&buffer); if (strbuf_read(&buffer, pass.out, 20) < 0) - die("failed to get '%s' from %s\n", prompt, cmd); + err = 1; close(pass.out); if (finish_command(&pass)) - exit(1); + err = 1; + + if (err) { + error("unable to read askpass response from '%s'", cmd); + strbuf_release(&buffer); + return NULL; + } strbuf_setlen(&buffer, strcspn(buffer.buf, "\r\n")); - return buffer.buf; + return strbuf_detach(&buffer, NULL); } char *git_prompt(const char *prompt, int flags) { - char *r; + char *r = NULL; if (flags & PROMPT_ASKPASS) { const char *askpass; @@ -48,12 +54,15 @@ char *git_prompt(const char *prompt, int flags) if (!askpass) askpass = getenv("SSH_ASKPASS"); if (askpass && *askpass) - return do_askpass(askpass, prompt); + r = do_askpass(askpass, prompt); } - r = git_terminal_prompt(prompt, flags & PROMPT_ECHO); if (!r) - die_errno("could not read '%s'", prompt); + 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)); + } return r; } |