# HG changeset patch # User Georges Racinet # Date 1544123075 -3600 # Node ID 536c83535cbdafdfe060cea2b8c80b0789863227 # Parent b31a41f248641f09db2ba57ab3fbada0f6758c64 rust-cpython: using the new bindings from Python The Python callers detect if we have cpython or direct-ffi bindings and fallback to the Python implementation if none is present. This intermediate state allows to compare the three possibilities. Differential Revision: https://phab.mercurial-scm.org/D5442 diff -r b31a41f24864 -r 536c83535cbd mercurial/revlog.py --- a/mercurial/revlog.py Thu Dec 13 18:53:40 2018 +0100 +++ b/mercurial/revlog.py Thu Dec 06 20:04:35 2018 +0100 @@ -97,6 +97,11 @@ REVIDX_RAWTEXT_CHANGING_FLAGS parsers = policy.importmod(r'parsers') +try: + from . import rustext + rustext.__name__ # force actual import (see hgdemandimport) +except ImportError: + rustext = None # Aliased for performance. _zlibdecompress = zlib.decompress @@ -779,12 +784,17 @@ for r in revs: checkrev(r) # and we're sure ancestors aren't filtered as well - if util.safehasattr(parsers, 'rustlazyancestors'): - return ancestor.rustlazyancestors( - self.index, revs, - stoprev=stoprev, inclusive=inclusive) - return ancestor.lazyancestors(self._uncheckedparentrevs, revs, - stoprev=stoprev, inclusive=inclusive) + + if rustext is not None: + lazyancestors = rustext.ancestor.LazyAncestors + arg = self.index + elif util.safehasattr(parsers, 'rustlazyancestors'): + lazyancestors = ancestor.rustlazyancestors + arg = self.index + else: + lazyancestors = ancestor.lazyancestors + arg = self._uncheckedparentrevs + return lazyancestors(arg, revs, stoprev=stoprev, inclusive=inclusive) def descendants(self, revs): return dagop.descendantrevs(revs, self.revs, self.parentrevs)