Re: [PATCH] pack-objects: re-validate data we copy from elsewhere.
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:42:39
Linus Torvalds [off-list ref] writes:
On Fri, 1 Sep 2006, Junio C Hamano wrote:quoted
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 <redacted> --- 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