Linus Torvalds <torvalds@xxxxxxxx> writes: > On Fri, 1 Sep 2006, Junio C Hamano wrote: >> >> But "git repack -a -d", which you now consider almost being >> free, in the recent kernel repository counts 300k objects, and >> reuses 298k objects or so. That means we expand and recompress >> that many objects, totalling 120MB. > > Sure. Do we have data for how expensive that is (ie did you apply the > patch and time it)? Quite bad. For the kernel archive of today (I usually am nearly fully packed): $ /usr/bin/time ~/git-master/bin/git-pack-objects p1 </var/tmp/1 Generating pack... Done counting 301361 objects. Deltifying 301361 objects. 100% (301361/301361) done Writing 301361 objects. 100% (301361/301361) done a13dc6646622537d29af92b4cfc6d49b82e77e49 Total 301361, written 301361 (delta 238935), reused 300995 (delta 238663) 3.58user 0.84system 0:04.44elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+62727minor)pagefaults 0swaps $ /usr/bin/time ../git.junio/git-pack-objects p2 </var/tmp/1 Generating pack... Done counting 301361 objects. Deltifying 301361 objects. 100% (301361/301361) done Writing 301361 objects. 100% (301361/301361) done a13dc6646622537d29af92b4cfc6d49b82e77e49 Total 301361, written 301361 (delta 238935), reused 300995 (delta 238663) 57.84user 3.39system 1:01.36elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+1022768minor)pagefaults 0swaps By the way, the one in "next" has a thinko I just noticed. -- >8 -- [PATCH] pack-objects: fix thinko in revalidate code When revalidating an entry from an existing pack entry->size and entry->type are not necessarily the size of the final object when the entry is deltified, but for base objects they must match. Signed-off-by: Junio C Hamano <junkio@xxxxxxx> --- builtin-pack-objects.c | 13 +++++++------ 1 files changed, 7 insertions(+), 6 deletions(-) diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c index 11cc3c8..5e42387 100644 --- a/builtin-pack-objects.c +++ b/builtin-pack-objects.c @@ -247,12 +247,13 @@ static int revalidate_one(struct object_ void *data, char *type, unsigned long size) { int err; - if (!data) - return -1; - if (size != entry->size) - return -1; - err = check_sha1_signature(entry->sha1, data, size, - type_names[entry->type]); + if ((!data) || + ((entry->type != OBJ_DELTA) && + ( (size != entry->size) || + strcmp(type_names[entry->type], type)))) + err = -1; + else + err = check_sha1_signature(entry->sha1, data, size, type); free(data); return err; } -- 1.4.2.g99d7d -- VGER BF report: U 0.528006 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html