# HG changeset patch # User Laurent Charignon # Date 1447808767 28800 # Node ID 9afe9e0191a121e6ebea2c1e6a622cc7e7fe566f # Parent f6d10432499de7e2b5648f9b3476609cab3d3033 evolve: evolve --divergent failed when merge had nothing to do (issue4950) Before this patch, if the divergence resolution lead to an empty commit, the transaction would be rolled back and the divergence not resolved. This patch allows empty commits in that case. It is legitimate to end up with an empty commit in that case, for example when divergent commits differ over their commit messages. diff -r f6d10432499d -r 9afe9e0191a1 hgext/evolve.py --- a/hgext/evolve.py Tue Nov 17 20:25:15 2015 -0800 +++ b/hgext/evolve.py Tue Nov 17 17:06:07 2015 -0800 @@ -2008,8 +2008,10 @@ /!\ * hg kill -n Y W Z """) if progresscb: progresscb() + emtpycommitallowed = repo.ui.backupconfig('ui', 'allowemptycommit') tr = repo.transaction('stabilize-divergent') try: + repo.ui.setconfig('ui', 'allowemptycommit', True) repo.dirstate.beginparentchange() repo.dirstate.setparents(divergent.node(), node.nullid) repo.dirstate.endparentchange() @@ -2024,6 +2026,7 @@ phases.retractboundary(repo, tr, other.phase(), [new.node()]) tr.close() finally: + repo.ui.restoreconfig(emtpycommitallowed) tr.release() def divergentdata(ctx): diff -r f6d10432499d -r 9afe9e0191a1 tests/test-divergent.t --- a/tests/test-divergent.t Tue Nov 17 20:25:15 2015 -0800 +++ b/tests/test-divergent.t Tue Nov 17 17:06:07 2015 -0800 @@ -67,4 +67,45 @@ | o 0:135f39f4bd78@default(draft) add _a [] +Test divergence resolution when it yields to an empty commit (issue4950) +cdivergent2 contains the same content than cdivergent1 and they are divergent +versions of the revision _c + + $ hg up "desc(_a)" + 0 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ mkcommit _c + created new head + $ hg up "desc(_a)" + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ mkcommit cdivergent1 + created new head + $ hg up "desc(_a)" + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo "cdivergent1" > cdivergent1 + $ hg add cdivergent1 + $ hg ci -m "cdivergent2" + created new head + $ hg prune -s "desc(cdivergent1)" "desc(_c)" + 1 changesets pruned + $ hg prune -s "desc(cdivergent2)" "desc(_c)" --hidden + 1 changesets pruned + 2 new divergent changesets + $ hg log -G + @ 8:0a768ef678d9@default(draft) cdivergent2 [divergent] + | + | o 7:26c7705fee96@default(draft) add cdivergent1 [divergent] + |/ + | o 5:c26f1d3baed2@default(draft) add bdivergent1 [] + |/ + o 0:135f39f4bd78@default(draft) add _a [] + + $ hg evolve --all --any --divergent + merge:[7] add cdivergent1 + with: [8] cdivergent2 + base: [6] add _c + updating to "local" conflict + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + working directory is now at 6602ff5a79dc + $ cd ..