view hgext/remotefilelog/lz4wrapper.py @ 40495:3a333a582d7b

remotefilelog: import pruned-down remotefilelog extension from hg-experimental This is remotefilelog as of my recent patches for compatibility with current tip of hg, minus support for old versions of Mercurial and some FB-specific features like their treemanifest extension and fetching linkrev data from a patched phabricator. The file extutil.py moved from hgext3rd to remotefilelog. This is not yet ready to be landed, consider it a preview for now. Planned changes include: * replace lz4 with zstd * rename some capabilities, requirements and wireproto commands to mark them as experimental * consolidate bits of shallowutil with related functions (eg readfile) I'm certainly open to other (small) changes, but my rough mission is to land this largely as-is so we can use it as a model of the functionality we need going forward for lazy-fetching of file contents from a server. # no-check-commit because of a few foo_bar functions Differential Revision: https://phab.mercurial-scm.org/D4782
author Augie Fackler <augie@google.com>
date Thu, 27 Sep 2018 13:03:19 -0400
parents
children
line wrap: on
line source

from __future__ import absolute_import

from mercurial.i18n import _
from mercurial import (
    demandimport,
    error,
    util,
)
if util.safehasattr(demandimport, 'IGNORES'):
    # Since 670eb4fa1b86
    demandimport.IGNORES.update(['pkgutil', 'pkg_resources', '__main__'])
else:
    demandimport.ignore.extend(['pkgutil', 'pkg_resources', '__main__'])

def missing(*args, **kwargs):
    raise error.Abort(_('remotefilelog extension requires lz4 support'))

lz4compress = lzcompresshc = lz4decompress = missing

with demandimport.deactivated():
    import lz4

    try:
        # newer python-lz4 has these functions deprecated as top-level ones,
        # so we are trying to import from lz4.block first
        def _compressHC(*args, **kwargs):
            return lz4.block.compress(*args, mode='high_compression', **kwargs)
        lzcompresshc = _compressHC
        lz4compress = lz4.block.compress
        lz4decompress = lz4.block.decompress
    except AttributeError:
        try:
            lzcompresshc = lz4.compressHC
            lz4compress = lz4.compress
            lz4decompress = lz4.decompress
        except AttributeError:
            pass