# HG changeset patch # User Raphaël Gomès # Date 2020-05-12 09:39:50 # Node ID 4ba2a6ffcf2460157745adaae9a3e7e19e764080 # Parent 01afda7e7d6c1839e7ca3d0556f474b4dd2902bc 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 diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py --- a/mercurial/dirstate.py +++ b/mercurial/dirstate.py @@ -1107,6 +1107,7 @@ class dirstate(object): unknown, warnings, bad, + traversed, ) = rustmod.status( self._map._rustmap, matcher, @@ -1117,7 +1118,13 @@ class dirstate(object): 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 @@ class dirstate(object): 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