X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=fsck-objects.c;h=ec99a7a6cbed9efeeb6e745a6a288817878b7856;hb=097dc3d8c32f4b85bf9701d5e1de98999ac25c1c;hp=59b25904cb0f6e87594e2bad20db3ee2aa726aef;hpb=64ecb6247f89783a53297436fa452478a83bda53;p=git.git diff --git a/fsck-objects.c b/fsck-objects.c index 59b25904..ec99a7a6 100644 --- a/fsck-objects.c +++ b/fsck-objects.c @@ -10,6 +10,7 @@ #include "pack.h" #define REACHABLE 0x0001 +#define SEEN 0x0002 static int show_root = 0; static int show_tags = 0; @@ -160,7 +161,7 @@ static int fsck_tree(struct tree *item) struct tree_entry_list *entry, *last; last = NULL; - for (entry = item->entries; entry; entry = entry->next) { + for (entry = create_tree_entry_list(item); entry; entry = entry->next) { if (strchr(entry->name, '/')) has_full_path = 1; has_zero_pad |= entry->zeropad; @@ -197,17 +198,15 @@ static int fsck_tree(struct tree *item) default: break; } - free(last->name); free(last); } last = entry; } - if (last) { - free(last->name); + if (last) free(last); - } - item->entries = NULL; + free(item->buffer); + item->buffer = NULL; retval = 0; if (has_full_path) { @@ -277,6 +276,9 @@ static int fsck_sha1(unsigned char *sha1) struct object *obj = parse_object(sha1); if (!obj) return error("%s: object not found", sha1_to_hex(sha1)); + if (obj->flags & SEEN) + return 0; + obj->flags |= SEEN; if (obj->type == blob_type) return 0; if (obj->type == tree_type) @@ -442,6 +444,7 @@ int main(int argc, char **argv) { int i, heads; + track_object_refs = 1; setup_git_directory(); for (i = 1; i < argc; i++) {