When we request a username and password from the user on the terminal, we can't use stdin/stdout, because they may be connected to pipes to other git processes. Instead, we use getpass() (via git_getpass), which will generally open /dev/tty and read and write from that. The only problem is that getpass is meant to take passwords, and therefore will not echo characters from the username, which is annoying. Now that git_prompt understand the "echo" flag, we can use that to let the user see their username as they type it. Signed-off-by: Jeff King <peff@xxxxxxxx> --- credential.c | 15 +++++++-------- 1 files changed, 7 insertions(+), 8 deletions(-) diff --git a/credential.c b/credential.c index d918ba5..9ad580d 100644 --- a/credential.c +++ b/credential.c @@ -109,7 +109,8 @@ static void credential_describe(struct credential *c, struct strbuf *out) strbuf_addf(out, "/%s", c->path); } -static char *credential_ask_one(const char *what, struct credential *c) +static char *credential_ask_one(const char *what, struct credential *c, + int flags) { struct strbuf desc = STRBUF_INIT; struct strbuf prompt = STRBUF_INIT; @@ -121,11 +122,7 @@ static void credential_describe(struct credential *c, struct strbuf *out) else strbuf_addf(&prompt, "%s: ", what); - /* FIXME: for usernames, we should do something less magical that - * actually echoes the characters. However, we need to read from - * /dev/tty and not stdio, which is not portable (but getpass will do - * it for us). http.c uses the same workaround. */ - r = git_getpass(prompt.buf); + r = git_prompt(prompt.buf, what, flags); strbuf_release(&desc); strbuf_release(&prompt); @@ -135,9 +132,11 @@ static void credential_describe(struct credential *c, struct strbuf *out) static void credential_getpass(struct credential *c) { if (!c->username) - c->username = credential_ask_one("Username", c); + c->username = credential_ask_one("Username", c, + PROMPT_ASKPASS|PROMPT_ECHO); if (!c->password) - c->password = credential_ask_one("Password", c); + c->password = credential_ask_one("Password", c, + PROMPT_ASKPASS); } int credential_read(struct credential *c, FILE *fp) -- 1.7.7.4.7.g24824 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html