[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