[PATCH 4 of 4] revlog: separate methods for deltas and key frames compression/decompression

Wojciech Lopata lopek at fb.com
Thu Sep 26 15:17:21 CDT 2013


Siddharth noticed this series is not only going to break the lz4revlog extension, but will also make it pretty difficult to fix.

Let me modify it and resend soon. 

> -----Original Message-----
> From: mercurial-devel-bounces at selenic.com [mailto:mercurial-devel-
> bounces at selenic.com] On Behalf Of Wojciech Lopata
> Sent: Thursday, September 26, 2013 11:15 AM
> To: mercurial-devel at selenic.com
> Subject: [PATCH 4 of 4] revlog: separate methods for deltas and key frames
> compression/decompression
> 
> # 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
> 
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list