X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=object.c;h=9adc87479bde2a0b2a0a0335aed12a9f485facff;hb=ce0bd64299ae148ef61a63edcac635de41254cb5;hp=c9ca481498281adab056a364a3854180456f20f3;hpb=ee072260dbff6914c24d956bcc2d46882831f1a0;p=git.git diff --git a/object.c b/object.c index c9ca4814..9adc8747 100644 --- a/object.c +++ b/object.c @@ -9,7 +9,7 @@ struct object **objs; static int nr_objs; int obj_allocs; -int track_object_refs = 1; +int track_object_refs = 0; static int hashtable_index(const unsigned char *sha1) { @@ -85,8 +85,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,8 +177,7 @@ 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; return &ret->object; @@ -196,15 +194,18 @@ struct object *parse_object(const unsigned char *sha1) struct object *obj; if (check_sha1_signature(sha1, buffer, size, type) < 0) printf("sha1 mismatch %s\n", sha1_to_hex(sha1)); - if (!strcmp(type, "blob")) { + if (!strcmp(type, blob_type)) { struct blob *blob = lookup_blob(sha1); parse_blob_buffer(blob, buffer, size); obj = &blob->object; - } else if (!strcmp(type, "tree")) { + } else if (!strcmp(type, tree_type)) { struct tree *tree = lookup_tree(sha1); - parse_tree_buffer(tree, buffer, size); obj = &tree->object; - } else if (!strcmp(type, "commit")) { + 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); if (!commit->buffer) { @@ -212,7 +213,7 @@ struct object *parse_object(const unsigned char *sha1) buffer = NULL; } obj = &commit->object; - } else if (!strcmp(type, "tag")) { + } else if (!strcmp(type, tag_type)) { struct tag *tag = lookup_tag(sha1); parse_tag_buffer(tag, buffer, size); obj = &tag->object;