Commit cf7850a4f70a1153ed640744750391d99000d546

Vicent Marti 2013-04-03T23:09:54

Duplicated type object

diff --git a/src/cache.h b/src/cache.h
index 3633f62..d57f244 100644
--- a/src/cache.h
+++ b/src/cache.h
@@ -22,9 +22,9 @@ enum {
 
 typedef struct {
 	git_oid oid;
-	int32_t type;
+	int16_t type;
+	uint16_t flags;
 	size_t size;
-	uint32_t flags;
 	git_atomic refcount;
 } git_cached_obj;
 
diff --git a/src/object.c b/src/object.c
index 2667fca..80b765e 100644
--- a/src/object.c
+++ b/src/object.c
@@ -71,8 +71,6 @@ static int create_object(git_object **object_out, git_otype type)
 		return -1;
 	}
 
-	object->type = type;
-
 	*object_out = object;
 	return 0;
 }
@@ -92,17 +90,16 @@ int git_object__from_odb_object(
 		return GIT_ENOTFOUND;
 	}
 
-	type = odb_obj->cached.type;
-
-	if ((error = create_object(&object, type)) < 0)
+	if ((error = create_object(&object, odb_obj->cached.type)) < 0)
 		return error;
 
 	/* Initialize parent object */
 	git_oid_cpy(&object->cached.oid, &odb_obj->cached.oid);
 	object->cached.size = odb_obj->cached.size;
+	object->cached.type = odb_obj->cached.type;
 	object->repo = repo;
 
-	switch (type) {
+	switch (object->cached.type) {
 	case GIT_OBJ_COMMIT:
 		error = git_commit__parse((git_commit *)object, odb_obj);
 		break;
@@ -167,7 +164,7 @@ int git_object_lookup_prefix(
 			if (cached->flags == GIT_CACHE_STORE_PARSED) {
 				object = (git_object *)cached;
 
-				if (type != GIT_OBJ_ANY && type != object->type) {
+				if (type != GIT_OBJ_ANY && type != object->cached.type) {
 					git_object_free(object);
 					giterr_set(GITERR_INVALID,
 						"The requested type does not match the type in ODB");
@@ -231,7 +228,7 @@ void git_object__free(void *_obj)
 
 	assert(object);
 
-	switch (object->type) {
+	switch (object->cached.type) {
 	case GIT_OBJ_COMMIT:
 		git_commit__free((git_commit *)object);
 		break;
@@ -271,7 +268,7 @@ const git_oid *git_object_id(const git_object *obj)
 git_otype git_object_type(const git_object *obj)
 {
 	assert(obj);
-	return obj->type;
+	return obj->cached.type;
 }
 
 git_repository *git_object_owner(const git_object *obj)
diff --git a/src/object.h b/src/object.h
index c1e5059..d187c55 100644
--- a/src/object.h
+++ b/src/object.h
@@ -11,7 +11,6 @@
 struct git_object {
 	git_cached_obj cached;
 	git_repository *repo;
-	git_otype type;
 };
 
 /* fully free the object; internal method, DO NOT EXPORT */