status: also support for `traversedir` callback in the Rust fast-path
authorRaphaël Gomès <rgomes@octobus.net>
Tue, 12 May 2020 11:39:50 +0200
changeset 44840 4ba2a6ffcf24
parent 44839 01afda7e7d6c
child 44841 526d69eeea31
status: also support for `traversedir` callback in the Rust fast-path Repeating the performance numbers from the `hg-core` change: Running `hg clean/purge` on Netbeans' repo (100k files): ``` | No-op | 30% unknown -------------------------- Rust | 1.0s | 1.67s C | 2.0s | 2.87s ``` Differential Revision: https://phab.mercurial-scm.org/D8520
mercurial/dirstate.py
--- a/mercurial/dirstate.py	Tue May 12 11:37:55 2020 +0200
+++ b/mercurial/dirstate.py	Tue May 12 11:39:50 2020 +0200
@@ -1107,6 +1107,7 @@
             unknown,
             warnings,
             bad,
+            traversed,
         ) = rustmod.status(
             self._map._rustmap,
             matcher,
@@ -1117,7 +1118,13 @@
             bool(list_clean),
             bool(list_ignored),
             bool(list_unknown),
+            bool(matcher.traversedir),
         )
+
+        if matcher.traversedir:
+            for dir in traversed:
+                matcher.traversedir(dir)
+
         if self._ui.warn:
             for item in warnings:
                 if isinstance(item, tuple):
@@ -1193,8 +1200,6 @@
             use_rust = False
         elif sparse.enabled:
             use_rust = False
-        elif match.traversedir is not None:
-            use_rust = False
         elif not isinstance(match, allowed_matchers):
             # Some matchers have yet to be implemented
             use_rust = False