[PATCH 4 of 4 RFC] revlog: support for compressing single revisions reusing zlib stream
Wagner Bruna
wagner.bruna+mercurial at gmail.com
Mon Feb 8 17:20:51 CST 2010
# HG changeset patch
# User Wagner Bruna <wbruna at softwareexpress.com.br>
# Date 1265662433 7200
# Node ID 6740ac498dfe2f950ae5b1c8ed510827ce5ff47a
# Parent 7d83e89bc4d623bc7fa6fe362d7f93e7d355df60
revlog: support for compressing single revisions reusing zlib stream
diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -444,6 +444,7 @@
self._chunkcache = (0, '')
# base, rev, compression object, decompressed data
self._chunkdecompr = [-1, None, None, '']
+ self._chunkcompr = [-1, None, None]
self.nodemap = {nullid: nullrev}
self.index = []
@@ -1127,14 +1128,19 @@
if not d:
ptext = self.revision(self.node(prev))
d = mdiff.textdiff(ptext, text)
- data = compress(d)
+ if self._chunkcompr[:2] == [base, prev]:
+ self._chunkcompr[1] = curr
+ data = compress(d, self._chunkcompr[2])
+ else:
+ data = compress(d)
l = len(data[1]) + len(data[0])
dist = l + offset - self.start(base)
# full versions are inserted when the needed deltas
# become comparable to the uncompressed text
if not curr or dist > len(text) * 2:
- data = compress(text)
+ self._chunkcompr = [curr, curr, zlib.compressobj()]
+ data = compress(text, self._chunkcompr[2])
l = len(data[1]) + len(data[0])
base = curr
More information about the Mercurial-devel
mailing list