D7862: dirstate: move rust fast-path calling code to its own method

Alphare (Raphaël Gomès) phabricator at mercurial-scm.org
Tue Jan 14 17:33:21 UTC 2020


Alphare created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  This logic is about to get bigger, this will make it easier to read and not
  pollute the main Python logic.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D7862

AFFECTED FILES
  mercurial/dirstate.py

CHANGE DETAILS

diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py
--- a/mercurial/dirstate.py
+++ b/mercurial/dirstate.py
@@ -1083,6 +1083,48 @@
                     results[next(iv)] = st
         return results
 
+    def _rust_status(self, matcher, list_clean):
+        # Force Rayon (Rust parallelism library) to respect the number of
+        # workers. This is a temporary workaround until Rust code knows
+        # how to read the config file.
+        numcpus = self._ui.configint(b"worker", b"numcpus")
+        if numcpus is not None:
+            encoding.environ.setdefault(
+                b'RAYON_NUM_THREADS', b'%d' % numcpus
+            )
+
+        workers_enabled = self._ui.configbool(b"worker", b"enabled", True)
+        if not workers_enabled:
+            encoding.environ[b"RAYON_NUM_THREADS"] = b"1"
+
+        (
+            lookup,
+            modified,
+            added,
+            removed,
+            deleted,
+            unknown,
+            clean,
+        ) = rustmod.status(
+            self._map._rustmap,
+            matcher,
+            self._rootdir,
+            bool(list_clean),
+            self._lastnormaltime,
+            self._checkexec,
+        )
+
+        status = scmutil.status(
+            modified=modified,
+            added=added,
+            removed=removed,
+            deleted=deleted,
+            unknown=unknown,
+            ignored=[],
+            clean=clean,
+        )
+        return (lookup, status)
+
     def status(self, match, subrepos, ignored, clean, unknown):
         '''Determine the status of the working copy relative to the
         dirstate and return a pair of (unsure, status), where status is of type
@@ -1127,46 +1169,7 @@
             use_rust = False
 
         if use_rust:
-            # Force Rayon (Rust parallelism library) to respect the number of
-            # workers. This is a temporary workaround until Rust code knows
-            # how to read the config file.
-            numcpus = self._ui.configint(b"worker", b"numcpus")
-            if numcpus is not None:
-                encoding.environ.setdefault(
-                    b'RAYON_NUM_THREADS', b'%d' % numcpus
-                )
-
-            workers_enabled = self._ui.configbool(b"worker", b"enabled", True)
-            if not workers_enabled:
-                encoding.environ[b"RAYON_NUM_THREADS"] = b"1"
-
-            (
-                lookup,
-                modified,
-                added,
-                removed,
-                deleted,
-                unknown,
-                clean,
-            ) = rustmod.status(
-                dmap._rustmap,
-                match,
-                self._rootdir,
-                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)
+            return self._rust_status(match, listclean)
 
         def noop(f):
             pass



To: Alphare, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list