From patchwork Wed Oct 16 18:56:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D7060: rust-dirstate-status: add call to rust-fast path for `dirstate.status` From: phabricator X-Patchwork-Id: 42418 Message-Id: <1821ec610133ba3b85c94195e30cf4cf@localhost.localdomain> To: Phabricator Cc: mercurial-devel@mercurial-scm.org Date: Wed, 16 Oct 2019 18:56:32 +0000 Alphare updated this revision to Diff 17253. REPOSITORY rHG Mercurial CHANGES SINCE LAST UPDATE https://phab.mercurial-scm.org/D7060?vs=17067&id=17253 CHANGES SINCE LAST ACTION https://phab.mercurial-scm.org/D7060/new/ REVISION DETAIL https://phab.mercurial-scm.org/D7060 AFFECTED FILES mercurial/dirstate.py CHANGE DETAILS To: Alphare, #hg-reviewers Cc: mjpieters, mercurial-devel diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py --- a/mercurial/dirstate.py +++ b/mercurial/dirstate.py @@ -27,6 +27,7 @@ policy, pycompat, scmutil, + sparse, txnutil, util, ) @@ -1097,6 +1098,45 @@ dmap = self._map dmap.preload() + + use_rust = True + if rustmod is None: + use_rust = False + elif subrepos: + use_rust = False + if bool(listunknown): + # Pathauditor does not exist yet in Rust, unknown files + # can't be trusted. + use_rust = False + elif self._ignorefiles() and listignored: + # Rust has no ignore mechanism yet, so don't use Rust for + # commands that need ignore. + use_rust = False + elif not match.always(): + # Matchers have yet to be implemented + use_rust = False + # We don't yet have a mechanism for extensions + elif sparse.enabled: + use_rust = False + elif not getattr(self, "_fsmonitordisable", True): + use_rust = False + + if use_rust: + lookup, modified, added, removed, deleted, unknown, clean = rustmod.status( + dmap._rustmap, + self._rootdir, + match.files(), + bool(listclean), + self._lastnormaltime, + self._checkexec, + ) + + status = scmutil.status(modified=modified, added=added, + removed=removed, deleted=deleted, + unknown=unknown, ignored=ignored, + clean=clean) + return (lookup, status) + dcontains = dmap.__contains__ dget = dmap.__getitem__ ladd = lookup.append # aka "unsure"