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

Pierre-Yves David pierre-yves.david at ens-lyon.org
Wed Jan 4 14:06:55 EST 2017



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.

I would vaguely assume that strip is enforcing it run on an unfiltered 
changelog, but can you double check that? (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