# HG changeset patch # User Stanislau Hlebik # Date 1486032998 28800 # Node ID 1791be8a95c5d59cb8dd96b1479e24ad4470a9b6 # Parent 1f51b4658f21bbb797e922d155c1046eddccf91d localrepo: avoid unnecessary conversion from node to rev changelog.heads() first calls headrevs then converts them to nodes. localrepo.heads() then sorts them using self.changelog.rev function and makes useless conversion back to revs. Instead let's call changelog.headrevs() from localrepo.heads(), sort the output and then convert to nodes. Because headrevs does not support start parameter this optimization only works if start is None. diff -r 1f51b4658f21 -r 1791be8a95c5 mercurial/localrepo.py --- a/mercurial/localrepo.py Thu Feb 02 14:19:48 2017 +0100 +++ b/mercurial/localrepo.py Thu Feb 02 02:56:38 2017 -0800 @@ -1852,6 +1852,10 @@ listsubrepos) def heads(self, start=None): + if start is None: + headrevs = sorted(self.changelog.headrevs(), reverse=True) + return [self.changelog.node(rev) for rev in headrevs] + heads = self.changelog.heads(start) # sort the output in rev descending order return sorted(heads, key=self.changelog.rev, reverse=True)