mercurial/localrepo.py
changeset 36471 c28b6d609c47
parent 36422 04c319a07c7b
child 36554 06f59bdde626
--- 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)