[PATCH] hgweb: build the "entries" list directly in filelog command

Martin von Zweigbergk martinvonz at google.com
Sun Jan 15 13:09:02 EST 2017


On Sat, Jan 14, 2017, 23:52 Pierre-Yves David <
pierre-yves.david at ens-lyon.org> wrote:

>
>
> On 01/14/2017 06:14 AM, Gregory Szorc wrote:
> > On Fri, Jan 13, 2017 at 8:08 AM, Pierre-Yves David
> > <pierre-yves.david at ens-lyon.org <mailto:pierre-yves.david at ens-lyon.org>>
> > wrote:
> >
> >
> >
> >     On 01/13/2017 04:31 PM, Denis Laxalde wrote:
> >
> >         # HG changeset patch
> >         # User Denis Laxalde <denis.laxalde at logilab.fr
> >         <mailto:denis.laxalde at logilab.fr>>
> >         # Date 1484299345 -3600
> >         #      Fri Jan 13 10:22:25 2017 +0100
> >         # Node ID ad41cc2eb799156b0de2dd71adeed88ec42a98d9
> >         # Parent  e882c7bb5a0ba2589a44108c9a87b300a13e08df
> >         hgweb: build the "entries" list directly in filelog command
> >
> >         There's no apparent reason to have this "entries" generator
> >         function that
> >         builds a list and then yields its elements in reverse order and
> >         which is only
> >         called to build the "entries" list. So just build the list
> >         directly, in
> >         reverse order.
> >
> >
> >     revlog are usually read from 0 to max for performance reason (data
> >     in N+1 might rely on data on N and last access might be cached).
> >     This might explain why the list was build in one direction and then
> >     reversed.
> >     Can you double check if such mechanism is in play in this case?
> >
> >
> > Your observation about desiring to iterate revlogs from 0 to max is spot
> > on and this patch would normally be wrong. However, in this code `start
> >> end` (as can be seen in the context just above the first changed
> > line), so we're already iterating in the suboptimal direction. This
> > patch actually fixes that by throwing in a reversed() of a descending
> > fctx.filelog().revs()!
>

These are the lines from the context:

count = fctx.filerev() + 1
start = max(0, fctx.filerev() - revcount + 1) # first rev on this page
end = min(count, start + revcount) # last rev on this page

Let's say count=100, revcount=10. Then start=90 and end=100. Since you two
(Greg and Pierre-Yves) agree that start > end, I suspect I'm just missing
something, but I couldn't figure out what.

(Btw, "start = max(0, count - revcount)" would be slightly simpler.)


>
> > (This confused me on first read too.)
>
> oh, right. Thanks for pointing that out.
>
> I've pushed that patch Thanks!
>
> Cheers,
>
> --
> Pierre-Yves David
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.mercurial-scm.org/pipermail/mercurial-devel/attachments/20170115/adf7adfa/attachment.html>


More information about the Mercurial-devel mailing list