summaryrefslogtreecommitdiff
path: root/fsck-objects.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-04-25 23:37:08 (GMT)
committerJunio C Hamano <junkio@cox.net>2006-04-25 23:37:08 (GMT)
commit53dc3f3e8069283924fcb7f1d538e2d1b03ec3bb (patch)
treeb6d6e597852cbe1fb55e0db9389dfbd70dfb5267 /fsck-objects.c
parentbad68ec92410cf47dd001aa9b95d0f24c5f4bf77 (diff)
downloadgit-53dc3f3e8069283924fcb7f1d538e2d1b03ec3bb.zip
git-53dc3f3e8069283924fcb7f1d538e2d1b03ec3bb.tar.gz
git-53dc3f3e8069283924fcb7f1d538e2d1b03ec3bb.tar.bz2
Teach fsck-objects about cache-tree.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'fsck-objects.c')
-rw-r--r--fsck-objects.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/fsck-objects.c b/fsck-objects.c
index 59b2590..cc09143 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();