mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 15:27:13 +03:00
match: override 'visitdir' in subdirmatcher
The manifest.manifest class has a _treeinmem member than one can manually set to True to test that the treemanifest class works as a drop-in replacement for manifestdict (which is mostly a requirement for treemanifest repos to work). However, it doesn't quite work at the moment. These tests fail: test-largefiles-misc.t test-rebase-newancestor.t test-subrepo.t test-subrepo-deep-nested-change.t test-subrepo-recursion.t All but test-rebase-newancestor.t fail because they trigger calls to subdirmatcher.visitdir(), which tries to access a _excluderoots field that does not exist on the subdirmatcher. Let's fix that by overriding visitdir() in a similar way to how matchfn is overridden, i.e. by prepending the directory before calling the superclass method.
This commit is contained in:
parent
cf3e9474ef
commit
cc3e946787
@ -381,7 +381,16 @@ class subdirmatcher(match):
|
||||
self._always = any(f == path for f in matcher._files)
|
||||
|
||||
self._anypats = matcher._anypats
|
||||
# Some information is lost in the superclass's constructor, so we
|
||||
# can not accurately create the matching function for the subdirectory
|
||||
# from the inputs. Instead, we override matchfn() and visitdir() to
|
||||
# call the original matcher with the subdirectory path prepended.
|
||||
self.matchfn = lambda fn: matcher.matchfn(self._path + "/" + fn)
|
||||
def visitdir(dir):
|
||||
if dir == '.':
|
||||
return matcher.visitdir(self._path)
|
||||
return matcher.visitdir(self._path + "/" + dir)
|
||||
self.visitdir = visitdir
|
||||
self._fileroots = set(self._files)
|
||||
|
||||
def abs(self, f):
|
||||
|
Loading…
Reference in New Issue
Block a user