X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=object.c;h=0f70890a4582fec845fb9399b3dc9f388c6538fc;hb=HEAD;hp=4d46e0d5e4285251e60d2a6d938f38355ac5d2c0;hpb=3ffe0c245f290d55b32bed8b4ae04d00983df690;p=git.git diff --git a/object.c b/object.c index 4d46e0d5..0f70890a 100644 --- a/object.c +++ b/object.c @@ -9,7 +9,11 @@ struct object **objs; static int nr_objs; int obj_allocs; -int track_object_refs = 1; +const char *type_names[] = { + "none", "blob", "tree", "commit", "bad" +}; + +int track_object_refs = 0; static int hashtable_index(const unsigned char *sha1) { @@ -50,7 +54,7 @@ void created_object(const unsigned char *sha1, struct object *obj) obj->parsed = 0; memcpy(obj->sha1, sha1, 20); - obj->type = NULL; + obj->type = TYPE_NONE; obj->refs = NULL; obj->used = 0; @@ -179,7 +183,7 @@ struct object *lookup_unknown_object(const unsigned char *sha1) if (!obj) { union any_object *ret = xcalloc(1, sizeof(*ret)); created_object(sha1, &ret->object); - ret->object.type = NULL; + ret->object.type = TYPE_NONE; return &ret->object; } return obj; @@ -200,8 +204,11 @@ struct object *parse_object(const unsigned char *sha1) obj = &blob->object; } else if (!strcmp(type, tree_type)) { struct tree *tree = lookup_tree(sha1); - parse_tree_buffer(tree, buffer, size); obj = &tree->object; + if (!tree->object.parsed) { + parse_tree_buffer(tree, buffer, size); + buffer = NULL; + } } else if (!strcmp(type, commit_type)) { struct commit *commit = lookup_commit(sha1); parse_commit_buffer(commit, buffer, size);