From 53dc3f3e8069283924fcb7f1d538e2d1b03ec3bb Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Tue, 25 Apr 2006 16:37:08 -0700 Subject: Teach fsck-objects about cache-tree. Signed-off-by: Junio C Hamano --- fsck-objects.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'fsck-objects.c') diff --git a/fsck-objects.c b/fsck-objects.c index 59b25904cb..cc09143a92 100644 --- a/fsck-objects.c +++ b/fsck-objects.c @@ -8,6 +8,7 @@ #include "tag.h" #include "refs.h" #include "pack.h" +#include "cache-tree.h" #define REACHABLE 0x0001 @@ -438,6 +439,21 @@ static int fsck_head_link(void) return 0; } +static int fsck_cache_tree(struct cache_tree *it) +{ + int i; + int err = 0; + + if (0 <= it->entry_count) { + struct object *obj = parse_object(it->sha1); + if (obj->type != tree_type) + err |= objerror(obj, "non-tree in cache-tree"); + } + for (i = 0; i < it->subtree_nr; i++) + err |= fsck_cache_tree(it->down[i]->cache_tree); + return err; +} + int main(int argc, char **argv) { int i, heads; @@ -547,6 +563,8 @@ int main(int argc, char **argv) obj->used = 1; mark_reachable(obj, REACHABLE); } + if (active_cache_tree) + fsck_cache_tree(active_cache_tree); } check_connectivity(); -- cgit v1.2.1 From cdc08b33ef3da0e963f9956e4a66f67cc3330f83 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Mon, 1 May 2006 22:15:54 -0700 Subject: fsck-objects: mark objects reachable from cache-tree When fsck-objects scanned cache-tree, it forgot to mark the trees it found reachable and in use. Signed-off-by: Junio C Hamano --- fsck-objects.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'fsck-objects.c') diff --git a/fsck-objects.c b/fsck-objects.c index cc09143a92..98421aab30 100644 --- a/fsck-objects.c +++ b/fsck-objects.c @@ -446,6 +446,8 @@ static int fsck_cache_tree(struct cache_tree *it) if (0 <= it->entry_count) { struct object *obj = parse_object(it->sha1); + mark_reachable(obj, REACHABLE); + obj->used = 1; if (obj->type != tree_type) err |= objerror(obj, "non-tree in cache-tree"); } -- cgit v1.2.1 From 6d60bbefdc2a42614069024b0a38db8c2de33967 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Wed, 3 May 2006 21:17:45 -0700 Subject: fsck-objects: do not segfault on missing tree in cache-tree Even if trees are missing in cache-tree, we should continue and check the rest of the object database. Signed-off-by: Junio C Hamano --- fsck-objects.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'fsck-objects.c') diff --git a/fsck-objects.c b/fsck-objects.c index 98421aab30..1922b6d84c 100644 --- a/fsck-objects.c +++ b/fsck-objects.c @@ -446,6 +446,11 @@ static int fsck_cache_tree(struct cache_tree *it) if (0 <= it->entry_count) { struct object *obj = parse_object(it->sha1); + if (!obj) { + error("%s: invalid sha1 pointer in cache-tree", + sha1_to_hex(it->sha1)); + return 1; + } mark_reachable(obj, REACHABLE); obj->used = 1; if (obj->type != tree_type) -- cgit v1.2.1