# HG changeset patch # User Sean Farley # Date 2014-03-28 01:14:55 # Node ID 388af5d4e90ce6ff97614c8835fa813015fda152 # Parent 70f9a5d8c06fa53cfbbc01593c35540dc7eb1380 repoview: improve performance for computehidden (issue4206) For repos with a large number of heads (including hidden heads), a stale tag cache would cause computehidden to be drastically slower because of a the call to repo.tags() (which would build the tag cache). We actually don't need the tag cache for computehidden because we filter out global tags. This patch replaces the call to repo.tags with readlocaltags so as to avoid the tag cache. diff --git a/mercurial/repoview.py b/mercurial/repoview.py --- a/mercurial/repoview.py +++ b/mercurial/repoview.py @@ -10,6 +10,7 @@ import copy import phases import util import obsolete +import tags as tagsmod def hideablerevs(repo): @@ -35,9 +36,10 @@ def computehidden(repo): blockers.append(par.rev()) for bm in repo._bookmarks.values(): blockers.append(repo[bm].rev()) - tags = [n for t, n in repo.tags().iteritems() - if (repo.tagtype(t) and repo.tagtype(t) != 'global')] - blockers.extend(repo[t].rev() for t in tags) + tags = {} + tagsmod.readlocaltags(repo.ui, repo, tags, {}) + if tags: + blockers.extend(repo[t[0]].rev() for t in tags.values()) blocked = cl.ancestors(blockers, inclusive=True) return frozenset(r for r in hideable if r not in blocked) return frozenset()