Teach fsck-cache to accept non-commits for reachability analysis.
[gitweb.git] / fsck-cache.c
index 637aededbdc0a321519ecdaeeb6da61ce71319d5..e328cec75d96788622406e6394a67e7a0a96ce7c 100644 (file)
@@ -133,14 +133,17 @@ static int fsck_commit(struct commit *commit)
 
 static int fsck_tag(struct tag *tag)
 {
+       struct object *tagged = tag->tagged;
+
+       if (!tagged) {
+               printf("bad object in tag %s\n", sha1_to_hex(tag->object.sha1));
+               return -1;
+       }
        if (!show_tags)
                return 0;
 
-       printf("tagged %s %s",
-              tag->tagged->type,
-              sha1_to_hex(tag->tagged->sha1));
-       printf(" (%s) in %s\n",
-              tag->tag, sha1_to_hex(tag->object.sha1));
+       printf("tagged %s %s", tagged->type, sha1_to_hex(tagged->sha1));
+       printf(" (%s) in %s\n", tag->tag, sha1_to_hex(tag->object.sha1));
        return 0;
 }
 
@@ -292,14 +295,12 @@ int main(int argc, char **argv)
                        continue;
 
                if (!get_sha1(arg, head_sha1)) {
-                       struct commit *commit = lookup_commit(head_sha1);
-                       struct object *obj;
+                       struct object *obj = lookup_object(head_sha1);
 
-                       /* Error is printed by lookup_commit(). */
-                       if (!commit)
+                       /* Error is printed by lookup_object(). */
+                       if (!obj)
                                continue;
 
-                       obj = &commit->object;
                        obj->used = 1;
                        mark_reachable(obj, REACHABLE);
                        heads++;