# HG changeset patch # User Matt Mackall # Date 2012-06-01 20:13:05 # Node ID b6ef1395d77f0ad75ca2752f296938b2ecbb3b1c # Parent f3b8c82a559cb2bc544ab42425ce54b5da553f3f revset: avoid validating all tag nodes for tag(x) This generally causes the entire node->rev table to get built when we're only interested in one node. diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -1214,9 +1214,11 @@ def tag(repo, subset, x): _('the argument to tag must be a string')) kind, pattern, matcher = _stringmatcher(pattern) if kind == 'literal': - if not repo.tags().get(pattern, None): + # avoid resolving all tags + tn = repo._tagscache.tags.get(pattern, None) + if tn is None: raise util.Abort(_("tag '%s' does not exist") % pattern) - s = set([cl.rev(n) for t, n in repo.tagslist() if t == pattern]) + s = set([repo[tn].rev()]) else: s = set([cl.rev(n) for t, n in repo.tagslist() if matcher(t)]) if not s: