On 2008.07.23 14:09:40 +0100, Johannes Schindelin wrote: > Hi, > > On Wed, 23 Jul 2008, Björn Steinbrink wrote: > > > On 2008.07.23 14:11:18 +0200, Pierre Habouzit wrote: > > > It may belong to something (stdin) that is consumed. > > > > Probably thanks to me, babbling about stdin without having a clue what > > I'm talking about, that rationale is wrong. > > > > We may not prune base_cache since that object might come from a > > different pack than the one that we are processing. In such a case, we > > would try to restore the data for that object from the pack we're > > processing and fail miserably. > > Then the proper fix would be to load the object from that pack again. Actually, my analysis was total bullshit. Right after reading the object from the foreign pack, we also call append_obj_to_pack, so we are actually able to reread that object just fine. The real issue seems to be that we just forget to initialize some fields. This patch fixes the issue for me, but I guess it's not quite the right way to do it, pure guesswork. Björn --- diff --git a/index-pack.c b/index-pack.c index ac20a46..33ba8ef 100644 --- a/index-pack.c +++ b/index-pack.c @@ -699,6 +699,9 @@ static struct object_entry *append_obj_to_pack( write_or_die(output_fd, header, n); obj[0].idx.crc32 = crc32(0, Z_NULL, 0); obj[0].idx.crc32 = crc32(obj[0].idx.crc32, header, n); + obj[0].hdr_size = n; + obj[0].type = type; + obj[0].size = size; obj[1].idx.offset = obj[0].idx.offset + n; obj[1].idx.offset += write_compressed(output_fd, buf, size, &obj[0].idx.crc32); hashcpy(obj->idx.sha1, sha1); -- 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