[PATCH 1 of 5] histedit: simplify computation of `newchildren` during --continue

Pierre-Yves David pierre-yves.david at logilab.fr
Fri Oct 5 09:10:11 CDT 2012


On Fri, Oct 05, 2012 at 08:42:44AM -0500, Augie Fackler wrote:
> 
> On Oct 2, 2012, at 4:42 AM, pierre-yves.david at logilab.fr wrote:
> 
> > # HG changeset patch
> > # User Pierre-Yves David <pierre-yves.david at ens-lyon.org>
> > # Date 1348786765 -7200
> > # Node ID 1a8f44e303c07659197acf8f2e77904b70f06872
> > # Parent  fa714f3ed2989aff64c267c9935251d9fc4f31ee
> > histedit: simplify computation of `newchildren` during --continue
> > 
> > We are now checking for any changesets between the previous `parentctx` and the
> > current working directory parent. If the current working directory parent is
> > inconsistent, we abort.
> > 
> > This change is useful as it simplify the --continue process, easing upcoming
> > changes.
> > 
> > diff --git a/hgext/histedit.py b/hgext/histedit.py
> > --- a/hgext/histedit.py
> > +++ b/hgext/histedit.py
> > @@ -548,25 +548,23 @@ def histedit(ui, repo, *parent, **opts):
> >        os.unlink(repo.sjoin('undo'))
> > 
> > 
> > def bootstrapcontinue(ui, repo, parentctx, existing, replacemap, rules,
> >                      tmpnodes, created, replaced, opts):
> > -    currentparent, wantnull = repo.dirstate.parents()
> > -    # existing is the list of revisions initially considered by
> > -    # histedit. Here we use it to list new changesets, descendants
> > -    # of parentctx without an 'existing' changeset in-between. We
> > -    # also have to exclude 'existing' changesets which were
> > -    # previously dropped.
> > -    descendants = set(c.node() for c in
> > -            repo.set('(%d::) - %d', parentctx, parentctx))
> > -    notdropped = set(n for n in existing if n in descendants and
> > -            (n not in replacemap or replacemap[n] in descendants))
> > -    # Discover any nodes the user has added in the interim. We can
> > -    # miss changesets which were dropped and recreated the same.
> > -    newchildren = list(c.node() for c in repo.set(
> > -        'sort(%ln - (%ln or %ln::))', descendants, existing, notdropped))
> >    action, currentnode = rules.pop(0)
> > +    # is there any new commit between the expected parent and "."
> > +    # XXX does not take non linear new change in account (but previous
> > +    # XXX implementation didn't used them anyway
> > +    newchildren = [c.node() for c in repo.set('(%d::.)', parentctx)]
> > +    if not newchildren:
> > +        # `parentctxnode` should match but no result. This means that
> > +        # currentnode is not a descendant from parentctxnode.
> > +        msg = _('working directory parent is not a descendant of %s')
> > +        hint = _('update to proper revision and run "hg histedit '
> > +                 '--continue" again')
> 
> Is there a reason to not say parentctx in the int instead of "proper revision"?

Yes. user may want to update to a descendant of parent ctx (in the split
case). The definition of proper revision is defined in the main abort
message. I think it's clear enough.


-- 
Pierre-Yves David

http://www.logilab.fr/

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://selenic.com/pipermail/mercurial-devel/attachments/20121005/221e7cfd/attachment.pgp>


More information about the Mercurial-devel mailing list