# HG changeset patch # User Pierre-Yves David # Date 1414849714 0 # Node ID ca17770d2ee9befc0ed598387ca2ada64c5a2c4c # Parent b7d85cd8ec7bd5a4ba5a61d156745269a999450b 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, diff -r b7d85cd8ec7b -r ca17770d2ee9 README --- a/README Sat Oct 25 22:25:42 2014 -0400 +++ b/README Sat Nov 01 13:48:34 2014 +0000 @@ -60,6 +60,7 @@ 5.0.1 -- - amend: fix --logfile argument +- evolve: preserve branch change when evolving 5.0.0 -- 2014-10-22 diff -r b7d85cd8ec7b -r ca17770d2ee9 hgext/evolve.py --- 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 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')) diff -r b7d85cd8ec7b -r ca17770d2ee9 tests/test-evolve.t --- a/tests/test-evolve.t Sat Oct 25 22:25:42 2014 -0400 +++ b/tests/test-evolve.t Sat Nov 01 13:48:34 2014 +0000 @@ -770,3 +770,79 @@ 7 - 5c9c8d9c2e4e another feature (child of ba0ec09b1bab) (public) 6 - ba0ec09b1bab a nifty feature (public) 0 - e55e0562ee93 base (public) + + $ cd .. + +Test branch preservation: +=========================== + + $ hg init evolving-branch + $ cd evolving-branch + $ touch a + $ hg add a + $ hg ci -m 'a0' + $ echo 1 > a + $ hg ci -m 'a1' + $ echo 2 > a + $ hg ci -m 'a2' + $ echo 3 > a + $ hg ci -m 'a3' + + $ hg log -G --template '{rev} [{branch}] {desc|firstline}\n' + @ 3 [default] a3 + | + o 2 [default] a2 + | + o 1 [default] a1 + | + o 0 [default] a0 + + +branch change propagated + + $ hg up 'desc(a2)' + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg branch mybranch + marked working directory as branch mybranch + (branches are permanent and global, did you want a bookmark?) + $ hg amend + 1 new unstable changesets + + $ hg evolve + move:[3] a3 + atop:[5] a2 + working directory is now at 7c5649f73d11 + + $ hg log -G --template '{rev} [{branch}] {desc|firstline}\n' + @ 6 [mybranch] a3 + | + o 5 [mybranch] a2 + | + o 1 [default] a1 + | + o 0 [default] a0 + + +branch change preserved + + $ hg up 'desc(a1)' + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg amend -m 'a1_' + 2 new unstable changesets + $ hg evolve + move:[5] a2 + atop:[7] a1_ + working directory is now at 5406c5cfee42 + $ hg evolve + move:[6] a3 + atop:[8] a2 + working directory is now at c7661e655801 + $ hg log -G --template '{rev} [{branch}] {desc|firstline}\n' + @ 9 [mybranch] a3 + | + o 8 [mybranch] a2 + | + o 7 [default] a1_ + | + o 0 [default] a0 +