changeset 49356:a87443d4aec0

sparse: directly inline the `walk` wrapping core is already aware of sparse, so lets move the handful of line of code that deal with it in `dirstate.walk` for the sake of simplicity.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Sat, 11 Jun 2022 00:58:41 +0200
parents 0540c1628fd4
children 5b7a10ddb42f
files hgext/sparse.py mercurial/dirstate.py
diffstat 2 files changed, 5 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/sparse.py	Sat Jun 11 00:56:50 2022 +0200
+++ b/hgext/sparse.py	Sat Jun 11 00:58:41 2022 +0200
@@ -81,7 +81,6 @@
     error,
     extensions,
     logcmdutil,
-    match as matchmod,
     merge as mergemod,
     pycompat,
     registrar,
@@ -213,18 +212,6 @@
     and to prevent modifications to files outside the checkout.
     """
 
-    def walk(orig, self, match, subrepos, unknown, ignored, full=True):
-        # hack to not exclude explicitly-specified paths so that they can
-        # be warned later on e.g. dirstate.add()
-        sparse_matcher = self._sparsematcher
-        if sparse_matcher is not None:
-            em = matchmod.exact(match.files())
-            sm = matchmod.unionmatcher([self._sparsematcher, em])
-            match = matchmod.intersectmatchers(match, sm)
-        return orig(self, match, subrepos, unknown, ignored, full)
-
-    extensions.wrapfunction(dirstate.dirstate, b'walk', walk)
-
     # dirstate.rebuild should not add non-matching files
     def _rebuild(orig, self, parent, allfiles, changedfiles=None):
         matcher = self._sparsematcher
--- a/mercurial/dirstate.py	Sat Jun 11 00:56:50 2022 +0200
+++ b/mercurial/dirstate.py	Sat Jun 11 00:58:41 2022 +0200
@@ -984,6 +984,11 @@
             ignore = util.always
             dirignore = util.always
 
+        if self._sparsematchfn is not None:
+            em = matchmod.exact(match.files())
+            sm = matchmod.unionmatcher([self._sparsematcher, em])
+            match = matchmod.intersectmatchers(match, sm)
+
         matchfn = match.matchfn
         matchalways = match.always()
         matchtdir = match.traversedir