diff -r f70ca39d0ab8 -r c6844912c327 mercurial/revlogutils/deltas.py --- a/mercurial/revlogutils/deltas.py Thu Jun 10 00:16:54 2021 +0200 +++ b/mercurial/revlogutils/deltas.py Mon Jun 21 15:00:53 2021 +0200 @@ -18,6 +18,9 @@ from ..pycompat import getattr from .constants import ( + COMP_MODE_DEFAULT, + COMP_MODE_INLINE, + COMP_MODE_PLAIN, REVIDX_ISCENSORED, REVIDX_RAWTEXT_CHANGING_FLAGS, ) @@ -1113,3 +1116,28 @@ if deltainfo is None: deltainfo = self._fullsnapshotinfo(fh, revinfo) return deltainfo + + +def delta_compression(default_compression_header, deltainfo): + """return (COMPRESSION_MODE, deltainfo) + + used by revlog v2+ format to dispatch between PLAIN and DEFAULT + compression. + """ + h, d = deltainfo.data + compression_mode = COMP_MODE_INLINE + if not h and not d: + # not data to store at all... declare them uncompressed + compression_mode = COMP_MODE_PLAIN + elif not h: + t = d[0:1] + if t == b'\0': + compression_mode = COMP_MODE_PLAIN + elif t == default_compression_header: + compression_mode = COMP_MODE_DEFAULT + elif h == b'u': + # we have a more efficient way to declare uncompressed + h = b'' + compression_mode = COMP_MODE_PLAIN + deltainfo = drop_u_compression(deltainfo) + return compression_mode, deltainfo