Teach fsck-cache to accept non-commits for reachability analysis.
authorLinus Torvalds <torvalds@ppc970.osdl.org>
Thu, 5 May 2005 00:03:09 +0000 (17:03 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Thu, 5 May 2005 00:03:09 +0000 (17:03 -0700)
In particular, teach it about tags. Also, to make reachability actually
work for tags, we need to add the ref to the tagged object.

fsck-cache.c
tag.c

index fb0d82f..e328cec 100644 (file)
@@ -295,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++;
diff --git a/tag.c b/tag.c
index 9eade75..3a71dd4 100644 (file)
--- a/tag.c
+++ b/tag.c
@@ -49,6 +49,8 @@ int parse_tag(struct tag *item)
                goto err;
 
        item->tagged = parse_object(object);
+       if (item->tagged)
+               add_ref(&item->object, item->tagged);
 
        type_line = data + 48;
        if (memcmp("\ntype ", type_line-1, 6))