# HG changeset patch # User Boris Feld # Date 1508166887 -7200 # Node ID fec79a3f250f3a9cb41704dfea970088090ca2ce # Parent b1e3f609bf45058a503e58f2de207060e72335cc config: update evolution-related config Update the evolution helpers function to support both old-style configuration and new-style configuration: experimental.evolution=all is renamed into experimental.evolution=true experimental.evolution=createmarkers is renamed into experimental.evolution.createmarkers=true experimental.evolution=allowunstable is renamed into experimental.evolution.allowunstable=true experimental.evolution=exchange is renamed into experimental.evolution.exchange=true We choose to not rename individual config options; keeping the same names would easy the transition for users but it's something that could be easily done in the future. Differential Revision: https://phab.mercurial-scm.org/D1147 diff -r b1e3f609bf45 -r fec79a3f250f mercurial/configitems.py --- a/mercurial/configitems.py Mon Oct 16 17:14:32 2017 +0200 +++ b/mercurial/configitems.py Mon Oct 16 17:14:47 2017 +0200 @@ -349,6 +349,15 @@ default=list, alias=[('experimental', 'stabilization')], ) +coreconfigitem('experimental', 'evolution.allowunstable', + default=None, +) +coreconfigitem('experimental', 'evolution.createmarkers', + default=None, +) +coreconfigitem('experimental', 'evolution.exchange', + default=None, +) coreconfigitem('experimental', 'evolution.bundle-obsmarker', default=False, alias=[('experimental', 'stabilization.bundle-obsmarker')], diff -r b1e3f609bf45 -r fec79a3f250f mercurial/obsolete.py --- a/mercurial/obsolete.py Mon Oct 16 17:14:32 2017 +0200 +++ b/mercurial/obsolete.py Mon Oct 16 17:14:47 2017 +0200 @@ -98,26 +98,54 @@ allowunstableopt = 'allowunstable' exchangeopt = 'exchange' +def _getoptionvalue(repo, option): + """Returns True if the given repository has the given obsolete option + enabled. + """ + configkey = 'evolution.%s' % option + newconfig = repo.ui.configbool('experimental', configkey) + + # Return the value only if defined + if newconfig is not None: + return newconfig + + # Fallback on generic option + try: + return repo.ui.configbool('experimental', 'evolution') + except (error.ConfigError, AttributeError): + # Fallback on old-fashion config + # inconsistent config: experimental.evolution + result = set(repo.ui.configlist('experimental', 'evolution')) + + if 'all' in result: + return True + + # For migration purposes, temporarily return true if the config hasn't + # been set but _enabled is true. + if len(result) == 0 and _enabled: + return True + + # Temporary hack for next check + newconfig = repo.ui.config('experimental', 'evolution.createmarkers') + if newconfig: + result.add('createmarkers') + + return option in result + def isenabled(repo, option): """Returns True if the given repository has the given obsolete option enabled. """ - result = set(repo.ui.configlist('experimental', 'evolution')) - if 'all' in result: - return True - - # For migration purposes, temporarily return true if the config hasn't been - # set but _enabled is true. - if len(result) == 0 and _enabled: - return True + createmarkersvalue = _getoptionvalue(repo, createmarkersopt) + unstabluevalue = _getoptionvalue(repo, allowunstableopt) + exchangevalue = _getoptionvalue(repo, exchangeopt) # createmarkers must be enabled if other options are enabled - if ((allowunstableopt in result or exchangeopt in result) and - not createmarkersopt in result): + if ((unstabluevalue or exchangevalue) and not createmarkersvalue): raise error.Abort(_("'createmarkers' obsolete option must be enabled " - "if other obsolete options are enabled")) + "if other obsolete options are enabled")) - return option in result + return _getoptionvalue(repo, option) ### obsolescence marker flag