[PATCH 2 of 5 V1 REBASED] obsolete: drop successors sets which are subset of another one
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Sat Dec 8 00:25:37 UTC 2012
On Fri, Dec 07, 2012 at 03:07:32PM -0600, Augie Fackler wrote:
>
> On Nov 30, 2012, at 3:12 PM, Pierre-Yves David <pierre-yves.david at ens-lyon.org> wrote:
>
> > # HG changeset patch
> > # User Pierre-Yves David <pierre-yves.david at logilab.fr>
> > # Date 1352509019 -3600
> > # Node ID a174b9f3d76e9458e1bfbc590cb9d550dd478ad6
> > # Parent d58f0a5976a0e663e2afff58ccd4883eb4d9b99b
> > obsolete: drop successors sets which are subset of another one
> >
> > If both "(B,)" and "(B, C)" are successors set of "A", "(B,)" is dropped.
> > We won't be interrested in detection such divergence scenario.
> >
> > diff --git a/mercurial/obsolete.py b/mercurial/obsolete.py
> > --- a/mercurial/obsolete.py
> > +++ b/mercurial/obsolete.py
> > @@ -516,11 +516,28 @@ def successorssets(repo, initialnode, ca
> > break
> > else:
> > # computation was succesful for *all* marker.
> > # Add computed successors set to the cache
> > # (will be poped from to proceeed on the next iteration)
> > - cache[node] = list(set(tuple(r) for r in lss if r))
> > + #
> > + # We remove successors set that are subset of another one
> > + # this fil
> > + candsucset = sorted(((len(ss), set(ss), ss) for ss in lss),
> > + reverse=True)
>
> Is there a reason to not use sorted() with they key= kwarg here? Is decorate-sort-undecorate really faster here?
Not really, but we need the `set(ss)` and `ss` anyway. Computing the len(ss) at
the same time that everything else seemed simpler.
I have not strong opinion on keep this forms.
> > + finalsucset = []
> > + for cl, cs, css in candsucset:
> > + if not css:
> > + # remove empty successors set
> > + continue
> > + for fs, fss in finalsucset:
> > + if cs.issubset(fs):
> > + break
> > + else:
> > + finalsucset.append((cs, css))
>
> I'm not sure why you're saving cs in the finalsucset, since you immediately trim it off on the next line as soon as the loop was over.
Because I'm trimming it *after* the loop while using it in the loop itself.
Three lines above.
--
Pierre-Yves David
More information about the Mercurial-devel
mailing list