diff --git a/mercurial/revset.py b/mercurial/revset.py index 9a49feb408f3863cc0f537c2afe2e2005467aafb_bWVyY3VyaWFsL3JldnNldC5weQ==..ed7b674824a3e1f0fdbdc815bbf87b82999c3d73_bWVyY3VyaWFsL3JldnNldC5weQ== 100644 --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -464,6 +464,4 @@ return subset & bundlerevs def checkstatus(repo, subset, pat, field): - m = None - s = [] hasset = matchmod.patkind(pat) == 'set' @@ -469,10 +467,12 @@ hasset = matchmod.patkind(pat) == 'set' - fname = None - for r in subset: - c = repo[r] + + def matches(x): + m = None + fname = None + c = repo[x] if not m or hasset: m = matchmod.match(repo.root, repo.getcwd(), [pat], ctx=c) if not m.anypats() and len(m.files()) == 1: fname = m.files()[0] if fname is not None: if fname not in c.files(): @@ -473,12 +473,12 @@ if not m or hasset: m = matchmod.match(repo.root, repo.getcwd(), [pat], ctx=c) if not m.anypats() and len(m.files()) == 1: fname = m.files()[0] if fname is not None: if fname not in c.files(): - continue + return False else: for f in c.files(): if m(f): break else: @@ -480,9 +480,9 @@ else: for f in c.files(): if m(f): break else: - continue + return False files = repo.status(c.p1().node(), c.node())[field] if fname is not None: if fname in files: @@ -486,7 +486,7 @@ files = repo.status(c.p1().node(), c.node())[field] if fname is not None: if fname in files: - s.append(r) + return True else: for f in files: if m(f): @@ -490,9 +490,9 @@ else: for f in files: if m(f): - s.append(r) - break - return baseset(s) + return True + + return lazyset(subset, matches) def _children(repo, narrow, parentset): cs = set()