projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Shrink "struct object" a bit
[git.git]
/
object.c
diff --git
a/object.c
b/object.c
index
4d46e0d
..
0f70890
100644
(file)
--- a/
object.c
+++ b/
object.c
@@
-9,7
+9,11
@@
struct object **objs;
static int nr_objs;
int obj_allocs;
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)
{
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->parsed = 0;
memcpy(obj->sha1, sha1, 20);
- obj->type =
NULL
;
+ obj->type =
TYPE_NONE
;
obj->refs = NULL;
obj->used = 0;
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);
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;
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);
obj = &blob->object;
} else if (!strcmp(type, tree_type)) {
struct tree *tree = lookup_tree(sha1);
- parse_tree_buffer(tree, buffer, size);
obj = &tree->object;
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);
} else if (!strcmp(type, commit_type)) {
struct commit *commit = lookup_commit(sha1);
parse_commit_buffer(commit, buffer, size);