Merge branch 'jc/am-i-v-fix'
The "v(iew)" subcommand of the interactive "git am -i" command was broken in 2.6.0 timeframe when the command was rewritten in C. * jc/am-i-v-fix: am -i: fix "v"iew pager: factor out a helper to prepare a child process to run the pager pager: lose a separate argv[]maint
						commit
						c3b1e8d851
					
				|  | @ -1806,7 +1806,7 @@ static int do_interactive(struct am_state *state) | ||||||
|  |  | ||||||
| 			if (!pager) | 			if (!pager) | ||||||
| 				pager = "cat"; | 				pager = "cat"; | ||||||
| 			argv_array_push(&cp.args, pager); | 			prepare_pager_args(&cp, pager); | ||||||
| 			argv_array_push(&cp.args, am_path(state, "patch")); | 			argv_array_push(&cp.args, am_path(state, "patch")); | ||||||
| 			run_command(&cp); | 			run_command(&cp); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
							
								
								
									
										3
									
								
								cache.h
								
								
								
								
							
							
						
						
									
										3
									
								
								cache.h
								
								
								
								
							|  | @ -229,7 +229,9 @@ struct cache_entry { | ||||||
| #error "CE_EXTENDED_FLAGS out of range" | #error "CE_EXTENDED_FLAGS out of range" | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | /* Forward structure decls */ | ||||||
| struct pathspec; | struct pathspec; | ||||||
|  | struct child_process; | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Copy the sha1 and stat state of a cache entry from one to |  * Copy the sha1 and stat state of a cache entry from one to | ||||||
|  | @ -1685,6 +1687,7 @@ extern int pager_use_color; | ||||||
| extern int term_columns(void); | extern int term_columns(void); | ||||||
| extern int decimal_width(uintmax_t); | extern int decimal_width(uintmax_t); | ||||||
| extern int check_pager_config(const char *cmd); | extern int check_pager_config(const char *cmd); | ||||||
|  | extern void prepare_pager_args(struct child_process *, const char *pager); | ||||||
|  |  | ||||||
| extern const char *editor_program; | extern const char *editor_program; | ||||||
| extern const char *askpass_program; | extern const char *askpass_program; | ||||||
|  |  | ||||||
							
								
								
									
										19
									
								
								pager.c
								
								
								
								
							
							
						
						
									
										19
									
								
								pager.c
								
								
								
								
							|  | @ -11,7 +11,6 @@ | ||||||
|  * something different on Windows. |  * something different on Windows. | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| static const char *pager_argv[] = { NULL, NULL }; |  | ||||||
| static struct child_process pager_process = CHILD_PROCESS_INIT; | static struct child_process pager_process = CHILD_PROCESS_INIT; | ||||||
|  |  | ||||||
| static void wait_for_pager(int in_signal) | static void wait_for_pager(int in_signal) | ||||||
|  | @ -64,6 +63,16 @@ const char *git_pager(int stdout_is_tty) | ||||||
| 	return pager; | 	return pager; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void prepare_pager_args(struct child_process *pager_process, const char *pager) | ||||||
|  | { | ||||||
|  | 	argv_array_push(&pager_process->args, pager); | ||||||
|  | 	pager_process->use_shell = 1; | ||||||
|  | 	if (!getenv("LESS")) | ||||||
|  | 		argv_array_push(&pager_process->env_array, "LESS=FRX"); | ||||||
|  | 	if (!getenv("LV")) | ||||||
|  | 		argv_array_push(&pager_process->env_array, "LV=-c"); | ||||||
|  | } | ||||||
|  |  | ||||||
| void setup_pager(void) | void setup_pager(void) | ||||||
| { | { | ||||||
| 	const char *pager = git_pager(isatty(1)); | 	const char *pager = git_pager(isatty(1)); | ||||||
|  | @ -80,14 +89,8 @@ void setup_pager(void) | ||||||
| 	setenv("GIT_PAGER_IN_USE", "true", 1); | 	setenv("GIT_PAGER_IN_USE", "true", 1); | ||||||
|  |  | ||||||
| 	/* spawn the pager */ | 	/* spawn the pager */ | ||||||
| 	pager_argv[0] = pager; | 	prepare_pager_args(&pager_process, pager); | ||||||
| 	pager_process.use_shell = 1; |  | ||||||
| 	pager_process.argv = pager_argv; |  | ||||||
| 	pager_process.in = -1; | 	pager_process.in = -1; | ||||||
| 	if (!getenv("LESS")) |  | ||||||
| 		argv_array_push(&pager_process.env_array, "LESS=FRX"); |  | ||||||
| 	if (!getenv("LV")) |  | ||||||
| 		argv_array_push(&pager_process.env_array, "LV=-c"); |  | ||||||
| 	argv_array_push(&pager_process.env_array, "GIT_PAGER_IN_USE"); | 	argv_array_push(&pager_process.env_array, "GIT_PAGER_IN_USE"); | ||||||
| 	if (start_command(&pager_process)) | 	if (start_command(&pager_process)) | ||||||
| 		return; | 		return; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano