fsck: allow upgrading fsck warnings to errors
The 'invalid tag name' and 'missing tagger entry' warnings can now be upgraded to errors by specifying `invalidTagName` and `missingTaggerEntry` in the receive.fsck.<msg-id> config setting. Incidentally, the missing tagger warning is now really shown as a warning (as opposed to being reported with the "error:" prefix, as it used to be the case before this commit). Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									efaba7cc77
								
							
						
					
					
						commit
						f27d05b170
					
				
							
								
								
									
										24
									
								
								fsck.c
								
								
								
								
							
							
						
						
									
										24
									
								
								fsck.c
								
								
								
								
							|  | @ -10,6 +10,7 @@ | |||
| #include "utf8.h" | ||||
|  | ||||
| #define FSCK_FATAL -1 | ||||
| #define FSCK_INFO -2 | ||||
|  | ||||
| #define FOREACH_MSG_ID(FUNC) \ | ||||
| 	/* fatal errors */ \ | ||||
|  | @ -50,15 +51,16 @@ | |||
| 	FUNC(ZERO_PADDED_DATE, ERROR) \ | ||||
| 	/* warnings */ \ | ||||
| 	FUNC(BAD_FILEMODE, WARN) \ | ||||
| 	FUNC(BAD_TAG_NAME, WARN) \ | ||||
| 	FUNC(EMPTY_NAME, WARN) \ | ||||
| 	FUNC(FULL_PATHNAME, WARN) \ | ||||
| 	FUNC(HAS_DOT, WARN) \ | ||||
| 	FUNC(HAS_DOTDOT, WARN) \ | ||||
| 	FUNC(HAS_DOTGIT, WARN) \ | ||||
| 	FUNC(MISSING_TAGGER_ENTRY, WARN) \ | ||||
| 	FUNC(NULL_SHA1, WARN) \ | ||||
| 	FUNC(ZERO_PADDED_FILEMODE, WARN) | ||||
| 	FUNC(ZERO_PADDED_FILEMODE, WARN) \ | ||||
| 	/* infos (reported as warnings, but ignored by default) */ \ | ||||
| 	FUNC(BAD_TAG_NAME, INFO) \ | ||||
| 	FUNC(MISSING_TAGGER_ENTRY, INFO) | ||||
|  | ||||
| #define MSG_ID(id, msg_type) FSCK_MSG_##id, | ||||
| enum fsck_msg_id { | ||||
|  | @ -229,6 +231,8 @@ static int report(struct fsck_options *options, struct object *object, | |||
|  | ||||
| 	if (msg_type == FSCK_FATAL) | ||||
| 		msg_type = FSCK_ERROR; | ||||
| 	else if (msg_type == FSCK_INFO) | ||||
| 		msg_type = FSCK_WARN; | ||||
|  | ||||
| 	append_msg_id(&sb, msg_id_info[id].id_string); | ||||
|  | ||||
|  | @ -687,15 +691,21 @@ static int fsck_tag_buffer(struct tag *tag, const char *data, | |||
| 		goto done; | ||||
| 	} | ||||
| 	strbuf_addf(&sb, "refs/tags/%.*s", (int)(eol - buffer), buffer); | ||||
| 	if (check_refname_format(sb.buf, 0)) | ||||
| 		report(options, &tag->object, FSCK_MSG_BAD_TAG_NAME, | ||||
| 	if (check_refname_format(sb.buf, 0)) { | ||||
| 		ret = report(options, &tag->object, FSCK_MSG_BAD_TAG_NAME, | ||||
| 			   "invalid 'tag' name: %.*s", | ||||
| 			   (int)(eol - buffer), buffer); | ||||
| 		if (ret) | ||||
| 			goto done; | ||||
| 	} | ||||
| 	buffer = eol + 1; | ||||
|  | ||||
| 	if (!skip_prefix(buffer, "tagger ", &buffer)) | ||||
| 	if (!skip_prefix(buffer, "tagger ", &buffer)) { | ||||
| 		/* early tags do not contain 'tagger' lines; warn only */ | ||||
| 		report(options, &tag->object, FSCK_MSG_MISSING_TAGGER_ENTRY, "invalid format - expected 'tagger' line"); | ||||
| 		ret = report(options, &tag->object, FSCK_MSG_MISSING_TAGGER_ENTRY, "invalid format - expected 'tagger' line"); | ||||
| 		if (ret) | ||||
| 			goto done; | ||||
| 	} | ||||
| 	else | ||||
| 		ret = fsck_ident(&buffer, &tag->object, options); | ||||
|  | ||||
|  |  | |||
|  | @ -259,7 +259,7 @@ EOF | |||
|     thirtyeight=${tag#??} && | ||||
|     rm -f .git/objects/${tag%$thirtyeight}/$thirtyeight && | ||||
|     git index-pack --strict tag-test-${pack1}.pack 2>err && | ||||
|     grep "^error:.* expected .tagger. line" err | ||||
|     grep "^warning:.* expected .tagger. line" err | ||||
| ' | ||||
|  | ||||
| test_done | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Johannes Schindelin
						Johannes Schindelin