Mercurial > public > mercurial-scm > evolve
diff hgext/evolve.py @ 1141:ca17770d2ee9
evolve: preserve branch change
evolve will now preserve branch change. If the evolved changeset had a different
phases than its parent, this branch name will be preserved. This allow
propagation of branch change during amend but do not overwrite special branch
name on children,
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Sat, 01 Nov 2014 13:48:34 +0000 |
parents | b7d85cd8ec7b |
children | 160fd06312fc |
line wrap: on
line diff
--- a/hgext/evolve.py Sat Oct 25 22:25:42 2014 -0400 +++ b/hgext/evolve.py Sat Nov 01 13:48:34 2014 +0000 @@ -758,7 +758,7 @@ class MergeFailure(util.Abort): pass -def relocate(repo, orig, dest): +def relocate(repo, orig, dest, keepbranch=False): """rewrite <rev> on dest""" if orig.rev() == dest.rev(): raise util.Abort(_('tried to relocate a node on top of itself'), @@ -811,8 +811,15 @@ if r[-1]: #some conflict raise util.Abort( 'unresolved merge conflicts (see hg help resolve)') + if keepbranch: + def _extrafn(ctx, extra): + extra['branch'] = ctx.branch() + else: + _extrafn = (lambda ctx, extra: None) + nodenew = rebase.concludenode(repo, orig.node(), dest.node(), - node.nullid, commitmsg) + node.nullid, commitmsg, + extrafn=_extrafn) except util.Abort, exc: repo.dirstate.beginparentchange() repo.setparents(repo['.'].node(), nullid) @@ -1341,8 +1348,9 @@ else: repo.ui.note(todo) if progresscb: progresscb() + keepbranch = orig.p1().branch() != orig.branch() try: - relocate(repo, orig, target) + relocate(repo, orig, target, keepbranch) except MergeFailure: repo.opener.write('graftstate', orig.hex() + '\n') repo.ui.write_err(_('evolve failed!\n'))