From: Dana How Date: Tue, 01 May 2007 06:05:31 GMT Subject: Re: [PATCH 7/8] git-repack --max-pack-size: split packs as asked by write_object/write_one Message-ID: <56b7f5510704302305s5cf0d0cbg52906e400bcc4a22@mail.gmail.com> In-Reply-To: <20070501054034.GB5942@spearce.org> On 4/30/07, Shawn O. Pearce wrote: > Dana How wrote: > > Rewrite write_pack_file() to break to a new packfile > > whenever write_object/write_one request it, and > > correct the header's object count in the previous packfile. > > Change write_index_file() to write an index > > for just the objects in the most recent packfile. > ... > > diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c > ... > > + hdr.hdr_signature = htonl(PACK_SIGNATURE); > > + hdr.hdr_version = htonl(PACK_VERSION); > > + hdr.hdr_entries = htonl(nr_result); > > What about keeping track of how many objects in nr_result that > have been written already in the prior iteration of this do{} > while loop and using that to set hdr_entries? This way if you are > splitting into multiple packfiles the last packfile won't need to > do a header/footer fixup. Cool -- I had the same thought (late), but figured I would address it in a follow-on. I was thinking of adding nr_left, which would be initialized from nr_result, and have nr_written repeatedly subtracted. nr_result in your quote would change to nr_left (also later, where we decide whether or not to fix up the header). Thanks, -- Dana L. How danahow@gmail.com +1 650 804 5991 cell