mercurial/manifest.py
changeset 23305 0cc283f44655
parent 22966 ff93aa006e6a
child 23602 a4679a74df14
--- a/mercurial/manifest.py	Wed Nov 12 22:20:36 2014 -0800
+++ b/mercurial/manifest.py	Wed Oct 22 21:38:30 2014 -0700
@@ -39,6 +39,22 @@
                     ret._flags[fn] = flags
         return ret
 
+    def matches(self, match):
+        '''generate a new manifest filtered by the match argument'''
+        if match.always():
+            return self.copy()
+
+        files = match.files()
+        if (match.matchfn == match.exact or
+            (not match.anypats() and util.all(fn in self for fn in files))):
+            return self.intersectfiles(files)
+
+        mf = self.copy()
+        for fn in mf.keys():
+            if not match(fn):
+                del mf[fn]
+        return mf
+
     def diff(self, m2):
         '''Finds changes between the current manifest and m2. The result is
         returned as a dict with filename as key and values of the form