Mercurial > hg
changeset 43274:733d4ffcd667
rust-dirstate-status: add call to rust-fast path for `dirstate.status`
The reasoning behind this patch is explained in the first patch of the series.
Differential Revision: https://phab.mercurial-scm.org/D7060
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Wed, 16 Oct 2019 20:34:56 +0200 |
parents | 478d0b1bf0c5 |
children | 8c0fe77f47c5 |
files | mercurial/dirstate.py |
diffstat | 1 files changed, 53 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/dirstate.py Tue Oct 08 08:45:55 2019 +0200 +++ b/mercurial/dirstate.py Wed Oct 16 20:34:56 2019 +0200 @@ -27,6 +27,7 @@ policy, pycompat, scmutil, + sparse, txnutil, util, ) @@ -1097,6 +1098,58 @@ 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"