diff -r d851951b421c -r c28b6d609c47 mercurial/localrepo.py --- a/mercurial/localrepo.py Tue Feb 27 23:05:39 2018 -0800 +++ b/mercurial/localrepo.py Wed Feb 28 12:56:01 2018 -0800 @@ -43,6 +43,7 @@ merge as mergemod, mergeutil, namespaces, + narrowspec, obsolete, pathutil, peer, @@ -736,6 +737,37 @@ " working parent %s!\n") % short(node)) return nullid + @repofilecache(narrowspec.FILENAME) + def narrowpats(self): + """matcher patterns for this repository's narrowspec + + A tuple of (includes, excludes). + """ + source = self + if self.shared(): + from . import hg + source = hg.sharedreposource(self) + return narrowspec.load(source) + + @repofilecache(narrowspec.FILENAME) + def _narrowmatch(self): + if changegroup.NARROW_REQUIREMENT not in self.requirements: + return matchmod.always(self.root, '') + include, exclude = self.narrowpats + return narrowspec.match(self.root, include=include, exclude=exclude) + + # TODO(martinvonz): make this property-like instead? + def narrowmatch(self): + return self._narrowmatch + + def setnarrowpats(self, newincludes, newexcludes): + target = self + if self.shared(): + from . import hg + target = hg.sharedreposource(self) + narrowspec.save(target, newincludes, newexcludes) + self.invalidate(clearfilecache=True) + def __getitem__(self, changeid): if changeid is None: return context.workingctx(self)