Patchwork D7060: rust-dirstate-status: add call to rust-fast path for `dirstate.status`

login
register
mail settings
Submitter phabricator
Date Oct. 16, 2019, 6:56 p.m.
Message ID <1821ec610133ba3b85c94195e30cf4cf@localhost.localdomain>
Download mbox | patch
Permalink /patch/42418/
State Not Applicable
Headers show

Comments

phabricator - Oct. 16, 2019, 6:56 p.m.
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

Patch

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"