# HG changeset patch # User Anton Shestakov # Date 1567836209 -25200 # Node ID 8a491546e81d3d7c745e55ca34728790169e6068 # Parent 0852dcba82f6e863298a8e55a2613e5092743ebf fold: check allowdivergence before folding obsolete changesets (issue5817) diff -r 0852dcba82f6 -r 8a491546e81d CHANGELOG --- a/CHANGELOG Wed Aug 28 18:30:58 2019 +0700 +++ b/CHANGELOG Sat Sep 07 13:03:29 2019 +0700 @@ -5,6 +5,7 @@ ------------------- * evolve: test that target is not orig in _solveunstable() (issue6097) + * fold: check allowdivergence before folding obsolete changesets (issue5817) * obslog: correct spacing of patch output with word-diff=yes (issue6175) * stack: make sure to preserve dependencies, fixes certain complex cases diff -r 0852dcba82f6 -r 8a491546e81d hgext3rd/evolve/cmdrewrite.py --- a/hgext3rd/evolve/cmdrewrite.py Wed Aug 28 18:30:58 2019 +0700 +++ b/hgext3rd/evolve/cmdrewrite.py Sat Sep 07 13:03:29 2019 +0700 @@ -762,6 +762,14 @@ ui.write_err(_('single revision specified, nothing to fold\n')) return 1 + if not ui.configbool('experimental', 'evolution.allowdivergence'): + for rev in revs: + if repo[rev].obsolete(): + msg = _('folding obsolete revisions may cause divergence') + hint = _('set experimental.evolution.allowdivergence=yes' + ' to allow folding them') + raise error.Abort(msg, hint=hint) + # Sort so combined commit message of `hg fold --exact -r . -r .^` is # in topological order. revs.sort() diff -r 0852dcba82f6 -r 8a491546e81d tests/test-fold.t --- a/tests/test-fold.t Wed Aug 28 18:30:58 2019 +0700 +++ b/tests/test-fold.t Sat Sep 07 13:03:29 2019 +0700 @@ -254,7 +254,8 @@ Test order of proposed commit message - $ hg fold --exact --hidden -r 4 -r 5 -r 6 + $ hg fold --exact --hidden -r 4 -r 5 -r 6 \ + > --config experimental.evolution.allowdivergence=yes 2 new content-divergent changesets 3 changesets folded $ hg log -r tip -T '{desc}' @@ -265,7 +266,8 @@ r6 (no-eol) - $ hg fold --exact --hidden -r 6 -r 4 -r 5 + $ hg fold --exact --hidden -r 6 -r 4 -r 5 \ + > --config experimental.evolution.allowdivergence=yes 3 changesets folded $ hg log -r tip -T '{desc}' r4 @@ -399,17 +401,19 @@ 1 new orphan changesets 2 changesets folded -FIXME: fold should abort here because divergence is not allowed +fold aborts here because divergence is not allowed $ hg fold --exact -r 'desc("A")::desc("B")' -m 'second fold' \ > --config experimental.evolution.allowdivergence=no - 2 new content-divergent changesets - 2 changesets folded + abort: folding obsolete revisions may cause divergence + (set experimental.evolution.allowdivergence=yes to allow folding them) + [255] but if we allow divergence, this should work and should create new content-divergent changesets $ hg fold --exact -r 'desc("A")::desc("B")' -m 'second fold' \ > --config experimental.evolution.allowdivergence=yes + 2 new content-divergent changesets 2 changesets folded $ cd ..