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
--- 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