git.c: provide setup_auto_pager()
The previous patch introduced a way for builtins to declare that they will take responsibility for handling the `pager.foo`-config item. (See the commit message of that patch for why that could be useful.) Provide setup_auto_pager(), which builtins can call in order to handle `pager.<cmd>`, including possibly starting the pager. Make this function don't do anything if a pager has already been started, as indicated by use_pager or pager_in_use(). Whenever this function is called from a builtin, git.c will already have called commit_pager_choice(). Since commit_pager_choice() treats the special value -1 as "punt" or "not yet decided", it is not a problem that we might end up calling commit_pager_choice() once in git.c and once (or more) in the builtin. Make the new function use -1 in the same way and document it as "punt". Don't add any users of setup_auto_pager just yet, one will follow in a later patch. Suggested-by: Jeff King <peff@peff.net> Signed-off-by: Martin Ågren <martin.agren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									c409824cc2
								
							
						
					
					
						commit
						033fe3d92c
					
				
							
								
								
									
										12
									
								
								builtin.h
								
								
								
								
							
							
						
						
									
										12
									
								
								builtin.h
								
								
								
								
							| 
						 | 
				
			
			@ -113,6 +113,18 @@ struct fmt_merge_msg_opts {
 | 
			
		|||
extern int fmt_merge_msg(struct strbuf *in, struct strbuf *out,
 | 
			
		||||
			 struct fmt_merge_msg_opts *);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * If a built-in has DELAY_PAGER_CONFIG set, the built-in should call this early
 | 
			
		||||
 * when it wishes to respect the `pager.foo`-config. The `cmd` is the name of
 | 
			
		||||
 * the built-in, e.g., "foo". If a paging-choice has already been setup, this
 | 
			
		||||
 * does nothing. The default in `def` should be 0 for "pager off", 1 for "pager
 | 
			
		||||
 * on" or -1 for "punt".
 | 
			
		||||
 *
 | 
			
		||||
 * You should most likely use a default of 0 or 1. "Punt" (-1) could be useful
 | 
			
		||||
 * to be able to fall back to some historical compatibility name.
 | 
			
		||||
 */
 | 
			
		||||
extern void setup_auto_pager(const char *cmd, int def);
 | 
			
		||||
 | 
			
		||||
extern int is_builtin(const char *s);
 | 
			
		||||
 | 
			
		||||
extern int cmd_add(int argc, const char **argv, const char *prefix);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										10
									
								
								git.c
								
								
								
								
							
							
						
						
									
										10
									
								
								git.c
								
								
								
								
							| 
						 | 
				
			
			@ -33,6 +33,16 @@ static void commit_pager_choice(void) {
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void setup_auto_pager(const char *cmd, int def)
 | 
			
		||||
{
 | 
			
		||||
	if (use_pager != -1 || pager_in_use())
 | 
			
		||||
		return;
 | 
			
		||||
	use_pager = check_pager_config(cmd);
 | 
			
		||||
	if (use_pager == -1)
 | 
			
		||||
		use_pager = def;
 | 
			
		||||
	commit_pager_choice();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int handle_options(const char ***argv, int *argc, int *envchanged)
 | 
			
		||||
{
 | 
			
		||||
	const char **orig_argv = *argv;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue