[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
Fri Dec 7 18:25:37 CST 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