This patch looks good to me. See inline comment about how to make it faster.
That could probably be fixed in flight.

Excerpts from Stanislau Hlebik's message of 2017-02-02 02:57:24 -0800:
> # HG changeset patch
> # User Stanislau Hlebik <st...@fb.com>
> # Date 1486032998 28800
> #      Thu Feb 02 02:56:38 2017 -0800
> # Node ID 13a528b72173b1228f6eeb0ffc2346e7b78d1d78
> # Parent  abf029200e198878a4576a87e095bd8d77d9cea9
> 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 --git a/mercurial/localrepo.py b/mercurial/localrepo.py
> --- a/mercurial/localrepo.py
> +++ b/mercurial/localrepo.py
> @@ -1852,6 +1852,10 @@
>                                    listsubrepos)
>  
>      def heads(self, start=None):
> +        if start is None:
> +            headrevs = sorted(self.changelog.headrevs(), reverse=True)

headrevs() is already sorted in both C and Python implementations, so
"sorted(..., reverse=True)" could be replaced by "reversed(...)".

> +            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)
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to