summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 9d1b1b5)
raw | patch | inline | side by side (parent: 9d1b1b5)
author | Shawn O. Pearce <spearce@spearce.org> | |
Tue, 16 Jan 2007 04:40:27 +0000 (23:40 -0500) | ||
committer | Shawn O. Pearce <spearce@spearce.org> | |
Tue, 16 Jan 2007 04:40:27 +0000 (23:40 -0500) |
If we previously were using a delta but we needed to checkpoint the
current packfile and switch to a new packfile we need to throw away
the delta and compress the raw object by itself, as delta chains
cannot span non-thin packfiles. Unfortunately the output buffer
in this case needs to grow, as the size of the compressed object
may be quite a bit larger than the size of the compressed delta.
I've also avoided recompressing the object if we are checkpointing
and we didn't use a delta. In this case the output buffer is the
correct size and has already been populated with the right data,
we just need to close out the current packfile and open a new one.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
current packfile and switch to a new packfile we need to throw away
the delta and compress the raw object by itself, as delta chains
cannot span non-thin packfiles. Unfortunately the output buffer
in this case needs to grow, as the size of the compressed object
may be quite a bit larger than the size of the compressed delta.
I've also avoided recompressing the object if we are checkpointing
and we didn't use a delta. In this case the output buffer is the
correct size and has already been populated with the right data,
we just need to close out the current packfile and open a new one.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
fast-import.c | patch | blob | history |
diff --git a/fast-import.c b/fast-import.c
index 19d01e20adda0ab0f614fca763dfd1d479255535..57d857c386c9c1a34030d10e7a4bef19722413c6 100644 (file)
--- a/fast-import.c
+++ b/fast-import.c
if (delta) {
free(delta);
delta = NULL;
+
+ memset(&s, 0, sizeof(s));
+ deflateInit(&s, zlib_compression_level);
+ s.next_in = dat;
+ s.avail_in = datlen;
+ s.avail_out = deflateBound(&s, s.avail_in);
+ s.next_out = out = xrealloc(out, s.avail_out);
+ while (deflate(&s, Z_FINISH) == Z_OK)
+ /* nothing */;
+ deflateEnd(&s);
}
- memset(&s, 0, sizeof(s));
- deflateInit(&s, zlib_compression_level);
- s.next_in = dat;
- s.avail_in = datlen;
- s.avail_out = deflateBound(&s, s.avail_in);
- s.next_out = out;
- while (deflate(&s, Z_FINISH) == Z_OK)
- /* nothing */;
- deflateEnd(&s);
}
e->type = type;