Introduce a global level warn() function.
Like the existing error() function the new warn() function can be used to describe a situation that probably should not be occuring, but which the user (and Git) can continue to work around without running into too many problems. An example situation is a bad commit SHA1 found in a reflog. Attempting to read this record out of the reflog isn't really an error as we have skipped over it in the past. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>maint
							parent
							
								
									51dcaa9686
								
							
						
					
					
						commit
						fa39b6b5b1
					
				|  | @ -71,10 +71,12 @@ | ||||||
| extern void usage(const char *err) NORETURN; | extern void usage(const char *err) NORETURN; | ||||||
| extern void die(const char *err, ...) NORETURN __attribute__((format (printf, 1, 2))); | extern void die(const char *err, ...) NORETURN __attribute__((format (printf, 1, 2))); | ||||||
| extern int error(const char *err, ...) __attribute__((format (printf, 1, 2))); | extern int error(const char *err, ...) __attribute__((format (printf, 1, 2))); | ||||||
|  | extern void warn(const char *err, ...) __attribute__((format (printf, 1, 2))); | ||||||
|  |  | ||||||
| extern void set_usage_routine(void (*routine)(const char *err) NORETURN); | extern void set_usage_routine(void (*routine)(const char *err) NORETURN); | ||||||
| extern void set_die_routine(void (*routine)(const char *err, va_list params) NORETURN); | extern void set_die_routine(void (*routine)(const char *err, va_list params) NORETURN); | ||||||
| extern void set_error_routine(void (*routine)(const char *err, va_list params)); | extern void set_error_routine(void (*routine)(const char *err, va_list params)); | ||||||
|  | extern void set_warn_routine(void (*routine)(const char *warn, va_list params)); | ||||||
|  |  | ||||||
| #ifdef NO_MMAP | #ifdef NO_MMAP | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										19
									
								
								usage.c
								
								
								
								
							
							
						
						
									
										19
									
								
								usage.c
								
								
								
								
							|  | @ -29,12 +29,17 @@ static void error_builtin(const char *err, va_list params) | ||||||
| 	report("error: ", err, params); | 	report("error: ", err, params); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static void warn_builtin(const char *warn, va_list params) | ||||||
|  | { | ||||||
|  | 	report("warning: ", warn, params); | ||||||
|  | } | ||||||
|  |  | ||||||
| /* If we are in a dlopen()ed .so write to a global variable would segfault | /* If we are in a dlopen()ed .so write to a global variable would segfault | ||||||
|  * (ugh), so keep things static. */ |  * (ugh), so keep things static. */ | ||||||
| static void (*usage_routine)(const char *err) NORETURN = usage_builtin; | static void (*usage_routine)(const char *err) NORETURN = usage_builtin; | ||||||
| static void (*die_routine)(const char *err, va_list params) NORETURN = die_builtin; | static void (*die_routine)(const char *err, va_list params) NORETURN = die_builtin; | ||||||
| static void (*error_routine)(const char *err, va_list params) = error_builtin; | static void (*error_routine)(const char *err, va_list params) = error_builtin; | ||||||
|  | static void (*warn_routine)(const char *err, va_list params) = warn_builtin; | ||||||
|  |  | ||||||
| void set_usage_routine(void (*routine)(const char *err) NORETURN) | void set_usage_routine(void (*routine)(const char *err) NORETURN) | ||||||
| { | { | ||||||
|  | @ -51,6 +56,11 @@ void set_error_routine(void (*routine)(const char *err, va_list params)) | ||||||
| 	error_routine = routine; | 	error_routine = routine; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void set_warn_routine(void (*routine)(const char *warn, va_list params)) | ||||||
|  | { | ||||||
|  | 	warn_routine = routine; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void usage(const char *err) | void usage(const char *err) | ||||||
| { | { | ||||||
|  | @ -75,3 +85,12 @@ int error(const char *err, ...) | ||||||
| 	va_end(params); | 	va_end(params); | ||||||
| 	return -1; | 	return -1; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void warn(const char *warn, ...) | ||||||
|  | { | ||||||
|  | 	va_list params; | ||||||
|  |  | ||||||
|  | 	va_start(params, warn); | ||||||
|  | 	warn_routine(warn, params); | ||||||
|  | 	va_end(params); | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Shawn O. Pearce
						Shawn O. Pearce