X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=object.c;h=0f70890a4582fec845fb9399b3dc9f388c6538fc;hb=885a86abe2e9f7b96a4e2012183c6751635840aa;hp=b5c0ecf2b72bd520ee88b790aa424588178d02d3;hpb=8e4402592574d630cdb5ab4f55a1b7131802ff72;p=git.git diff --git a/object.c b/object.c index b5c0ecf2..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; @@ -85,8 +89,7 @@ struct object_refs *alloc_object_refs(unsigned count) struct object_refs *refs; size_t size = sizeof(*refs) + count*sizeof(struct object *); - refs = xmalloc(size); - memset(refs, 0, size); + refs = xcalloc(1, size); refs->count = count; return refs; } @@ -178,10 +181,9 @@ struct object *lookup_unknown_object(const unsigned char *sha1) { struct object *obj = lookup_object(sha1); if (!obj) { - union any_object *ret = xmalloc(sizeof(*ret)); - memset(ret, 0, sizeof(*ret)); + 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; @@ -202,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);