fsck: report the ID of the error/warning
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Mon, 22 Jun 2015 15:25:52 +0000 (17:25 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 23 Jun 2015 21:27:35 +0000 (14:27 -0700)
Some repositories written by legacy code have objects with non-fatal
fsck issues. To allow the user to ignore those issues, let's print
out the ID (e.g. when encountering "missingEmail", the user might
want to call `git config --add receive.fsck.missingEmail=warn`).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
fsck.c
t/t1450-fsck.sh
diff --git a/fsck.c b/fsck.c
index e6e8dc4c987ba199eef4d605da360a6d07383c00..4748f1e23aacfcce03ca3b3aa5b511027a4bd505 100644 (file)
--- a/fsck.c
+++ b/fsck.c
@@ -189,6 +189,24 @@ void fsck_set_msg_types(struct fsck_options *options, const char *values)
        free(to_free);
 }
 
+static void append_msg_id(struct strbuf *sb, const char *msg_id)
+{
+       for (;;) {
+               char c = *(msg_id)++;
+
+               if (!c)
+                       break;
+               if (c != '_')
+                       strbuf_addch(sb, tolower(c));
+               else {
+                       assert(*msg_id);
+                       strbuf_addch(sb, *(msg_id)++);
+               }
+       }
+
+       strbuf_addstr(sb, ": ");
+}
+
 __attribute__((format (printf, 4, 5)))
 static int report(struct fsck_options *options, struct object *object,
        enum fsck_msg_id id, const char *fmt, ...)
@@ -197,6 +215,8 @@ static int report(struct fsck_options *options, struct object *object,
        struct strbuf sb = STRBUF_INIT;
        int msg_type = fsck_msg_type(id, options), result;
 
+       append_msg_id(&sb, msg_id_info[id].id_string);
+
        va_start(ap, fmt);
        strbuf_vaddf(&sb, fmt, ap);
        result = options->error_func(object, msg_type, sb.buf);
index cfb32b62420dc162e79aaea29a36f7d78f3353f5..7c5b3d5185a07a78b985a420bc5a72af63f81da7 100755 (executable)
@@ -231,8 +231,8 @@ test_expect_success 'tag with incorrect tag name & missing tagger' '
        git fsck --tags 2>out &&
 
        cat >expect <<-EOF &&
-       warning in tag $tag: invalid '\''tag'\'' name: wrong name format
-       warning in tag $tag: invalid format - expected '\''tagger'\'' line
+       warning in tag $tag: badTagName: invalid '\''tag'\'' name: wrong name format
+       warning in tag $tag: missingTaggerEntry: invalid format - expected '\''tagger'\'' line
        EOF
        test_cmp expect out
 '