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>maint
							parent
							
								
									d3c58b83ae
								
							
						
					
					
						commit
						1cb0134f34
					
				
							
								
								
									
										46
									
								
								prompt.c
								
								
								
								
							
							
						
						
									
										46
									
								
								prompt.c
								
								
								
								
							|  | @ -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); | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Jeff King
						Jeff King