changeset 38685:80466fd85ac9

fileset: rewrite andset() to not use mctx.narrow() New code is less efficient than the original, but it helps porting andset() to matcher composition. This will be cleaned up later. This effectively disables the fullmatchctx magic since mctx will never be demoted to the matchctx. The fullmatchctx class will be removed later.
author Yuya Nishihara <yuya@tcha.org>
date Sat, 09 Jun 2018 18:11:49 +0900
parents 07b551a4df44
children 131aae58a316
files mercurial/fileset.py
diffstat 1 files changed, 4 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/fileset.py	Sun Jun 10 20:02:53 2018 +0900
+++ b/mercurial/fileset.py	Sat Jun 09 18:11:49 2018 +0900
@@ -154,7 +154,9 @@
                                        _("pattern must be a string")))
 
 def andset(mctx, x, y):
-    return getset(mctx.narrow(getset(mctx, x)), y)
+    xl = set(getset(mctx, x))
+    yl = getset(mctx, y)
+    return [f for f in yl if f in xl]
 
 def orset(mctx, x, y):
     # needs optimizing
@@ -627,8 +629,7 @@
             unknown = set()
         return (f for f in self.subset
                 if (f in self.ctx and f not in removed) or f in unknown)
-    def narrow(self, files):
-        return matchctx(self.ctx, self.filter(files), self._status, self._badfn)
+
     def switch(self, ctx, status=None):
         subset = self.filter(_buildsubset(ctx, status))
         return matchctx(ctx, subset, status, self._badfn)