diff --git a/mercurial/obsolete.py b/mercurial/obsolete.py --- a/mercurial/obsolete.py +++ b/mercurial/obsolete.py @@ -144,20 +144,16 @@ def getoptions(repo): """Returns dicts showing state of obsolescence features.""" createmarkersvalue = _getoptionvalue(repo, createmarkersopt) - unstablevalue = _getoptionvalue(repo, allowunstableopt) - divergencevalue = _getoptionvalue(repo, allowdivergenceopt) - exchangevalue = _getoptionvalue(repo, exchangeopt) - - # createmarkers must be enabled if other options are enabled - if ( - unstablevalue or divergencevalue or exchangevalue - ) and not createmarkersvalue: - raise error.Abort( - _( - b"'createmarkers' obsolete option must be enabled " - b"if other obsolete options are enabled" - ) - ) + if createmarkersvalue: + unstablevalue = _getoptionvalue(repo, allowunstableopt) + divergencevalue = _getoptionvalue(repo, allowdivergenceopt) + exchangevalue = _getoptionvalue(repo, exchangeopt) + else: + # if we cannot create obsolescence markers, we shouldn't exchange them + # or perform operations that lead to instability or divergence + unstablevalue = False + divergencevalue = False + exchangevalue = False return { createmarkersopt: createmarkersvalue, diff --git a/tests/test-clone.t b/tests/test-clone.t --- a/tests/test-clone.t +++ b/tests/test-clone.t @@ -580,6 +580,24 @@ iterable in addbranchrevs() 3 files updated, 0 files merged, 0 files removed, 0 files unresolved $ rm -r ua +Local clones don't get confused by unusual experimental.evolution options + + $ hg clone \ + > --config experimental.evolution=allowunstable,allowdivergence,exchange \ + > a ua + updating to branch default + 3 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ rm -r ua + + $ hg clone \ + > --config experimental.evolution.createmarkers=no \ + > --config experimental.evolution.allowunstable=yes \ + > --config experimental.evolution.allowdivergence=yes \ + > --config experimental.evolution.exchange=yes \ + > a ua + updating to branch default + 3 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ rm -r ua Test clone with special '@' bookmark: $ cd a