[PATCH 2 of 2] repair: combine two loops over changelog revisions

Martin von Zweigbergk martinvonz at google.com
Wed Jan 4 14:09:41 EST 2017


On Wed, Jan 4, 2017 at 11:06 AM, Pierre-Yves David
<pierre-yves.david at ens-lyon.org> wrote:
>
>
> On 01/04/2017 07:52 PM, Martin von Zweigbergk via Mercurial-devel wrote:
>>
>> # HG changeset patch
>> # User Martin von Zweigbergk <martinvonz at google.com>
>> # Date 1483554904 28800
>> #      Wed Jan 04 10:35:04 2017 -0800
>> # Node ID c9c5864ddd54b240692a2712d59227c9d4ca2f99
>> # Parent  acf0037a9a5bb14603bb50c57822d4ab5896e5b5
>> repair: combine two loops over changelog revisions
>>
>> This just saves a few lines.
>
>
> Beware that cl.revs(start) might be different from
> xrange(start, len(cl)) if filtering come into play.

Good point.

>
> I would vaguely assume that strip is enforcing it run on an unfiltered
> changelog, but can you double check that?

Yep, about 20 lines up, you'll find these two lines:

    repo = repo.unfiltered()
[...]
    cl = repo.changelog



> (In particular, it is suspicious
> that we have a difference here why would we have move of the call to
> cl.revs(…) and not the other one ?)
>  If not already the case, It is probably worth dropping an assert+comment
> (or a ProgrammingError) to protect that assertion.
>
> Cheers,
>
>
>> diff -r acf0037a9a5b -r c9c5864ddd54 mercurial/repair.py
>> --- a/mercurial/repair.py       Wed Jan 04 10:07:12 2017 -0800
>> +++ b/mercurial/repair.py       Wed Jan 04 10:35:04 2017 -0800
>> @@ -91,6 +91,9 @@
>>      striplist = [cl.rev(node) for node in nodelist]
>>      striprev = min(striplist)
>>
>> +    files = _collectfiles(repo, striprev)
>> +    saverevs = _collectbrokencsets(repo, files, striprev)
>> +
>>      # Some revisions with rev > striprev may not be descendants of
>> striprev.
>>      # We have to find these revisions and put them in a bundle, so that
>>      # we can restore them after the truncations.
>> @@ -99,16 +102,11 @@
>>      # (head = revision in the set that has no descendant in the set;
>>      #  base = revision in the set that has no ancestor in the set)
>>      tostrip = set(striplist)
>> +    saveheads = set(saverevs)
>>      for r in cl.revs(start=striprev + 1):
>>          if any(p in tostrip for p in cl.parentrevs(r)):
>>              tostrip.add(r)
>>
>> -    files = _collectfiles(repo, striprev)
>> -    saverevs = _collectbrokencsets(repo, files, striprev)
>> -
>> -    # compute heads
>> -    saveheads = set(saverevs)
>> -    for r in xrange(striprev + 1, len(cl)):
>>          if r not in tostrip:
>>              saverevs.add(r)
>>              saveheads.difference_update(cl.parentrevs(r))
>> _______________________________________________
>> Mercurial-devel mailing list
>> Mercurial-devel at mercurial-scm.org
>> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>>
>
> --
> Pierre-Yves David


More information about the Mercurial-devel mailing list