mercurial/configitems.py
changeset 50762 c51b178b0b7e
parent 50760 b584dae08774
child 50765 7f8f6fe13fa9
--- a/mercurial/configitems.py	Mon Jan 23 17:11:42 2023 +0100
+++ b/mercurial/configitems.py	Mon Jan 23 18:08:11 2023 +0100
@@ -9,11 +9,21 @@
 import functools
 import re
 
+from .utils import resourceutil
+
 from . import (
     encoding,
     error,
 )
 
+try:
+    import tomllib  # pytype: disable=import-error
+
+    tomllib.load  # trigger lazy import
+except ModuleNotFoundError:
+    # Python <3.11 compat
+    from .thirdparty import tomli as tomllib
+
 
 def loadconfigtable(ui, extname, configtable):
     """update config item known to the ui with the extension ones"""
@@ -104,6 +114,74 @@
         return None
 
 
+def sanitize_item(item):
+    """Apply the transformations that are encoded on top of the pure data"""
+
+    # Set the special defaults
+    default_type_key = "default-type"
+    default_type = item.pop(default_type_key, None)
+    if default_type == "dynamic":
+        item["default"] = dynamicdefault
+    elif default_type == "list_type":
+        item["default"] = list
+    elif default_type == "lambda":
+        assert isinstance(item["default"], list)
+        default = [e.encode() for e in item["default"]]
+        item["default"] = lambda: default
+    elif default_type == "lazy_module":
+        item["default"] = lambda: encoding.encoding
+    else:
+        if default_type is not None:
+            msg = "invalid default config type %r for '%s.%s'"
+            msg %= (default_type, item["section"], item["name"])
+            raise error.ProgrammingError(msg)
+
+    # config expects bytes
+    alias = item.get("alias")
+    if alias:
+        item["alias"] = [(k.encode(), v.encode()) for (k, v) in alias]
+    if isinstance(item.get("default"), str):
+        item["default"] = item["default"].encode()
+    item["section"] = item["section"].encode()
+    item["name"] = item["name"].encode()
+
+
+def read_configitems_file():
+    """Returns the deserialized TOML structure from the configitems file"""
+    with resourceutil.open_resource(b"mercurial", b"configitems.toml") as fp:
+        return tomllib.load(fp)
+
+
+def configitems_from_toml(items):
+    """Register the configitems from the *deserialized* toml file"""
+    for item in items["items"]:
+        sanitize_item(item)
+        coreconfigitem(**item)
+
+    templates = items["templates"]
+
+    for application in items["template-applications"]:
+        template_items = templates[application["template"]]
+
+        for template_item in template_items:
+            item = template_item.copy()
+            prefix = application.get("prefix", "")
+            item["section"] = application["section"]
+            if prefix:
+                item["name"] = f'{prefix}.{item["suffix"]}'
+            else:
+                item["name"] = item["suffix"]
+
+            sanitize_item(item)
+            item.pop("suffix", None)
+            coreconfigitem(**item)
+
+
+def import_configitems_from_file():
+    as_toml = read_configitems_file()
+    configitems_from_toml(as_toml)
+
+
 coreitems = {}
 
 
@@ -131,2844 +209,4 @@
 
 coreconfigitem = getitemregister(coreitems)
 
-
-def _registerdiffopts(section, configprefix=b''):
-    coreconfigitem(
-        section,
-        configprefix + b'nodates',
-        default=False,
-    )
-    coreconfigitem(
-        section,
-        configprefix + b'showfunc',
-        default=False,
-    )
-    coreconfigitem(
-        section,
-        configprefix + b'unified',
-        default=None,
-    )
-    coreconfigitem(
-        section,
-        configprefix + b'git',
-        default=False,
-    )
-    coreconfigitem(
-        section,
-        configprefix + b'ignorews',
-        default=False,
-    )
-    coreconfigitem(
-        section,
-        configprefix + b'ignorewsamount',
-        default=False,
-    )
-    coreconfigitem(
-        section,
-        configprefix + b'ignoreblanklines',
-        default=False,
-    )
-    coreconfigitem(
-        section,
-        configprefix + b'ignorewseol',
-        default=False,
-    )
-    coreconfigitem(
-        section,
-        configprefix + b'nobinary',
-        default=False,
-    )
-    coreconfigitem(
-        section,
-        configprefix + b'noprefix',
-        default=False,
-    )
-    coreconfigitem(
-        section,
-        configprefix + b'word-diff',
-        default=False,
-    )
-
-
-coreconfigitem(
-    b'alias',
-    b'.*',
-    default=dynamicdefault,
-    generic=True,
-)
-coreconfigitem(
-    b'auth',
-    b'cookiefile',
-    default=None,
-)
-_registerdiffopts(section=b'annotate')
-# bookmarks.pushing: internal hack for discovery
-coreconfigitem(
-    b'bookmarks',
-    b'pushing',
-    default=list,
-)
-# bundle.mainreporoot: internal hack for bundlerepo
-coreconfigitem(
-    b'bundle',
-    b'mainreporoot',
-    default=b'',
-)
-coreconfigitem(
-    b'censor',
-    b'policy',
-    default=b'abort',
-    experimental=True,
-)
-coreconfigitem(
-    b'chgserver',
-    b'idletimeout',
-    default=3600,
-)
-coreconfigitem(
-    b'chgserver',
-    b'skiphash',
-    default=False,
-)
-coreconfigitem(
-    b'cmdserver',
-    b'log',
-    default=None,
-)
-coreconfigitem(
-    b'cmdserver',
-    b'max-log-files',
-    default=7,
-)
-coreconfigitem(
-    b'cmdserver',
-    b'max-log-size',
-    default=b'1 MB',
-)
-coreconfigitem(
-    b'cmdserver',
-    b'max-repo-cache',
-    default=0,
-    experimental=True,
-)
-coreconfigitem(
-    b'cmdserver',
-    b'message-encodings',
-    default=list,
-)
-coreconfigitem(
-    b'cmdserver',
-    b'track-log',
-    default=lambda: [b'chgserver', b'cmdserver', b'repocache'],
-)
-coreconfigitem(
-    b'cmdserver',
-    b'shutdown-on-interrupt',
-    default=True,
-)
-coreconfigitem(
-    b'color',
-    b'.*',
-    default=None,
-    generic=True,
-)
-coreconfigitem(
-    b'color',
-    b'mode',
-    default=b'auto',
-)
-coreconfigitem(
-    b'color',
-    b'pagermode',
-    default=dynamicdefault,
-)
-coreconfigitem(
-    b'command-templates',
-    b'graphnode',
-    default=None,
-    alias=[(b'ui', b'graphnodetemplate')],
-)
-coreconfigitem(
-    b'command-templates',
-    b'log',
-    default=None,
-    alias=[(b'ui', b'logtemplate')],
-)
-coreconfigitem(
-    b'command-templates',
-    b'mergemarker',
-    default=(
-        b'{node|short} '
-        b'{ifeq(tags, "tip", "", '
-        b'ifeq(tags, "", "", "{tags} "))}'
-        b'{if(bookmarks, "{bookmarks} ")}'
-        b'{ifeq(branch, "default", "", "{branch} ")}'
-        b'- {author|user}: {desc|firstline}'
-    ),
-    alias=[(b'ui', b'mergemarkertemplate')],
-)
-coreconfigitem(
-    b'command-templates',
-    b'pre-merge-tool-output',
-    default=None,
-    alias=[(b'ui', b'pre-merge-tool-output-template')],
-)
-coreconfigitem(
-    b'command-templates',
-    b'oneline-summary',
-    default=None,
-)
-coreconfigitem(
-    b'command-templates',
-    b'oneline-summary.*',
-    default=dynamicdefault,
-    generic=True,
-)
-_registerdiffopts(section=b'commands', configprefix=b'commit.interactive.')
-coreconfigitem(
-    b'commands',
-    b'commit.post-status',
-    default=False,
-)
-coreconfigitem(
-    b'commands',
-    b'grep.all-files',
-    default=False,
-    experimental=True,
-)
-coreconfigitem(
-    b'commands',
-    b'merge.require-rev',
-    default=False,
-)
-coreconfigitem(
-    b'commands',
-    b'push.require-revs',
-    default=False,
-)
-coreconfigitem(
-    b'commands',
-    b'resolve.confirm',
-    default=False,
-)
-coreconfigitem(
-    b'commands',
-    b'resolve.explicit-re-merge',
-    default=False,
-)
-coreconfigitem(
-    b'commands',
-    b'resolve.mark-check',
-    default=b'none',
-)
-_registerdiffopts(section=b'commands', configprefix=b'revert.interactive.')
-coreconfigitem(
-    b'commands',
-    b'show.aliasprefix',
-    default=list,
-)
-coreconfigitem(
-    b'commands',
-    b'status.relative',
-    default=False,
-)
-coreconfigitem(
-    b'commands',
-    b'status.skipstates',
-    default=[],
-    experimental=True,
-)
-coreconfigitem(
-    b'commands',
-    b'status.terse',
-    default=b'',
-)
-coreconfigitem(
-    b'commands',
-    b'status.verbose',
-    default=False,
-)
-coreconfigitem(
-    b'commands',
-    b'update.check',
-    default=None,
-)
-coreconfigitem(
-    b'commands',
-    b'update.requiredest',
-    default=False,
-)
-coreconfigitem(
-    b'committemplate',
-    b'.*',
-    default=None,
-    generic=True,
-)
-coreconfigitem(
-    b'convert',
-    b'bzr.saverev',
-    default=True,
-)
-coreconfigitem(
-    b'convert',
-    b'cvsps.cache',
-    default=True,
-)
-coreconfigitem(
-    b'convert',
-    b'cvsps.fuzz',
-    default=60,
-)
-coreconfigitem(
-    b'convert',
-    b'cvsps.logencoding',
-    default=None,
-)
-coreconfigitem(
-    b'convert',
-    b'cvsps.mergefrom',
-    default=None,
-)
-coreconfigitem(
-    b'convert',
-    b'cvsps.mergeto',
-    default=None,
-)
-coreconfigitem(
-    b'convert',
-    b'git.committeractions',
-    default=lambda: [b'messagedifferent'],
-)
-coreconfigitem(
-    b'convert',
-    b'git.extrakeys',
-    default=list,
-)
-coreconfigitem(
-    b'convert',
-    b'git.findcopiesharder',
-    default=False,
-)
-coreconfigitem(
-    b'convert',
-    b'git.remoteprefix',
-    default=b'remote',
-)
-coreconfigitem(
-    b'convert',
-    b'git.renamelimit',
-    default=400,
-)
-coreconfigitem(
-    b'convert',
-    b'git.saverev',
-    default=True,
-)
-coreconfigitem(
-    b'convert',
-    b'git.similarity',
-    default=50,
-)
-coreconfigitem(
-    b'convert',
-    b'git.skipsubmodules',
-    default=False,
-)
-coreconfigitem(
-    b'convert',
-    b'hg.clonebranches',
-    default=False,
-)
-coreconfigitem(
-    b'convert',
-    b'hg.ignoreerrors',
-    default=False,
-)
-coreconfigitem(
-    b'convert',
-    b'hg.preserve-hash',
-    default=False,
-)
-coreconfigitem(
-    b'convert',
-    b'hg.revs',
-    default=None,
-)
-coreconfigitem(
-    b'convert',
-    b'hg.saverev',
-    default=False,
-)
-coreconfigitem(
-    b'convert',
-    b'hg.sourcename',
-    default=None,
-)
-coreconfigitem(
-    b'convert',
-    b'hg.startrev',
-    default=None,
-)
-coreconfigitem(
-    b'convert',
-    b'hg.tagsbranch',
-    default=b'default',
-)
-coreconfigitem(
-    b'convert',
-    b'hg.usebranchnames',
-    default=True,
-)
-coreconfigitem(
-    b'convert',
-    b'ignoreancestorcheck',
-    default=False,
-    experimental=True,
-)
-coreconfigitem(
-    b'convert',
-    b'localtimezone',
-    default=False,
-)
-coreconfigitem(
-    b'convert',
-    b'p4.encoding',
-    default=dynamicdefault,
-)
-coreconfigitem(
-    b'convert',
-    b'p4.startrev',
-    default=0,
-)
-coreconfigitem(
-    b'convert',
-    b'skiptags',
-    default=False,
-)
-coreconfigitem(
-    b'convert',
-    b'svn.debugsvnlog',
-    default=True,
-)
-coreconfigitem(
-    b'convert',
-    b'svn.trunk',
-    default=None,
-)
-coreconfigitem(
-    b'convert',
-    b'svn.tags',
-    default=None,
-)
-coreconfigitem(
-    b'convert',
-    b'svn.branches',
-    default=None,
-)
-coreconfigitem(
-    b'convert',
-    b'svn.startrev',
-    default=0,
-)
-coreconfigitem(
-    b'convert',
-    b'svn.dangerous-set-commit-dates',
-    default=False,
-)
-coreconfigitem(
-    b'debug',
-    b'dirstate.delaywrite',
-    default=0,
-)
-coreconfigitem(
-    b'debug',
-    b'revlog.verifyposition.changelog',
-    default=b'',
-)
-coreconfigitem(
-    b'debug',
-    b'revlog.debug-delta',
-    default=False,
-)
-# display extra information about the bundling process
-coreconfigitem(
-    b'debug',
-    b'bundling-stats',
-    default=False,
-)
-# display extra information about the unbundling process
-coreconfigitem(
-    b'debug',
-    b'unbundling-stats',
-    default=False,
-)
-coreconfigitem(
-    b'defaults',
-    b'.*',
-    default=None,
-    generic=True,
-)
-coreconfigitem(
-    b'devel',
-    b'all-warnings',
-    default=False,
-)
-coreconfigitem(
-    b'devel',
-    b'bundle2.debug',
-    default=False,
-)
-# which kind of delta to put in the bundled changegroup. Possible value
-# - '': use default behavior
-# - p1: force to always use delta against p1
-# - full: force to always use full content
-coreconfigitem(
-    b'devel',
-    b'bundle.delta',
-    default=b'',
-)
-coreconfigitem(
-    b'devel',
-    b'cache-vfs',
-    default=None,
-)
-coreconfigitem(
-    b'devel',
-    b'check-locks',
-    default=False,
-)
-coreconfigitem(
-    b'devel',
-    b'check-relroot',
-    default=False,
-)
-# Track copy information for all file, not just "added" one (very slow)
-coreconfigitem(
-    b'devel',
-    b'copy-tracing.trace-all-files',
-    default=False,
-)
-coreconfigitem(
-    b'devel',
-    b'default-date',
-    default=None,
-)
-coreconfigitem(
-    b'devel',
-    b'deprec-warn',
-    default=False,
-)
-# possible values:
-# - auto (the default)
-# - force-append
-# - force-new
-coreconfigitem(
-    b'devel',
-    b'dirstate.v2.data_update_mode',
-    default="auto",
-)
-coreconfigitem(
-    b'devel',
-    b'disableloaddefaultcerts',
-    default=False,
-)
-coreconfigitem(
-    b'devel',
-    b'warn-empty-changegroup',
-    default=False,
-)
-coreconfigitem(
-    b'devel',
-    b'legacy.exchange',
-    default=list,
-)
-# When True, revlogs use a special reference version of the nodemap, that is not
-# performant but is "known" to behave properly.
-coreconfigitem(
-    b'devel',
-    b'persistent-nodemap',
-    default=False,
-)
-coreconfigitem(
-    b'devel',
-    b'servercafile',
-    default=b'',
-)
-# This config option is intended for use in tests only. It is a giant
-# footgun to kill security. Don't define it.
-coreconfigitem(
-    b'devel',
-    b'server-insecure-exact-protocol',
-    default=b'',
-)
-coreconfigitem(
-    b'devel',
-    b'serverrequirecert',
-    default=False,
-)
-# Makes the status algorithm wait for the existence of this file
-# (or until a timeout of `devel.sync.status.pre-dirstate-write-file-timeout`
-# seconds) before taking the lock and writing the dirstate.
-# Status signals that it's ready to wait by creating a file
-# with the same name + `.waiting`.
-# Useful when testing race conditions.
-coreconfigitem(
-    b'devel',
-    b'sync.status.pre-dirstate-write-file',
-    default=None,
-)
-coreconfigitem(
-    b'devel',
-    b'sync.status.pre-dirstate-write-file-timeout',
-    default=2,
-)
-coreconfigitem(
-    b'devel',
-    b'sync.dirstate.post-docket-read-file',
-    default=None,
-)
-coreconfigitem(
-    b'devel',
-    b'sync.dirstate.post-docket-read-file-timeout',
-    default=2,
-)
-coreconfigitem(
-    b'devel',
-    b'sync.dirstate.pre-read-file',
-    default=None,
-)
-coreconfigitem(
-    b'devel',
-    b'sync.dirstate.pre-read-file-timeout',
-    default=2,
-)
-coreconfigitem(
-    b'devel',
-    b'strip-obsmarkers',
-    default=True,
-)
-coreconfigitem(
-    b'devel',
-    b'warn-config',
-    default=None,
-)
-coreconfigitem(
-    b'devel',
-    b'warn-config-default',
-    default=None,
-)
-coreconfigitem(
-    b'devel',
-    b'user.obsmarker',
-    default=None,
-)
-coreconfigitem(
-    b'devel',
-    b'warn-config-unknown',
-    default=None,
-)
-coreconfigitem(
-    b'devel',
-    b'debug.copies',
-    default=False,
-)
-coreconfigitem(
-    b'devel',
-    b'copy-tracing.multi-thread',
-    default=True,
-)
-coreconfigitem(
-    b'devel',
-    b'debug.extensions',
-    default=False,
-)
-coreconfigitem(
-    b'devel',
-    b'debug.repo-filters',
-    default=False,
-)
-coreconfigitem(
-    b'devel',
-    b'debug.peer-request',
-    default=False,
-)
-# If discovery.exchange-heads is False, the discovery will not start with
-# remote head fetching and local head querying.
-coreconfigitem(
-    b'devel',
-    b'discovery.exchange-heads',
-    default=True,
-)
-# If devel.debug.abort-update is True, then any merge with the working copy,
-# e.g. [hg update], will be aborted after figuring out what needs to be done,
-# but before spawning the parallel worker
-coreconfigitem(
-    b'devel',
-    b'debug.abort-update',
-    default=False,
-)
-# If discovery.grow-sample is False, the sample size used in set discovery will
-# not be increased through the process
-coreconfigitem(
-    b'devel',
-    b'discovery.grow-sample',
-    default=True,
-)
-# When discovery.grow-sample.dynamic is True, the default, the sample size is
-# adapted to the shape of the undecided set (it is set to the max of:
-# <target-size>, len(roots(undecided)), len(heads(undecided)
-coreconfigitem(
-    b'devel',
-    b'discovery.grow-sample.dynamic',
-    default=True,
-)
-# discovery.grow-sample.rate control the rate at which the sample grow
-coreconfigitem(
-    b'devel',
-    b'discovery.grow-sample.rate',
-    default=1.05,
-)
-# If discovery.randomize is False, random sampling during discovery are
-# deterministic. It is meant for integration tests.
-coreconfigitem(
-    b'devel',
-    b'discovery.randomize',
-    default=True,
-)
-# Control the initial size of the discovery sample
-coreconfigitem(
-    b'devel',
-    b'discovery.sample-size',
-    default=200,
-)
-# Control the initial size of the discovery for initial change
-coreconfigitem(
-    b'devel',
-    b'discovery.sample-size.initial',
-    default=100,
-)
-_registerdiffopts(section=b'diff')
-coreconfigitem(
-    b'diff',
-    b'merge',
-    default=False,
-    experimental=True,
-)
-coreconfigitem(
-    b'email',
-    b'bcc',
-    default=None,
-)
-coreconfigitem(
-    b'email',
-    b'cc',
-    default=None,
-)
-coreconfigitem(
-    b'email',
-    b'charsets',
-    default=list,
-)
-coreconfigitem(
-    b'email',
-    b'from',
-    default=None,
-)
-coreconfigitem(
-    b'email',
-    b'method',
-    default=b'smtp',
-)
-coreconfigitem(
-    b'email',
-    b'reply-to',
-    default=None,
-)
-coreconfigitem(
-    b'email',
-    b'to',
-    default=None,
-)
-coreconfigitem(
-    b'experimental',
-    b'archivemetatemplate',
-    default=dynamicdefault,
-)
-coreconfigitem(
-    b'experimental',
-    b'auto-publish',
-    default=b'publish',
-)
-coreconfigitem(
-    b'experimental',
-    b'bundle-phases',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'bundle2-advertise',
-    default=True,
-)
-coreconfigitem(
-    b'experimental',
-    b'bundle2-output-capture',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'bundle2.pushback',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'bundle2lazylocking',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'bundlecomplevel',
-    default=None,
-)
-coreconfigitem(
-    b'experimental',
-    b'bundlecomplevel.bzip2',
-    default=None,
-)
-coreconfigitem(
-    b'experimental',
-    b'bundlecomplevel.gzip',
-    default=None,
-)
-coreconfigitem(
-    b'experimental',
-    b'bundlecomplevel.none',
-    default=None,
-)
-coreconfigitem(
-    b'experimental',
-    b'bundlecomplevel.zstd',
-    default=None,
-)
-coreconfigitem(
-    b'experimental',
-    b'bundlecompthreads',
-    default=None,
-)
-coreconfigitem(
-    b'experimental',
-    b'bundlecompthreads.bzip2',
-    default=None,
-)
-coreconfigitem(
-    b'experimental',
-    b'bundlecompthreads.gzip',
-    default=None,
-)
-coreconfigitem(
-    b'experimental',
-    b'bundlecompthreads.none',
-    default=None,
-)
-coreconfigitem(
-    b'experimental',
-    b'bundlecompthreads.zstd',
-    default=None,
-)
-coreconfigitem(
-    b'experimental',
-    b'changegroup3',
-    default=True,
-)
-coreconfigitem(
-    b'experimental',
-    b'changegroup4',
-    default=False,
-)
-
-# might remove rank configuration once the computation has no impact
-coreconfigitem(
-    b'experimental',
-    b'changelog-v2.compute-rank',
-    default=True,
-)
-coreconfigitem(
-    b'experimental',
-    b'cleanup-as-archived',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'clientcompressionengines',
-    default=list,
-)
-coreconfigitem(
-    b'experimental',
-    b'copytrace',
-    default=b'on',
-)
-coreconfigitem(
-    b'experimental',
-    b'copytrace.movecandidateslimit',
-    default=100,
-)
-coreconfigitem(
-    b'experimental',
-    b'copytrace.sourcecommitlimit',
-    default=100,
-)
-coreconfigitem(
-    b'experimental',
-    b'copies.read-from',
-    default=b"filelog-only",
-)
-coreconfigitem(
-    b'experimental',
-    b'copies.write-to',
-    default=b'filelog-only',
-)
-coreconfigitem(
-    b'experimental',
-    b'crecordtest',
-    default=None,
-)
-coreconfigitem(
-    b'experimental',
-    b'directaccess',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'directaccess.revnums',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'editortmpinhg',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'evolution',
-    default=list,
-)
-coreconfigitem(
-    b'experimental',
-    b'evolution.allowdivergence',
-    default=False,
-    alias=[(b'experimental', b'allowdivergence')],
-)
-coreconfigitem(
-    b'experimental',
-    b'evolution.allowunstable',
-    default=None,
-)
-coreconfigitem(
-    b'experimental',
-    b'evolution.createmarkers',
-    default=None,
-)
-coreconfigitem(
-    b'experimental',
-    b'evolution.effect-flags',
-    default=True,
-    alias=[(b'experimental', b'effect-flags')],
-)
-coreconfigitem(
-    b'experimental',
-    b'evolution.exchange',
-    default=None,
-)
-coreconfigitem(
-    b'experimental',
-    b'evolution.bundle-obsmarker',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'evolution.bundle-obsmarker:mandatory',
-    default=True,
-)
-coreconfigitem(
-    b'experimental',
-    b'log.topo',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'evolution.report-instabilities',
-    default=True,
-)
-coreconfigitem(
-    b'experimental',
-    b'evolution.track-operation',
-    default=True,
-)
-# repo-level config to exclude a revset visibility
-#
-# The target use case is to use `share` to expose different subset of the same
-# repository, especially server side. See also `server.view`.
-coreconfigitem(
-    b'experimental',
-    b'extra-filter-revs',
-    default=None,
-)
-coreconfigitem(
-    b'experimental',
-    b'maxdeltachainspan',
-    default=-1,
-)
-# tracks files which were undeleted (merge might delete them but we explicitly
-# kept/undeleted them) and creates new filenodes for them
-coreconfigitem(
-    b'experimental',
-    b'merge-track-salvaged',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'mmapindexthreshold',
-    default=None,
-)
-coreconfigitem(
-    b'experimental',
-    b'narrow',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'nonnormalparanoidcheck',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'exportableenviron',
-    default=list,
-)
-coreconfigitem(
-    b'experimental',
-    b'extendedheader.index',
-    default=None,
-)
-coreconfigitem(
-    b'experimental',
-    b'extendedheader.similarity',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'graphshorten',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'graphstyle.parent',
-    default=dynamicdefault,
-)
-coreconfigitem(
-    b'experimental',
-    b'graphstyle.missing',
-    default=dynamicdefault,
-)
-coreconfigitem(
-    b'experimental',
-    b'graphstyle.grandparent',
-    default=dynamicdefault,
-)
-coreconfigitem(
-    b'experimental',
-    b'hook-track-tags',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'httppostargs',
-    default=False,
-)
-coreconfigitem(b'experimental', b'nointerrupt', default=False)
-coreconfigitem(b'experimental', b'nointerrupt-interactiveonly', default=True)
-
-coreconfigitem(
-    b'experimental',
-    b'obsmarkers-exchange-debug',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'remotenames',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'removeemptydirs',
-    default=True,
-)
-coreconfigitem(
-    b'experimental',
-    b'revert.interactive.select-to-keep',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'revisions.prefixhexnode',
-    default=False,
-)
-# "out of experimental" todo list.
-#
-# * include management of a persistent nodemap in the main docket
-# * enforce a "no-truncate" policy for mmap safety
-#      - for censoring operation
-#      - for stripping operation
-#      - for rollback operation
-# * proper streaming (race free) of the docket file
-# * track garbage data to evemtually allow rewriting -existing- sidedata.
-# * Exchange-wise, we will also need to do something more efficient than
-#   keeping references to the affected revlogs, especially memory-wise when
-#   rewriting sidedata.
-# * introduce a proper solution to reduce the number of filelog related files.
-# * use caching for reading sidedata (similar to what we do for data).
-# * no longer set offset=0 if sidedata_size=0 (simplify cutoff computation).
-# * Improvement to consider
-#   - avoid compression header in chunk using the default compression?
-#   - forbid "inline" compression mode entirely?
-#   - split the data offset and flag field (the 2 bytes save are mostly trouble)
-#   - keep track of uncompressed -chunk- size (to preallocate memory better)
-#   - keep track of chain base or size (probably not that useful anymore)
-coreconfigitem(
-    b'experimental',
-    b'revlogv2',
-    default=None,
-)
-coreconfigitem(
-    b'experimental',
-    b'revisions.disambiguatewithin',
-    default=None,
-)
-coreconfigitem(
-    b'experimental',
-    b'rust.index',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'server.allow-hidden-access',
-    default=list,
-)
-coreconfigitem(
-    b'experimental',
-    b'server.filesdata.recommended-batch-size',
-    default=50000,
-)
-coreconfigitem(
-    b'experimental',
-    b'server.manifestdata.recommended-batch-size',
-    default=100000,
-)
-coreconfigitem(
-    b'experimental',
-    b'server.stream-narrow-clones',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'single-head-per-branch',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'single-head-per-branch:account-closed-heads',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'single-head-per-branch:public-changes-only',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'sparse-read',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'sparse-read.density-threshold',
-    default=0.50,
-)
-coreconfigitem(
-    b'experimental',
-    b'sparse-read.min-gap-size',
-    default=b'65K',
-)
-coreconfigitem(
-    b'experimental',
-    b'stream-v3',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'treemanifest',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'update.atomic-file',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'web.full-garbage-collection-rate',
-    default=1,  # still forcing a full collection on each request
-)
-coreconfigitem(
-    b'experimental',
-    b'worker.wdir-get-thread-safe',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'worker.repository-upgrade',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'xdiff',
-    default=False,
-)
-coreconfigitem(
-    b'extensions',
-    b'[^:]*',
-    default=None,
-    generic=True,
-)
-coreconfigitem(
-    b'extensions',
-    b'[^:]*:required',
-    default=False,
-    generic=True,
-)
-coreconfigitem(
-    b'extdata',
-    b'.*',
-    default=None,
-    generic=True,
-)
-coreconfigitem(
-    b'format',
-    b'bookmarks-in-store',
-    default=False,
-)
-coreconfigitem(
-    b'format',
-    b'chunkcachesize',
-    default=None,
-    experimental=True,
-)
-coreconfigitem(
-    # Enable this dirstate format *when creating a new repository*.
-    # Which format to use for existing repos is controlled by .hg/requires
-    b'format',
-    b'use-dirstate-v2',
-    default=False,
-    experimental=True,
-    alias=[(b'format', b'exp-rc-dirstate-v2')],
-)
-coreconfigitem(
-    b'format',
-    b'use-dirstate-v2.automatic-upgrade-of-mismatching-repositories',
-    default=False,
-    experimental=True,
-)
-coreconfigitem(
-    b'format',
-    b'use-dirstate-v2.automatic-upgrade-of-mismatching-repositories:quiet',
-    default=False,
-    experimental=True,
-)
-coreconfigitem(
-    b'format',
-    b'use-dirstate-tracked-hint',
-    default=False,
-    experimental=True,
-)
-coreconfigitem(
-    b'format',
-    b'use-dirstate-tracked-hint.version',
-    default=1,
-    experimental=True,
-)
-coreconfigitem(
-    b'format',
-    b'use-dirstate-tracked-hint.automatic-upgrade-of-mismatching-repositories',
-    default=False,
-    experimental=True,
-)
-coreconfigitem(
-    b'format',
-    b'use-dirstate-tracked-hint.automatic-upgrade-of-mismatching-repositories:quiet',
-    default=False,
-    experimental=True,
-)
-coreconfigitem(
-    b'format',
-    b'dotencode',
-    default=True,
-)
-coreconfigitem(
-    b'format',
-    b'generaldelta',
-    default=False,
-    experimental=True,
-)
-coreconfigitem(
-    b'format',
-    b'manifestcachesize',
-    default=None,
-    experimental=True,
-)
-coreconfigitem(
-    b'format',
-    b'maxchainlen',
-    default=dynamicdefault,
-    experimental=True,
-)
-coreconfigitem(
-    b'format',
-    b'obsstore-version',
-    default=None,
-)
-coreconfigitem(
-    b'format',
-    b'sparse-revlog',
-    default=True,
-)
-coreconfigitem(
-    b'format',
-    b'revlog-compression',
-    default=lambda: [b'zstd', b'zlib'],
-    alias=[(b'experimental', b'format.compression')],
-)
-# Experimental TODOs:
-#
-# * Same as for revlogv2 (but for the reduction of the number of files)
-# * Actually computing the rank of changesets
-# * Improvement to investigate
-#   - storing .hgtags fnode
-#   - storing branch related identifier
-
-coreconfigitem(
-    b'format',
-    b'exp-use-changelog-v2',
-    default=None,
-    experimental=True,
-)
-coreconfigitem(
-    b'format',
-    b'usefncache',
-    default=True,
-)
-coreconfigitem(
-    b'format',
-    b'usegeneraldelta',
-    default=True,
-)
-coreconfigitem(
-    b'format',
-    b'usestore',
-    default=True,
-)
-coreconfigitem(
-    b'format',
-    b'use-persistent-nodemap',
-    default=dynamicdefault,
-)
-coreconfigitem(
-    b'format',
-    b'exp-use-copies-side-data-changeset',
-    default=False,
-    experimental=True,
-)
-coreconfigitem(
-    b'format',
-    b'use-share-safe',
-    default=True,
-)
-coreconfigitem(
-    b'format',
-    b'use-share-safe.automatic-upgrade-of-mismatching-repositories',
-    default=False,
-    experimental=True,
-)
-coreconfigitem(
-    b'format',
-    b'use-share-safe.automatic-upgrade-of-mismatching-repositories:quiet',
-    default=False,
-    experimental=True,
-)
-
-# Moving this on by default means we are confident about the scaling of phases.
-# This is not garanteed to be the case at the time this message is written.
-coreconfigitem(
-    b'format',
-    b'use-internal-phase',
-    default=False,
-    experimental=True,
-)
-# The interaction between the archived phase and obsolescence markers needs to
-# be sorted out before wider usage of this are to be considered.
-#
-# At the time this message is written, behavior when archiving obsolete
-# changeset differ significantly from stripping. As part of stripping, we also
-# remove the obsolescence marker associated to the stripped changesets,
-# revealing the precedecessors changesets when applicable. When archiving, we
-# don't touch the obsolescence markers, keeping everything hidden. This can
-# result in quite confusing situation for people combining exchanging draft
-# with the archived phases. As some markers needed by others may be skipped
-# during exchange.
-coreconfigitem(
-    b'format',
-    b'exp-archived-phase',
-    default=False,
-    experimental=True,
-)
-coreconfigitem(
-    b'shelve',
-    b'store',
-    default=b'internal',
-    experimental=True,
-)
-coreconfigitem(
-    b'fsmonitor',
-    b'warn_when_unused',
-    default=True,
-)
-coreconfigitem(
-    b'fsmonitor',
-    b'warn_update_file_count',
-    default=50000,
-)
-coreconfigitem(
-    b'fsmonitor',
-    b'warn_update_file_count_rust',
-    default=400000,
-)
-coreconfigitem(
-    b'help',
-    br'hidden-command\..*',
-    default=False,
-    generic=True,
-)
-coreconfigitem(
-    b'help',
-    br'hidden-topic\..*',
-    default=False,
-    generic=True,
-)
-coreconfigitem(
-    b'hooks',
-    b'[^:]*',
-    default=dynamicdefault,
-    generic=True,
-)
-coreconfigitem(
-    b'hooks',
-    b'.*:run-with-plain',
-    default=True,
-    generic=True,
-)
-coreconfigitem(
-    b'hgweb-paths',
-    b'.*',
-    default=list,
-    generic=True,
-)
-coreconfigitem(
-    b'hostfingerprints',
-    b'.*',
-    default=list,
-    generic=True,
-)
-coreconfigitem(
-    b'hostsecurity',
-    b'ciphers',
-    default=None,
-)
-coreconfigitem(
-    b'hostsecurity',
-    b'minimumprotocol',
-    default=dynamicdefault,
-)
-coreconfigitem(
-    b'hostsecurity',
-    b'.*:minimumprotocol$',
-    default=dynamicdefault,
-    generic=True,
-)
-coreconfigitem(
-    b'hostsecurity',
-    b'.*:ciphers$',
-    default=dynamicdefault,
-    generic=True,
-)
-coreconfigitem(
-    b'hostsecurity',
-    b'.*:fingerprints$',
-    default=list,
-    generic=True,
-)
-coreconfigitem(
-    b'hostsecurity',
-    b'.*:verifycertsfile$',
-    default=None,
-    generic=True,
-)
-
-coreconfigitem(
-    b'http_proxy',
-    b'always',
-    default=False,
-)
-coreconfigitem(
-    b'http_proxy',
-    b'host',
-    default=None,
-)
-coreconfigitem(
-    b'http_proxy',
-    b'no',
-    default=list,
-)
-coreconfigitem(
-    b'http_proxy',
-    b'passwd',
-    default=None,
-)
-coreconfigitem(
-    b'http_proxy',
-    b'user',
-    default=None,
-)
-
-coreconfigitem(
-    b'http',
-    b'timeout',
-    default=None,
-)
-
-coreconfigitem(
-    b'logtoprocess',
-    b'commandexception',
-    default=None,
-)
-coreconfigitem(
-    b'logtoprocess',
-    b'commandfinish',
-    default=None,
-)
-coreconfigitem(
-    b'logtoprocess',
-    b'command',
-    default=None,
-)
-coreconfigitem(
-    b'logtoprocess',
-    b'develwarn',
-    default=None,
-)
-coreconfigitem(
-    b'logtoprocess',
-    b'uiblocked',
-    default=None,
-)
-coreconfigitem(
-    b'merge',
-    b'checkunknown',
-    default=b'abort',
-)
-coreconfigitem(
-    b'merge',
-    b'checkignored',
-    default=b'abort',
-)
-coreconfigitem(
-    b'experimental',
-    b'merge.checkpathconflicts',
-    default=False,
-)
-coreconfigitem(
-    b'merge',
-    b'followcopies',
-    default=True,
-)
-coreconfigitem(
-    b'merge',
-    b'on-failure',
-    default=b'continue',
-)
-coreconfigitem(
-    b'merge',
-    b'preferancestor',
-    default=lambda: [b'*'],
-    experimental=True,
-)
-coreconfigitem(
-    b'merge',
-    b'strict-capability-check',
-    default=False,
-)
-coreconfigitem(
-    b'merge',
-    b'disable-partial-tools',
-    default=False,
-    experimental=True,
-)
-coreconfigitem(
-    b'partial-merge-tools',
-    b'.*',
-    default=None,
-    generic=True,
-    experimental=True,
-)
-coreconfigitem(
-    b'partial-merge-tools',
-    br'.*\.patterns',
-    default=dynamicdefault,
-    generic=True,
-    priority=-1,
-    experimental=True,
-)
-coreconfigitem(
-    b'partial-merge-tools',
-    br'.*\.executable$',
-    default=dynamicdefault,
-    generic=True,
-    priority=-1,
-    experimental=True,
-)
-coreconfigitem(
-    b'partial-merge-tools',
-    br'.*\.order',
-    default=0,
-    generic=True,
-    priority=-1,
-    experimental=True,
-)
-coreconfigitem(
-    b'partial-merge-tools',
-    br'.*\.args',
-    default=b"$local $base $other",
-    generic=True,
-    priority=-1,
-    experimental=True,
-)
-coreconfigitem(
-    b'partial-merge-tools',
-    br'.*\.disable',
-    default=False,
-    generic=True,
-    priority=-1,
-    experimental=True,
-)
-coreconfigitem(
-    b'merge-tools',
-    b'.*',
-    default=None,
-    generic=True,
-)
-coreconfigitem(
-    b'merge-tools',
-    br'.*\.args$',
-    default=b"$local $base $other",
-    generic=True,
-    priority=-1,
-)
-coreconfigitem(
-    b'merge-tools',
-    br'.*\.binary$',
-    default=False,
-    generic=True,
-    priority=-1,
-)
-coreconfigitem(
-    b'merge-tools',
-    br'.*\.check$',
-    default=list,
-    generic=True,
-    priority=-1,
-)
-coreconfigitem(
-    b'merge-tools',
-    br'.*\.checkchanged$',
-    default=False,
-    generic=True,
-    priority=-1,
-)
-coreconfigitem(
-    b'merge-tools',
-    br'.*\.executable$',
-    default=dynamicdefault,
-    generic=True,
-    priority=-1,
-)
-coreconfigitem(
-    b'merge-tools',
-    br'.*\.fixeol$',
-    default=False,
-    generic=True,
-    priority=-1,
-)
-coreconfigitem(
-    b'merge-tools',
-    br'.*\.gui$',
-    default=False,
-    generic=True,
-    priority=-1,
-)
-coreconfigitem(
-    b'merge-tools',
-    br'.*\.mergemarkers$',
-    default=b'basic',
-    generic=True,
-    priority=-1,
-)
-coreconfigitem(
-    b'merge-tools',
-    br'.*\.mergemarkertemplate$',
-    default=dynamicdefault,  # take from command-templates.mergemarker
-    generic=True,
-    priority=-1,
-)
-coreconfigitem(
-    b'merge-tools',
-    br'.*\.priority$',
-    default=0,
-    generic=True,
-    priority=-1,
-)
-coreconfigitem(
-    b'merge-tools',
-    br'.*\.premerge$',
-    default=dynamicdefault,
-    generic=True,
-    priority=-1,
-)
-coreconfigitem(
-    b'merge-tools',
-    br'.*\.regappend$',
-    default=b"",
-    generic=True,
-    priority=-1,
-)
-coreconfigitem(
-    b'merge-tools',
-    br'.*\.symlink$',
-    default=False,
-    generic=True,
-    priority=-1,
-)
-coreconfigitem(
-    b'pager',
-    b'attend-.*',
-    default=dynamicdefault,
-    generic=True,
-)
-coreconfigitem(
-    b'pager',
-    b'ignore',
-    default=list,
-)
-coreconfigitem(
-    b'pager',
-    b'pager',
-    default=dynamicdefault,
-)
-coreconfigitem(
-    b'patch',
-    b'eol',
-    default=b'strict',
-)
-coreconfigitem(
-    b'patch',
-    b'fuzz',
-    default=2,
-)
-coreconfigitem(
-    b'paths',
-    b'default',
-    default=None,
-)
-coreconfigitem(
-    b'paths',
-    b'default-push',
-    default=None,
-)
-coreconfigitem(
-    b'paths',
-    b'[^:]*',
-    default=None,
-    generic=True,
-)
-coreconfigitem(
-    b'paths',
-    b'.*:bookmarks.mode',
-    default='default',
-    generic=True,
-)
-coreconfigitem(
-    b'paths',
-    b'.*:multi-urls',
-    default=False,
-    generic=True,
-)
-coreconfigitem(
-    b'paths',
-    b'.*:pushrev',
-    default=None,
-    generic=True,
-)
-coreconfigitem(
-    b'paths',
-    b'.*:pushurl',
-    default=None,
-    generic=True,
-)
-coreconfigitem(
-    b'paths',
-    b'.*:pulled-delta-reuse-policy',
-    default=None,
-    generic=True,
-)
-coreconfigitem(
-    b'phases',
-    b'checksubrepos',
-    default=b'follow',
-)
-coreconfigitem(
-    b'phases',
-    b'new-commit',
-    default=b'draft',
-)
-coreconfigitem(
-    b'phases',
-    b'publish',
-    default=True,
-)
-coreconfigitem(
-    b'profiling',
-    b'enabled',
-    default=False,
-)
-coreconfigitem(
-    b'profiling',
-    b'format',
-    default=b'text',
-)
-coreconfigitem(
-    b'profiling',
-    b'freq',
-    default=1000,
-)
-coreconfigitem(
-    b'profiling',
-    b'limit',
-    default=30,
-)
-coreconfigitem(
-    b'profiling',
-    b'nested',
-    default=0,
-)
-coreconfigitem(
-    b'profiling',
-    b'output',
-    default=None,
-)
-coreconfigitem(
-    b'profiling',
-    b'showmax',
-    default=0.999,
-)
-coreconfigitem(
-    b'profiling',
-    b'showmin',
-    default=dynamicdefault,
-)
-coreconfigitem(
-    b'profiling',
-    b'showtime',
-    default=True,
-)
-coreconfigitem(
-    b'profiling',
-    b'sort',
-    default=b'inlinetime',
-)
-coreconfigitem(
-    b'profiling',
-    b'statformat',
-    default=b'hotpath',
-)
-coreconfigitem(
-    b'profiling',
-    b'time-track',
-    default=dynamicdefault,
-)
-coreconfigitem(
-    b'profiling',
-    b'type',
-    default=b'stat',
-)
-coreconfigitem(
-    b'progress',
-    b'assume-tty',
-    default=False,
-)
-coreconfigitem(
-    b'progress',
-    b'changedelay',
-    default=1,
-)
-coreconfigitem(
-    b'progress',
-    b'clear-complete',
-    default=True,
-)
-coreconfigitem(
-    b'progress',
-    b'debug',
-    default=False,
-)
-coreconfigitem(
-    b'progress',
-    b'delay',
-    default=3,
-)
-coreconfigitem(
-    b'progress',
-    b'disable',
-    default=False,
-)
-coreconfigitem(
-    b'progress',
-    b'estimateinterval',
-    default=60.0,
-)
-coreconfigitem(
-    b'progress',
-    b'format',
-    default=lambda: [b'topic', b'bar', b'number', b'estimate'],
-)
-coreconfigitem(
-    b'progress',
-    b'refresh',
-    default=0.1,
-)
-coreconfigitem(
-    b'progress',
-    b'width',
-    default=dynamicdefault,
-)
-coreconfigitem(
-    b'pull',
-    b'confirm',
-    default=False,
-)
-coreconfigitem(
-    b'push',
-    b'pushvars.server',
-    default=False,
-)
-coreconfigitem(
-    b'rewrite',
-    b'backup-bundle',
-    default=True,
-    alias=[(b'ui', b'history-editing-backup')],
-)
-coreconfigitem(
-    b'rewrite',
-    b'update-timestamp',
-    default=False,
-)
-coreconfigitem(
-    b'rewrite',
-    b'empty-successor',
-    default=b'skip',
-    experimental=True,
-)
-# experimental as long as format.use-dirstate-v2 is.
-coreconfigitem(
-    b'storage',
-    b'dirstate-v2.slow-path',
-    default=b"abort",
-    experimental=True,
-)
-coreconfigitem(
-    b'storage',
-    b'new-repo-backend',
-    default=b'revlogv1',
-    experimental=True,
-)
-coreconfigitem(
-    b'storage',
-    b'revlog.optimize-delta-parent-choice',
-    default=True,
-    alias=[(b'format', b'aggressivemergedeltas')],
-)
-coreconfigitem(
-    b'storage',
-    b'revlog.delta-parent-search.candidate-group-chunk-size',
-    default=20,
-)
-coreconfigitem(
-    b'storage',
-    b'revlog.issue6528.fix-incoming',
-    default=True,
-)
-# experimental as long as rust is experimental (or a C version is implemented)
-coreconfigitem(
-    b'storage',
-    b'revlog.persistent-nodemap.mmap',
-    default=True,
-)
-# experimental as long as format.use-persistent-nodemap is.
-coreconfigitem(
-    b'storage',
-    b'revlog.persistent-nodemap.slow-path',
-    default=b"abort",
-)
-
-coreconfigitem(
-    b'storage',
-    b'revlog.reuse-external-delta',
-    default=True,
-)
-# This option is True unless `format.generaldelta` is set.
-coreconfigitem(
-    b'storage',
-    b'revlog.reuse-external-delta-parent',
-    default=None,
-)
-coreconfigitem(
-    b'storage',
-    b'revlog.zlib.level',
-    default=None,
-)
-coreconfigitem(
-    b'storage',
-    b'revlog.zstd.level',
-    default=None,
-)
-coreconfigitem(
-    b'server',
-    b'bookmarks-pushkey-compat',
-    default=True,
-)
-coreconfigitem(
-    b'server',
-    b'bundle1',
-    default=True,
-)
-coreconfigitem(
-    b'server',
-    b'bundle1gd',
-    default=None,
-)
-coreconfigitem(
-    b'server',
-    b'bundle1.pull',
-    default=None,
-)
-coreconfigitem(
-    b'server',
-    b'bundle1gd.pull',
-    default=None,
-)
-coreconfigitem(
-    b'server',
-    b'bundle1.push',
-    default=None,
-)
-coreconfigitem(
-    b'server',
-    b'bundle1gd.push',
-    default=None,
-)
-coreconfigitem(
-    b'server',
-    b'bundle2.stream',
-    default=True,
-    alias=[(b'experimental', b'bundle2.stream')],
-)
-coreconfigitem(
-    b'server',
-    b'compressionengines',
-    default=list,
-)
-coreconfigitem(
-    b'server',
-    b'concurrent-push-mode',
-    default=b'check-related',
-)
-coreconfigitem(
-    b'server',
-    b'disablefullbundle',
-    default=False,
-)
-coreconfigitem(
-    b'server',
-    b'maxhttpheaderlen',
-    default=1024,
-)
-coreconfigitem(
-    b'server',
-    b'pullbundle',
-    default=True,
-)
-coreconfigitem(
-    b'server',
-    b'preferuncompressed',
-    default=False,
-)
-coreconfigitem(
-    b'server',
-    b'streamunbundle',
-    default=False,
-)
-coreconfigitem(
-    b'server',
-    b'uncompressed',
-    default=True,
-)
-coreconfigitem(
-    b'server',
-    b'uncompressedallowsecret',
-    default=False,
-)
-coreconfigitem(
-    b'server',
-    b'view',
-    default=b'served',
-)
-coreconfigitem(
-    b'server',
-    b'validate',
-    default=False,
-)
-coreconfigitem(
-    b'server',
-    b'zliblevel',
-    default=-1,
-)
-coreconfigitem(
-    b'server',
-    b'zstdlevel',
-    default=3,
-)
-coreconfigitem(
-    b'share',
-    b'pool',
-    default=None,
-)
-coreconfigitem(
-    b'share',
-    b'poolnaming',
-    default=b'identity',
-)
-coreconfigitem(
-    b'share',
-    b'safe-mismatch.source-not-safe',
-    default=b'abort',
-)
-coreconfigitem(
-    b'share',
-    b'safe-mismatch.source-safe',
-    default=b'abort',
-)
-coreconfigitem(
-    b'share',
-    b'safe-mismatch.source-not-safe.warn',
-    default=True,
-)
-coreconfigitem(
-    b'share',
-    b'safe-mismatch.source-safe.warn',
-    default=True,
-)
-coreconfigitem(
-    b'share',
-    b'safe-mismatch.source-not-safe:verbose-upgrade',
-    default=True,
-)
-coreconfigitem(
-    b'share',
-    b'safe-mismatch.source-safe:verbose-upgrade',
-    default=True,
-)
-coreconfigitem(
-    b'shelve',
-    b'maxbackups',
-    default=10,
-)
-coreconfigitem(
-    b'smtp',
-    b'host',
-    default=None,
-)
-coreconfigitem(
-    b'smtp',
-    b'local_hostname',
-    default=None,
-)
-coreconfigitem(
-    b'smtp',
-    b'password',
-    default=None,
-)
-coreconfigitem(
-    b'smtp',
-    b'port',
-    default=dynamicdefault,
-)
-coreconfigitem(
-    b'smtp',
-    b'tls',
-    default=b'none',
-)
-coreconfigitem(
-    b'smtp',
-    b'username',
-    default=None,
-)
-coreconfigitem(
-    b'sparse',
-    b'missingwarning',
-    default=True,
-    experimental=True,
-)
-coreconfigitem(
-    b'subrepos',
-    b'allowed',
-    default=dynamicdefault,  # to make backporting simpler
-)
-coreconfigitem(
-    b'subrepos',
-    b'hg:allowed',
-    default=dynamicdefault,
-)
-coreconfigitem(
-    b'subrepos',
-    b'git:allowed',
-    default=dynamicdefault,
-)
-coreconfigitem(
-    b'subrepos',
-    b'svn:allowed',
-    default=dynamicdefault,
-)
-coreconfigitem(
-    b'templates',
-    b'.*',
-    default=None,
-    generic=True,
-)
-coreconfigitem(
-    b'templateconfig',
-    b'.*',
-    default=dynamicdefault,
-    generic=True,
-)
-coreconfigitem(
-    b'trusted',
-    b'groups',
-    default=list,
-)
-coreconfigitem(
-    b'trusted',
-    b'users',
-    default=list,
-)
-coreconfigitem(
-    b'ui',
-    b'_usedassubrepo',
-    default=False,
-)
-coreconfigitem(
-    b'ui',
-    b'allowemptycommit',
-    default=False,
-)
-coreconfigitem(
-    b'ui',
-    b'archivemeta',
-    default=True,
-)
-coreconfigitem(
-    b'ui',
-    b'askusername',
-    default=False,
-)
-coreconfigitem(
-    b'ui',
-    b'available-memory',
-    default=None,
-)
-
-coreconfigitem(
-    b'ui',
-    b'clonebundlefallback',
-    default=False,
-)
-coreconfigitem(
-    b'ui',
-    b'clonebundleprefers',
-    default=list,
-)
-coreconfigitem(
-    b'ui',
-    b'clonebundles',
-    default=True,
-)
-coreconfigitem(
-    b'ui',
-    b'color',
-    default=b'auto',
-)
-coreconfigitem(
-    b'ui',
-    b'commitsubrepos',
-    default=False,
-)
-coreconfigitem(
-    b'ui',
-    b'debug',
-    default=False,
-)
-coreconfigitem(
-    b'ui',
-    b'debugger',
-    default=None,
-)
-coreconfigitem(
-    b'ui',
-    b'editor',
-    default=dynamicdefault,
-)
-coreconfigitem(
-    b'ui',
-    b'detailed-exit-code',
-    default=False,
-    experimental=True,
-)
-coreconfigitem(
-    b'ui',
-    b'fallbackencoding',
-    default=None,
-)
-coreconfigitem(
-    b'ui',
-    b'forcecwd',
-    default=None,
-)
-coreconfigitem(
-    b'ui',
-    b'forcemerge',
-    default=None,
-)
-coreconfigitem(
-    b'ui',
-    b'formatdebug',
-    default=False,
-)
-coreconfigitem(
-    b'ui',
-    b'formatjson',
-    default=False,
-)
-coreconfigitem(
-    b'ui',
-    b'formatted',
-    default=None,
-)
-coreconfigitem(
-    b'ui',
-    b'interactive',
-    default=None,
-)
-coreconfigitem(
-    b'ui',
-    b'interface',
-    default=None,
-)
-coreconfigitem(
-    b'ui',
-    b'interface.chunkselector',
-    default=None,
-)
-coreconfigitem(
-    b'ui',
-    b'large-file-limit',
-    default=10 * (2 ** 20),
-)
-coreconfigitem(
-    b'ui',
-    b'logblockedtimes',
-    default=False,
-)
-coreconfigitem(
-    b'ui',
-    b'merge',
-    default=None,
-)
-coreconfigitem(
-    b'ui',
-    b'mergemarkers',
-    default=b'basic',
-)
-coreconfigitem(
-    b'ui',
-    b'message-output',
-    default=b'stdio',
-)
-coreconfigitem(
-    b'ui',
-    b'nontty',
-    default=False,
-)
-coreconfigitem(
-    b'ui',
-    b'origbackuppath',
-    default=None,
-)
-coreconfigitem(
-    b'ui',
-    b'paginate',
-    default=True,
-)
-coreconfigitem(
-    b'ui',
-    b'patch',
-    default=None,
-)
-coreconfigitem(
-    b'ui',
-    b'portablefilenames',
-    default=b'warn',
-)
-coreconfigitem(
-    b'ui',
-    b'promptecho',
-    default=False,
-)
-coreconfigitem(
-    b'ui',
-    b'quiet',
-    default=False,
-)
-coreconfigitem(
-    b'ui',
-    b'quietbookmarkmove',
-    default=False,
-)
-coreconfigitem(
-    b'ui',
-    b'relative-paths',
-    default=b'legacy',
-)
-coreconfigitem(
-    b'ui',
-    b'remotecmd',
-    default=b'hg',
-)
-coreconfigitem(
-    b'ui',
-    b'report_untrusted',
-    default=True,
-)
-coreconfigitem(
-    b'ui',
-    b'rollback',
-    default=True,
-)
-coreconfigitem(
-    b'ui',
-    b'signal-safe-lock',
-    default=True,
-)
-coreconfigitem(
-    b'ui',
-    b'slash',
-    default=False,
-)
-coreconfigitem(
-    b'ui',
-    b'ssh',
-    default=b'ssh',
-)
-coreconfigitem(
-    b'ui',
-    b'ssherrorhint',
-    default=None,
-)
-coreconfigitem(
-    b'ui',
-    b'statuscopies',
-    default=False,
-)
-coreconfigitem(
-    b'ui',
-    b'strict',
-    default=False,
-)
-coreconfigitem(
-    b'ui',
-    b'style',
-    default=b'',
-)
-coreconfigitem(
-    b'ui',
-    b'supportcontact',
-    default=None,
-)
-coreconfigitem(
-    b'ui',
-    b'textwidth',
-    default=78,
-)
-coreconfigitem(
-    b'ui',
-    b'timeout',
-    default=b'600',
-)
-coreconfigitem(
-    b'ui',
-    b'timeout.warn',
-    default=0,
-)
-coreconfigitem(
-    b'ui',
-    b'timestamp-output',
-    default=False,
-)
-coreconfigitem(
-    b'ui',
-    b'traceback',
-    default=False,
-)
-coreconfigitem(
-    b'ui',
-    b'tweakdefaults',
-    default=False,
-)
-coreconfigitem(b'ui', b'username', alias=[(b'ui', b'user')])
-coreconfigitem(
-    b'ui',
-    b'verbose',
-    default=False,
-)
-coreconfigitem(
-    b'verify',
-    b'skipflags',
-    default=0,
-)
-coreconfigitem(
-    b'web',
-    b'allowbz2',
-    default=False,
-)
-coreconfigitem(
-    b'web',
-    b'allowgz',
-    default=False,
-)
-coreconfigitem(
-    b'web',
-    b'allow-pull',
-    alias=[(b'web', b'allowpull')],
-    default=True,
-)
-coreconfigitem(
-    b'web',
-    b'allow-push',
-    alias=[(b'web', b'allow_push')],
-    default=list,
-)
-coreconfigitem(
-    b'web',
-    b'allowzip',
-    default=False,
-)
-coreconfigitem(
-    b'web',
-    b'archivesubrepos',
-    default=False,
-)
-coreconfigitem(
-    b'web',
-    b'cache',
-    default=True,
-)
-coreconfigitem(
-    b'web',
-    b'comparisoncontext',
-    default=5,
-)
-coreconfigitem(
-    b'web',
-    b'contact',
-    default=None,
-)
-coreconfigitem(
-    b'web',
-    b'deny_push',
-    default=list,
-)
-coreconfigitem(
-    b'web',
-    b'guessmime',
-    default=False,
-)
-coreconfigitem(
-    b'web',
-    b'hidden',
-    default=False,
-)
-coreconfigitem(
-    b'web',
-    b'labels',
-    default=list,
-)
-coreconfigitem(
-    b'web',
-    b'logoimg',
-    default=b'hglogo.png',
-)
-coreconfigitem(
-    b'web',
-    b'logourl',
-    default=b'https://mercurial-scm.org/',
-)
-coreconfigitem(
-    b'web',
-    b'accesslog',
-    default=b'-',
-)
-coreconfigitem(
-    b'web',
-    b'address',
-    default=b'',
-)
-coreconfigitem(
-    b'web',
-    b'allow-archive',
-    alias=[(b'web', b'allow_archive')],
-    default=list,
-)
-coreconfigitem(
-    b'web',
-    b'allow_read',
-    default=list,
-)
-coreconfigitem(
-    b'web',
-    b'baseurl',
-    default=None,
-)
-coreconfigitem(
-    b'web',
-    b'cacerts',
-    default=None,
-)
-coreconfigitem(
-    b'web',
-    b'certificate',
-    default=None,
-)
-coreconfigitem(
-    b'web',
-    b'collapse',
-    default=False,
-)
-coreconfigitem(
-    b'web',
-    b'csp',
-    default=None,
-)
-coreconfigitem(
-    b'web',
-    b'deny_read',
-    default=list,
-)
-coreconfigitem(
-    b'web',
-    b'descend',
-    default=True,
-)
-coreconfigitem(
-    b'web',
-    b'description',
-    default=b"",
-)
-coreconfigitem(
-    b'web',
-    b'encoding',
-    default=lambda: encoding.encoding,
-)
-coreconfigitem(
-    b'web',
-    b'errorlog',
-    default=b'-',
-)
-coreconfigitem(
-    b'web',
-    b'ipv6',
-    default=False,
-)
-coreconfigitem(
-    b'web',
-    b'maxchanges',
-    default=10,
-)
-coreconfigitem(
-    b'web',
-    b'maxfiles',
-    default=10,
-)
-coreconfigitem(
-    b'web',
-    b'maxshortchanges',
-    default=60,
-)
-coreconfigitem(
-    b'web',
-    b'motd',
-    default=b'',
-)
-coreconfigitem(
-    b'web',
-    b'name',
-    default=dynamicdefault,
-)
-coreconfigitem(
-    b'web',
-    b'port',
-    default=8000,
-)
-coreconfigitem(
-    b'web',
-    b'prefix',
-    default=b'',
-)
-coreconfigitem(
-    b'web',
-    b'push_ssl',
-    default=True,
-)
-coreconfigitem(
-    b'web',
-    b'refreshinterval',
-    default=20,
-)
-coreconfigitem(
-    b'web',
-    b'server-header',
-    default=None,
-)
-coreconfigitem(
-    b'web',
-    b'static',
-    default=None,
-)
-coreconfigitem(
-    b'web',
-    b'staticurl',
-    default=None,
-)
-coreconfigitem(
-    b'web',
-    b'stripes',
-    default=1,
-)
-coreconfigitem(
-    b'web',
-    b'style',
-    default=b'paper',
-)
-coreconfigitem(
-    b'web',
-    b'templates',
-    default=None,
-)
-coreconfigitem(
-    b'web',
-    b'view',
-    default=b'served',
-    experimental=True,
-)
-coreconfigitem(
-    b'worker',
-    b'backgroundclose',
-    default=dynamicdefault,
-)
-# Windows defaults to a limit of 512 open files. A buffer of 128
-# should give us enough headway.
-coreconfigitem(
-    b'worker',
-    b'backgroundclosemaxqueue',
-    default=384,
-)
-coreconfigitem(
-    b'worker',
-    b'backgroundcloseminfilecount',
-    default=2048,
-)
-coreconfigitem(
-    b'worker',
-    b'backgroundclosethreadcount',
-    default=4,
-)
-coreconfigitem(
-    b'worker',
-    b'enabled',
-    default=True,
-)
-coreconfigitem(
-    b'worker',
-    b'numcpus',
-    default=None,
-)
-
-# Rebase related configuration moved to core because other extension are doing
-# strange things. For example, shelve import the extensions to reuse some bit
-# without formally loading it.
-coreconfigitem(
-    b'commands',
-    b'rebase.requiredest',
-    default=False,
-)
-coreconfigitem(
-    b'experimental',
-    b'rebaseskipobsolete',
-    default=True,
-)
-coreconfigitem(
-    b'rebase',
-    b'singletransaction',
-    default=False,
-)
-coreconfigitem(
-    b'rebase',
-    b'experimental.inmemory',
-    default=False,
-)
-
-# This setting controls creation of a rebase_source extra field
-# during rebase. When False, no such field is created. This is
-# useful eg for incrementally converting changesets and then
-# rebasing them onto an existing repo.
-# WARNING: this is an advanced setting reserved for people who know
-# exactly what they are doing. Misuse of this setting can easily
-# result in obsmarker cycles and a vivid headache.
-coreconfigitem(
-    b'rebase',
-    b'store-source',
-    default=True,
-    experimental=True,
-)
+import_configitems_from_file()