[PATCH 4 of 4] revlog: separate methods for deltas and key frames compression/decompression
Wojciech Lopata
lopek at fb.com
Thu Sep 26 13:14:45 CDT 2013
# HG changeset patch
# User Wojciech Lopata <lopek at fb.com>
# Date 1380212200 25200
# Thu Sep 26 09:16:40 2013 -0700
# Node ID b7528dd2041110229810e71245eefa4d70aca648
# Parent 16ba1a7b494caeb45d24ca81d49bbc866af1e7c5
revlog: separate methods for deltas and key frames compression/decompression
This change makes possible:
1) to use different compression methods in various revlog subclasses
2) to use different compression methods for key frames and deltas
diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -881,11 +881,23 @@
length = end - start
return self._getchunk(start, length)
+ def compressdelta(self, delta):
+ return compress(delta)
+
+ def compresskeyframe(self, text):
+ return compress(text)
+
+ def decompressdelta(self, bin):
+ return decompress(bin)
+
+ def decompresskeyframe(self, bin):
+ return decompress(bin)
+
def _deltachunk(self, rev):
- return decompress(self._chunkraw(rev, rev))
+ return self.decompressdelta(self._chunkraw(rev, rev))
def _keyframechunk(self, rev):
- return decompress(self._chunkraw(rev, rev))
+ return self.decompresskeyframe(self._chunkraw(rev, rev))
def _deltachunks(self, revs):
'''faster version of [self._deltachunk(rev) for rev in revs]
@@ -906,6 +918,7 @@
self._chunkraw(revs[0], revs[-1])
offset, data = self._chunkcache
+ decompress = self.decompressdelta
for rev in revs:
chunkstart = start(rev)
if inline:
@@ -1112,7 +1125,7 @@
t = buildtext()
ptext = self.revision(self.node(rev))
delta = mdiff.textdiff(ptext, t)
- data = compress(delta)
+ data = self.compressdelta(delta)
l = len(data[1]) + len(data[0])
if basecache[0] == rev:
chainbase = basecache[1]
@@ -1158,7 +1171,7 @@
textlen = len(text)
if d is None or dist > textlen * 2:
text = buildtext()
- data = compress(text)
+ data = self.compresskeyframe(text)
l = len(data[1]) + len(data[0])
base = chainbase = curr
More information about the Mercurial-devel
mailing list