Add the git-*-script files to the install
[git.git] / fsck-cache.c
index 985adb6..27c9ccd 100644 (file)
@@ -57,6 +57,8 @@ static int fsck_commit(unsigned char *sha1, void *data, unsigned long size)
                return -1;
        if (!commit->parents)
                printf("root %s\n", sha1_to_hex(sha1));
+       if (!commit->date)
+               printf("bad commit date in %s\n", sha1_to_hex(sha1));
        return 0;
 }
 
@@ -67,6 +69,45 @@ static int fsck_blob(unsigned char *sha1, void *data, unsigned long size)
        return 0;
 }
 
+static int fsck_tag(unsigned char *sha1, void *data, unsigned long size)
+{
+       int typelen, taglen;
+       unsigned char object[20];
+       char object_hex[60];
+       const char *type_line, *tag_line, *sig_line;
+
+       if (size < 64)
+               return -1;
+       if (memcmp("object ", data, 7) || get_sha1_hex(data + 7, object))
+               return -1;
+
+       type_line = data + 48;
+       if (memcmp("\ntype ", type_line-1, 6))
+               return -1;
+
+       tag_line = strchr(type_line, '\n');
+       if (!tag_line || memcmp("tag ", ++tag_line, 4))
+               return -1;
+
+       sig_line = strchr(tag_line, '\n');
+       if (!sig_line)
+               return -1;
+       sig_line++;
+
+       typelen = tag_line - type_line - strlen("type \n");
+       if (typelen >= 20)
+               return -1;
+       taglen = sig_line - tag_line - strlen("tag \n");
+
+       strcpy(object_hex, sha1_to_hex(object));
+       printf("tagged %.*s %s (%.*s) in %s\n",
+               typelen, type_line + 5,
+               object_hex,
+               taglen, tag_line + 4,
+               sha1_to_hex(sha1));
+       return 0;
+}
+
 static int fsck_entry(unsigned char *sha1, char *tag, void *data, 
                      unsigned long size)
 {
@@ -79,6 +120,9 @@ static int fsck_entry(unsigned char *sha1, char *tag, void *data,
        } else if (!strcmp(tag, "commit")) {
                if (fsck_commit(sha1, data, size) < 0)
                        return -1;
+       } else if (!strcmp(tag, "tag")) {
+               if (fsck_tag(sha1, data, size) < 0)
+                       return -1;
        } else
                return -1;
        return 0;