summaryrefslogtreecommitdiff
path: root/name-rev.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@osdl.org>2006-06-18 01:26:18 (GMT)
committerJunio C Hamano <junkio@cox.net>2006-06-18 01:49:45 (GMT)
commitd3ff6f55012c939740ce0982b24aeb6fba3c6e4f (patch)
tree3784f041b9ceb25a8092b85f1d86119da7bc5a45 /name-rev.c
parent885a86abe2e9f7b96a4e2012183c6751635840aa (diff)
downloadgit-d3ff6f55012c939740ce0982b24aeb6fba3c6e4f.zip
git-d3ff6f55012c939740ce0982b24aeb6fba3c6e4f.tar.gz
git-d3ff6f55012c939740ce0982b24aeb6fba3c6e4f.tar.bz2
Move "void *util" from "struct object" into "struct commit"
Every single user actually wanted this only for commit objects, and we have no reason to waste space on it for other object types. So just move the structure member from the low-level "struct object" into the "struct commit". This leaves the commit object the same size, and removes one unnecessary pointer from all other object allocations. This shrinks memory usage (still at a fairly hefty half-gig, admittedly) of "git-rev-list --all --objects" on the mozilla repo by another 5% in my tests. Signed-off-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'name-rev.c')
-rw-r--r--name-rev.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/name-rev.c b/name-rev.c
index 1f0135f..c29b93e 100644
--- a/name-rev.c
+++ b/name-rev.c
@@ -19,7 +19,7 @@ static void name_rev(struct commit *commit,
const char *tip_name, int merge_traversals, int generation,
int deref)
{
- struct rev_name *name = (struct rev_name *)commit->object.util;
+ struct rev_name *name = (struct rev_name *)commit->util;
struct commit_list *parents;
int parent_number = 1;
@@ -41,7 +41,7 @@ static void name_rev(struct commit *commit,
if (name == NULL) {
name = xmalloc(sizeof(rev_name));
- commit->object.util = name;
+ commit->util = name;
goto copy_data;
} else if (name->merge_traversals > merge_traversals ||
(name->merge_traversals == merge_traversals &&
@@ -108,7 +108,13 @@ static int name_ref(const char *path, const unsigned char *sha1)
static const char* get_rev_name(struct object *o)
{
static char buffer[1024];
- struct rev_name *n = (struct rev_name *)o->util;
+ struct rev_name *n;
+ struct commit *c;
+
+ if (o->type != TYPE_COMMIT)
+ return "undefined";
+ c = (struct commit *) o;
+ n = c->util;
if (!n)
return "undefined";