setup_pager: set GIT_PAGER_IN_USE
We have always set a global "spawned_pager" variable when we start the pager. This lets us make the auto-color decision later in the program as as "we are outputting to a terminal, or to a pager which can handle colors". Commitmaint6e9af86added support for the GIT_PAGER_IN_USE environment variable. An external program calling git (e.g., git-svn) could set this variable to indicate that it had already started the pager, and that the decision about auto-coloring should take that into account. However,6e9af86failed to do the reverse, which is to tell external programs when git itself has started the pager. Thus a git command implemented as an external script that has the pager turned on (e.g., "git -p stash show") would not realize it was going to a pager, and would suppress colors. This patch remedies that; we always set GIT_PAGER_IN_USE when we start the pager, and the value is respected by both this program and any spawned children. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
							parent
							
								
									8d68a6d593
								
							
						
					
					
						commit
						2e6c012e10
					
				
							
								
								
									
										8
									
								
								pager.c
								
								
								
								
							
							
						
						
									
										8
									
								
								pager.c
								
								
								
								
							|  | @ -11,8 +11,6 @@ | |||
|  * something different on Windows. | ||||
|  */ | ||||
|  | ||||
| static int spawned_pager; | ||||
|  | ||||
| #ifndef WIN32 | ||||
| static void pager_preexec(void) | ||||
| { | ||||
|  | @ -78,7 +76,7 @@ void setup_pager(void) | |||
| 	if (!pager) | ||||
| 		return; | ||||
|  | ||||
| 	spawned_pager = 1; /* means we are emitting to terminal */ | ||||
| 	setenv("GIT_PAGER_IN_USE", "true", 1); | ||||
|  | ||||
| 	/* spawn the pager */ | ||||
| 	pager_argv[0] = pager; | ||||
|  | @ -109,10 +107,6 @@ void setup_pager(void) | |||
| int pager_in_use(void) | ||||
| { | ||||
| 	const char *env; | ||||
|  | ||||
| 	if (spawned_pager) | ||||
| 		return 1; | ||||
|  | ||||
| 	env = getenv("GIT_PAGER_IN_USE"); | ||||
| 	return env ? git_config_bool("GIT_PAGER_IN_USE", env) : 0; | ||||
| } | ||||
|  |  | |||
|  | @ -181,6 +181,17 @@ test_expect_success 'color when writing to a file intended for a pager' ' | |||
| 	colorful colorful.log | ||||
| ' | ||||
|  | ||||
| test_expect_success TTY 'colors are sent to pager for external commands' ' | ||||
| 	test_config alias.externallog "!git log" && | ||||
| 	test_config color.ui auto && | ||||
| 	( | ||||
| 		TERM=vt100 && | ||||
| 		export TERM && | ||||
| 		test_terminal git -p externallog | ||||
| 	) && | ||||
| 	colorful paginated.out | ||||
| ' | ||||
|  | ||||
| # Use this helper to make it easy for the caller of your | ||||
| # terminal-using function to specify whether it should fail. | ||||
| # If you write | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Jeff King
						Jeff King