From patchwork Wed Feb 20 20:39:38 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: match: more accurately report when we're always going to match From: Bryan O'Sullivan X-Patchwork-Id: 1038 Message-Id: <7c4e5ad8fa43d211c2d0.1361392778@australite.thefacebook.com> To: mercurial-devel@selenic.com Date: Wed, 20 Feb 2013 12:39:38 -0800 # HG changeset patch # User Bryan O'Sullivan # Date 1361392772 28800 # Node ID 7c4e5ad8fa43d211c2d068f981b91acf350be3df # Parent 67ee5291969274900517384d864da73c7928552e match: more accurately report when we're always going to match This improves the performance of log --patch and --stat by about 20% for moderately large manifests (e.g. mozilla-central) for the common case of no -I/-X patterns. diff --git a/mercurial/match.py b/mercurial/match.py --- a/mercurial/match.py +++ b/mercurial/match.py @@ -62,6 +62,7 @@ class match(object): self._files = [] self._anypats = bool(include or exclude) self._ctx = ctx + self._always = False if include: pats = _normalize(include, 'glob', root, cwd, auditor) @@ -103,6 +104,7 @@ class match(object): m = lambda f: not em(f) else: m = lambda f: True + self._always = True self.matchfn = m self._fmap = set(self._files) @@ -130,7 +132,7 @@ class match(object): def anypats(self): return self._anypats def always(self): - return False + return self._always class exact(match): def __init__(self, root, cwd, files): @@ -139,8 +141,7 @@ class exact(match): class always(match): def __init__(self, root, cwd): match.__init__(self, root, cwd, []) - def always(self): - return True + self._always = True class narrowmatcher(match): """Adapt a matcher to work on a subdirectory only. @@ -175,6 +176,7 @@ class narrowmatcher(match): self._cwd = matcher._cwd self._path = path self._matcher = matcher + self._always = matcher._always self._files = [f[len(path) + 1:] for f in matcher._files if f.startswith(path + "/")]