fsck: disallow demoting grave fsck errors to warnings
Some kinds of errors are intrinsically unrecoverable (e.g. errors while uncompressing objects). It does not make sense to allow demoting them to mere warnings. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									70a4ae73d8
								
							
						
					
					
						commit
						f50c440730
					
				
							
								
								
									
										13
									
								
								fsck.c
								
								
								
								
							
							
						
						
									
										13
									
								
								fsck.c
								
								
								
								
							|  | @ -9,7 +9,12 @@ | |||
| #include "refs.h" | ||||
| #include "utf8.h" | ||||
|  | ||||
| #define FSCK_FATAL -1 | ||||
|  | ||||
| #define FOREACH_MSG_ID(FUNC) \ | ||||
| 	/* fatal errors */ \ | ||||
| 	FUNC(NUL_IN_HEADER, FATAL) \ | ||||
| 	FUNC(UNTERMINATED_HEADER, FATAL) \ | ||||
| 	/* errors */ \ | ||||
| 	FUNC(BAD_DATE, ERROR) \ | ||||
| 	FUNC(BAD_DATE_OVERFLOW, ERROR) \ | ||||
|  | @ -39,11 +44,9 @@ | |||
| 	FUNC(MISSING_TYPE, ERROR) \ | ||||
| 	FUNC(MISSING_TYPE_ENTRY, ERROR) \ | ||||
| 	FUNC(MULTIPLE_AUTHORS, ERROR) \ | ||||
| 	FUNC(NUL_IN_HEADER, ERROR) \ | ||||
| 	FUNC(TAG_OBJECT_NOT_TAG, ERROR) \ | ||||
| 	FUNC(TREE_NOT_SORTED, ERROR) \ | ||||
| 	FUNC(UNKNOWN_TYPE, ERROR) \ | ||||
| 	FUNC(UNTERMINATED_HEADER, ERROR) \ | ||||
| 	FUNC(ZERO_PADDED_DATE, ERROR) \ | ||||
| 	/* warnings */ \ | ||||
| 	FUNC(BAD_FILEMODE, WARN) \ | ||||
|  | @ -149,6 +152,9 @@ void fsck_set_msg_type(struct fsck_options *options, | |||
| 		die("Unhandled message id: %s", msg_id); | ||||
| 	type = parse_msg_type(msg_type); | ||||
|  | ||||
| 	if (type != FSCK_ERROR && msg_id_info[id].msg_type == FSCK_FATAL) | ||||
| 		die("Cannot demote %s to %s", msg_id, msg_type); | ||||
|  | ||||
| 	if (!options->msg_type) { | ||||
| 		int i; | ||||
| 		int *msg_type = xmalloc(sizeof(int) * FSCK_MSG_MAX); | ||||
|  | @ -216,6 +222,9 @@ static int report(struct fsck_options *options, struct object *object, | |||
| 	struct strbuf sb = STRBUF_INIT; | ||||
| 	int msg_type = fsck_msg_type(id, options), result; | ||||
|  | ||||
| 	if (msg_type == FSCK_FATAL) | ||||
| 		msg_type = FSCK_ERROR; | ||||
|  | ||||
| 	append_msg_id(&sb, msg_id_info[id].id_string); | ||||
|  | ||||
| 	va_start(ap, fmt); | ||||
|  |  | |||
|  | @ -136,4 +136,15 @@ test_expect_success 'push with receive.fsck.missingEmail=warn' ' | |||
| 	grep "missingEmail" act | ||||
| ' | ||||
|  | ||||
| test_expect_success \ | ||||
| 	'receive.fsck.unterminatedHeader=warn triggers error' ' | ||||
| 	rm -rf dst && | ||||
| 	git init dst && | ||||
| 	git --git-dir=dst/.git config receive.fsckobjects true && | ||||
| 	git --git-dir=dst/.git config \ | ||||
| 		receive.fsck.unterminatedheader warn && | ||||
| 	test_must_fail git push --porcelain dst HEAD >act 2>&1 && | ||||
| 	grep "Cannot demote unterminatedheader" act | ||||
| ' | ||||
|  | ||||
| test_done | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Johannes Schindelin
						Johannes Schindelin