rust-index: using `hg::index::Index` in `hg-cpython::dagops`
Hooking `headrevs` to the Rust index is straightforward as long as
we go the `PySharedRef` way. Direct attempts of obtaining a reference
to the inner `hg::index::Index` fail for lifetime reasons: the reference
is bound to the GIL, yet the `as_set` local variable is considered to
be static (the borrow checker clearly does not realize or care that this
set only stores `Revision` values).
In `rank()`, the chosen solution is the simplest as far as `hg-cpython` is
concerned, but it has the defect of removing an implementation
that would be easily adaptable if the core index did implement `RankedGraph`
(returning the same error as long as only `REVLOGV1` is supported), but that
would introduce a direct dependency of `hg-core` on the ``vcsgraph` crate.
# configitems.toml - centralized declaration of configuration options
#
# This file contains declarations of the core Mercurial configuration options.
#
# # Structure
#
# items: array of config items
# templates: mapping of template name to template declaration
# template-applications: array of template applications
#
# # Elements
#
# ## Item
#
# Declares a core Mercurial option.
#
# - section: string (required)
# - name: string (required)
# - default-type: boolean, changes how `default` is read
# - default: any
# - generic: boolean
# - priority: integer, only if `generic` is true
# - alias: list of 2-tuples of strings
# - experimental: boolean
# - documentation: string
# - in_core_extension: string
#
# ## Template
#
# Declares a group of options to be re-used for multiple sections.
#
# - all the same fields as `Item`, except `section` and `name`
# - `suffix` (string, required)
#
# ## Template applications
#
# Uses a `Template` to instanciate its options in a given section.
#
# - template: string (required, must match a `Template` name)
# - section: string (required)
[[items]]
section = "alias"
name = ".*"
default-type = "dynamic"
generic = true
[[items]]
section = "auth"
name = "cookiefile"
# bookmarks.pushing: internal hack for discovery
[[items]]
section = "bookmarks"
name = "pushing"
default-type = "list_type"
# bundle.mainreporoot: internal hack for bundlerepo
[[items]]
section = "bundle"
name = "mainreporoot"
default = ""
[[items]]
section = "censor"
name = "policy"
default = "abort"
experimental = true
[[items]]
section = "chgserver"
name = "idletimeout"
default = 3600
[[items]]
section = "chgserver"
name = "skiphash"
default = false
[[items]]
section = "cmdserver"
name = "log"
[[items]]
section = "cmdserver"
name = "max-log-files"
default = 7
[[items]]
section = "cmdserver"
name = "max-log-size"
default = "1 MB"
[[items]]
section = "cmdserver"
name = "max-repo-cache"
default = 0
experimental = true
[[items]]
section = "cmdserver"
name = "message-encodings"
default-type = "list_type"
[[items]]
section = "cmdserver"
name = "shutdown-on-interrupt"
default = true
[[items]]
section = "cmdserver"
name = "track-log"
default-type = "lambda"
default = [ "chgserver", "cmdserver", "repocache",]
[[items]]
section = "color"
name = ".*"
generic = true
[[items]]
section = "color"
name = "mode"
default = "auto"
[[items]]
section = "color"
name = "pagermode"
default-type = "dynamic"
[[items]]
section = "command-templates"
name = "graphnode"
alias = [["ui", "graphnodetemplate"]]
[[items]]
section = "command-templates"
name = "log"
alias = [["ui", "logtemplate"]]
[[items]]
section = "command-templates"
name = "mergemarker"
default = '{node|short} {ifeq(tags, "tip", "", ifeq(tags, "", "", "{tags} "))}{if(bookmarks, "{bookmarks} ")}{ifeq(branch, "default", "", "{branch} ")}- {author|user}: {desc|firstline}'
alias = [["ui", "mergemarkertemplate"]]
[[items]]
section = "command-templates"
name = "oneline-summary"
[[items]]
section = "command-templates"
name = "oneline-summary.*"
default-type = "dynamic"
generic = true
[[items]]
section = "command-templates"
name = "pre-merge-tool-output"
alias = [["ui", "pre-merge-tool-output-template"]]
[[items]]
section = "commands"
name = "commit.post-status"
default = false
[[items]]
section = "commands"
name = "grep.all-files"
default = false
experimental = true
[[items]]
section = "commands"
name = "merge.require-rev"
default = false
[[items]]
section = "commands"
name = "push.require-revs"
default = false
# 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.
[[items]]
section = "commands"
name = "rebase.requiredest"
default = false
[[items]]
section = "commands"
name = "resolve.confirm"
default = false
[[items]]
section = "commands"
name = "resolve.explicit-re-merge"
default = false
[[items]]
section = "commands"
name = "resolve.mark-check"
default = "none"
[[items]]
section = "commands"
name = "show.aliasprefix"
default-type = "list_type"
[[items]]
section = "commands"
name = "status.relative"
default = false
[[items]]
section = "commands"
name = "status.skipstates"
default = []
experimental = true
[[items]]
section = "commands"
name = "status.terse"
default = ""
[[items]]
section = "commands"
name = "status.verbose"
default = false
[[items]]
section = "commands"
name = "update.check"
[[items]]
section = "commands"
name = "update.requiredest"
default = false
[[items]]
section = "committemplate"
name = ".*"
generic = true
[[items]]
section = "convert"
name = "bzr.saverev"
default = true
[[items]]
section = "convert"
name = "cvsps.cache"
default = true
[[items]]
section = "convert"
name = "cvsps.fuzz"
default = 60
[[items]]
section = "convert"
name = "cvsps.logencoding"
[[items]]
section = "convert"
name = "cvsps.mergefrom"
[[items]]
section = "convert"
name = "cvsps.mergeto"
[[items]]
section = "convert"
name = "git.committeractions"
default-type = "lambda"
default = [ "messagedifferent",]
[[items]]
section = "convert"
name = "git.extrakeys"
default-type = "list_type"
[[items]]
section = "convert"
name = "git.findcopiesharder"
default = false
[[items]]
section = "convert"
name = "git.remoteprefix"
default = "remote"
[[items]]
section = "convert"
name = "git.renamelimit"
default = 400
[[items]]
section = "convert"
name = "git.saverev"
default = true
[[items]]
section = "convert"
name = "git.similarity"
default = 50
[[items]]
section = "convert"
name = "git.skipsubmodules"
default = false
[[items]]
section = "convert"
name = "hg.clonebranches"
default = false
[[items]]
section = "convert"
name = "hg.ignoreerrors"
default = false
[[items]]
section = "convert"
name = "hg.preserve-hash"
default = false
[[items]]
section = "convert"
name = "hg.revs"
[[items]]
section = "convert"
name = "hg.saverev"
default = false
[[items]]
section = "convert"
name = "hg.sourcename"
[[items]]
section = "convert"
name = "hg.startrev"
[[items]]
section = "convert"
name = "hg.tagsbranch"
default = "default"
[[items]]
section = "convert"
name = "hg.usebranchnames"
default = true
[[items]]
section = "convert"
name = "ignoreancestorcheck"
default = false
experimental = true
[[items]]
section = "convert"
name = "localtimezone"
default = false
[[items]]
section = "convert"
name = "p4.encoding"
default-type = "dynamic"
[[items]]
section = "convert"
name = "p4.startrev"
default = 0
[[items]]
section = "convert"
name = "skiptags"
default = false
[[items]]
section = "convert"
name = "svn.branches"
[[items]]
section = "convert"
name = "svn.dangerous-set-commit-dates"
default = false
[[items]]
section = "convert"
name = "svn.debugsvnlog"
default = true
[[items]]
section = "convert"
name = "svn.startrev"
default = 0
[[items]]
section = "convert"
name = "svn.tags"
[[items]]
section = "convert"
name = "svn.trunk"
[[items]]
section = "debug"
name = "bundling-stats"
default = false
documentation = "Display extra information about the bundling process."
[[items]]
section = "debug"
name = "dirstate.delaywrite"
default = 0
[[items]]
section = "debug"
name = "revlog.debug-delta"
default = false
[[items]]
section = "debug"
name = "revlog.verifyposition.changelog"
default = ""
[[items]]
section = "debug"
name = "unbundling-stats"
default = false
documentation = "Display extra information about the unbundling process."
[[items]]
section = "defaults"
name = ".*"
generic = true
[[items]]
section = "devel"
name = "all-warnings"
default = false
[[items]]
section = "devel"
name = "bundle.delta"
default = ""
[[items]]
section = "devel"
name = "bundle2.debug"
default = false
[[items]]
section = "devel"
name = "cache-vfs"
[[items]]
section = "devel"
name = "check-locks"
default = false
[[items]]
section = "devel"
name = "check-relroot"
default = false
[[items]]
section = "devel"
name = "copy-tracing.multi-thread"
default = true
# Track copy information for all files, not just "added" ones (very slow)
[[items]]
section = "devel"
name = "copy-tracing.trace-all-files"
default = false
[[items]]
section = "devel"
name = "debug.abort-update"
default = false
documentation = """If 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."""
[[items]]
section = "devel"
name = "debug.copies"
default = false
[[items]]
section = "devel"
name = "debug.extensions"
default = false
[[items]]
section = "devel"
name = "debug.peer-request"
default = false
[[items]]
section = "devel"
name = "debug.repo-filters"
default = false
[[items]]
section = "devel"
name = "default-date"
[[items]]
section = "devel"
name = "deprec-warn"
default = false
# possible values:
# - auto (the default)
# - force-append
# - force-new
[[items]]
section = "devel"
name = "dirstate.v2.data_update_mode"
default = "auto"
[[items]]
section = "devel"
name = "disableloaddefaultcerts"
default = false
[[items]]
section = "devel"
name = "discovery.exchange-heads"
default = true
documentation = """If false, the discovery will not start with remote \
head fetching and local head querying."""
[[items]]
section = "devel"
name = "discovery.grow-sample"
default = true
documentation = """If false, the sample size used in set discovery \
will not be increased through the process."""
[[items]]
section = "devel"
name = "discovery.grow-sample.dynamic"
default = true
documentation = """If 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))`"""
[[items]]
section = "devel"
name = "discovery.grow-sample.rate"
default = 1.05
documentation = "Controls the rate at which the sample grows."
[[items]]
section = "devel"
name = "discovery.randomize"
default = true
documentation = """If false, random samplings during discovery are deterministic. \
It is meant for integration tests."""
[[items]]
section = "devel"
name = "discovery.sample-size"
default = 200
documentation = "Controls the initial size of the discovery sample."
[[items]]
section = "devel"
name = "discovery.sample-size.initial"
default = 100
documentation = "Controls the initial size of the discovery for initial change."
[[items]]
section = "devel"
name = "legacy.exchange"
default-type = "list_type"
[[items]]
section = "devel"
name = "persistent-nodemap"
default = false
documentation = """When true, revlogs use a special reference version of the \
nodemap, that is not performant but is "known" to behave properly."""
[[items]]
section = "devel"
name = "server-insecure-exact-protocol"
default = ""
[[items]]
section = "devel"
name = "servercafile"
default = ""
[[items]]
section = "devel"
name = "serverexactprotocol"
default = ""
[[items]]
section = "devel"
name = "serverrequirecert"
default = false
[[items]]
section = "devel"
name = "strip-obsmarkers"
default = true
[[items]]
section = 'devel'
name = 'sync.status.pre-dirstate-write-file'
documentation = """
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."""
[[items]]
section = 'devel'
name = 'sync.status.pre-dirstate-write-file-timeout'
default=2
[[items]]
section = 'devel'
name = 'sync.dirstate.post-docket-read-file'
[[items]]
section = 'devel'
name = 'sync.dirstate.post-docket-read-file-timeout'
default=2
[[items]]
section = 'devel'
name = 'sync.dirstate.pre-read-file'
[[items]]
section = 'devel'
name = 'sync.dirstate.pre-read-file-timeout'
default=2
[[items]]
section = "devel"
name = "user.obsmarker"
[[items]]
section = "devel"
name = "warn-config"
[[items]]
section = "devel"
name = "warn-config-default"
[[items]]
section = "devel"
name = "warn-config-unknown"
[[items]]
section = "devel"
name = "warn-empty-changegroup"
default = false
[[items]]
section = "diff"
name = "merge"
default = false
experimental = true
[[items]]
section = "email"
name = "bcc"
[[items]]
section = "email"
name = "cc"
[[items]]
section = "email"
name = "charsets"
default-type = "list_type"
[[items]]
section = "email"
name = "from"
[[items]]
section = "email"
name = "method"
default = "smtp"
[[items]]
section = "email"
name = "reply-to"
[[items]]
section = "email"
name = "to"
[[items]]
section = "experimental"
name = "archivemetatemplate"
default-type = "dynamic"
[[items]]
section = "experimental"
name = "auto-publish"
default = "publish"
[[items]]
section = "experimental"
name = "bundle-phases"
default = false
[[items]]
section = "experimental"
name = "bundle2-advertise"
default = true
[[items]]
section = "experimental"
name = "bundle2-output-capture"
default = false
[[items]]
section = "experimental"
name = "bundle2.pushback"
default = false
[[items]]
section = "experimental"
name = "bundle2lazylocking"
default = false
[[items]]
section = "experimental"
name = "bundlecomplevel"
[[items]]
section = "experimental"
name = "bundlecomplevel.bzip2"
[[items]]
section = "experimental"
name = "bundlecomplevel.gzip"
[[items]]
section = "experimental"
name = "bundlecomplevel.none"
[[items]]
section = "experimental"
name = "bundlecomplevel.zstd"
[[items]]
section = "experimental"
name = "bundlecompthreads"
[[items]]
section = "experimental"
name = "bundlecompthreads.bzip2"
[[items]]
section = "experimental"
name = "bundlecompthreads.gzip"
[[items]]
section = "experimental"
name = "bundlecompthreads.none"
[[items]]
section = "experimental"
name = "bundlecompthreads.zstd"
[[items]]
section = "experimental"
name = "changegroup3"
default = true
[[items]]
section = "experimental"
name = "changegroup4"
default = false
# might remove rank configuration once the computation has no impact
[[items]]
section = "experimental"
name = "changelog-v2.compute-rank"
default = true
[[items]]
section = "experimental"
name = "cleanup-as-archived"
default = false
[[items]]
section = "experimental"
name = "clientcompressionengines"
default-type = "list_type"
[[items]]
section = "experimental"
name = "copies.read-from"
default = "filelog-only"
[[items]]
section = "experimental"
name = "copies.write-to"
default = "filelog-only"
[[items]]
section = "experimental"
name = "copytrace"
default = "on"
[[items]]
section = "experimental"
name = "copytrace.movecandidateslimit"
default = 100
[[items]]
section = "experimental"
name = "copytrace.sourcecommitlimit"
default = 100
[[items]]
section = "experimental"
name = "crecordtest"
[[items]]
section = "experimental"
name = "directaccess"
default = false
[[items]]
section = "experimental"
name = "directaccess.revnums"
default = false
[[items]]
section = "experimental"
name = "editortmpinhg"
default = false
[[items]]
section = "experimental"
name = "evolution"
default-type = "list_type"
[[items]]
section = "experimental"
name = "evolution.allowdivergence"
default = false
alias = [["experimental", "allowdivergence"]]
[[items]]
section = "experimental"
name = "evolution.allowunstable"
[[items]]
section = "experimental"
name = "evolution.bundle-obsmarker"
default = false
[[items]]
section = "experimental"
name = "evolution.bundle-obsmarker:mandatory"
default = true
[[items]]
section = "experimental"
name = "evolution.createmarkers"
[[items]]
section = "experimental"
name = "evolution.effect-flags"
default = true
alias = [["experimental", "effect-flags"]]
[[items]]
section = "experimental"
name = "evolution.exchange"
[[items]]
section = "experimental"
name = "evolution.report-instabilities"
default = true
[[items]]
section = "experimental"
name = "evolution.track-operation"
default = true
[[items]]
section = "experimental"
name = "exportableenviron"
default-type = "list_type"
[[items]]
section = "experimental"
name = "extendedheader.index"
[[items]]
section = "experimental"
name = "extendedheader.similarity"
default = false
[[items]]
section = "experimental"
name = "extra-filter-revs"
documentation = """Repo-level config to prevent a revset from being visible.
The target use case is to use `share` to expose different subsets of the same \
repository, especially server side. See also `server.view`."""
[[items]]
section = "experimental"
name = "graphshorten"
default = false
[[items]]
section = "experimental"
name = "graphstyle.grandparent"
default-type = "dynamic"
[[items]]
section = "experimental"
name = "graphstyle.missing"
default-type = "dynamic"
[[items]]
section = "experimental"
name = "graphstyle.parent"
default-type = "dynamic"
[[items]]
section = "experimental"
name = "hook-track-tags"
default = false
[[items]]
section = "experimental"
name = "httppostargs"
default = false
[[items]]
section = "experimental"
name = "log.topo"
default = false
[[items]]
section = "experimental"
name = "maxdeltachainspan"
default = -1
[[items]]
section = "experimental"
name = "merge-track-salvaged"
default = false
documentation = """Tracks files which were undeleted (merge might delete them \
but we explicitly kept/undeleted them) and creates new filenodes for them."""
[[items]]
section = "experimental"
name = "merge.checkpathconflicts"
default = false
[[items]]
section = "experimental"
name = "mmapindexthreshold"
[[items]]
section = "experimental"
name = "narrow"
default = false
[[items]]
section = "experimental"
name = "nointerrupt"
default = false
[[items]]
section = "experimental"
name = "nointerrupt-interactiveonly"
default = true
[[items]]
section = "experimental"
name = "nonnormalparanoidcheck"
default = false
[[items]]
section = "experimental"
name = "obsmarkers-exchange-debug"
default = false
[[items]]
section = "experimental"
name = "rebaseskipobsolete"
default = true
[[items]]
section = "experimental"
name = "remotenames"
default = false
[[items]]
section = "experimental"
name = "removeemptydirs"
default = true
[[items]]
section = "experimental"
name = "revert.interactive.select-to-keep"
default = false
[[items]]
section = "experimental"
name = "revisions.disambiguatewithin"
[[items]]
section = "experimental"
name = "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)
[[items]]
section = "experimental"
name = "revlogv2"
[[items]]
section = "experimental"
name = "rust.index"
default = false
[[items]]
section = "experimental"
name = "server.allow-hidden-access"
default-type = "list_type"
[[items]]
section = "experimental"
name = "server.filesdata.recommended-batch-size"
default = 50000
[[items]]
section = "experimental"
name = "server.manifestdata.recommended-batch-size"
default = 100000
[[items]]
section = "experimental"
name = "server.stream-narrow-clones"
default = false
[[items]]
section = "experimental"
name = "single-head-per-branch"
default = false
[[items]]
section = "experimental"
name = "single-head-per-branch:account-closed-heads"
default = false
[[items]]
section = "experimental"
name = "single-head-per-branch:public-changes-only"
default = false
[[items]]
section = "experimental"
name = "sparse-read"
default = false
[[items]]
section = "experimental"
name = "sparse-read.density-threshold"
default = 0.5
[[items]]
section = "experimental"
name = "sparse-read.min-gap-size"
default = "65K"
[[items]]
section = "experimental"
name = "revlog.uncompressed-cache.enabled"
default = true
experimental = true
documentation = """Enable some caching of uncompressed chunk, greatly boosting
performance at the cost of memory usage."""
[[items]]
section = "experimental"
name = "revlog.uncompressed-cache.factor"
default = 4
experimental = true
documentation = """The size of the cache compared to the largest revision seen."""
[[items]]
section = "experimental"
name = "revlog.uncompressed-cache.count"
default = 10000
experimental = true
documentation = """The number of chunk cached."""
[[items]]
section = "experimental"
name = "stream-v3"
default = false
[[items]]
section = "experimental"
name = "treemanifest"
default = false
[[items]]
section = "experimental"
name = "update.atomic-file"
default = false
[[items]]
section = "experimental"
name = "web.full-garbage-collection-rate"
default = 1 # still forcing a full collection on each request
[[items]]
section = "experimental"
name = "worker.repository-upgrade"
default = false
[[items]]
section = "experimental"
name = "worker.wdir-get-thread-safe"
default = false
[[items]]
section = "experimental"
name = "xdiff"
default = false
[[items]]
section = "extdata"
name = ".*"
generic = true
[[items]]
section = "extensions"
name = "[^:]*"
generic = true
[[items]]
section = "extensions"
name = "[^:]*:required"
default = false
generic = true
[[items]]
section = "format"
name = "bookmarks-in-store"
default = false
[[items]]
section = "format"
name = "chunkcachesize"
experimental = true
[[items]]
section = "format"
name = "dotencode"
default = 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.
[[items]]
section = "format"
name = "exp-archived-phase"
default = false
experimental = true
# 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
[[items]]
section = "format"
name = "exp-use-changelog-v2"
experimental = true
[[items]]
section = "format"
name = "exp-use-copies-side-data-changeset"
default = false
experimental = true
[[items]]
section = "format"
name = "generaldelta"
default = false
experimental = true
[[items]]
section = "format"
name = "manifestcachesize"
experimental = true
[[items]]
section = "format"
name = "maxchainlen"
default-type = "dynamic"
experimental = true
[[items]]
section = "format"
name = "obsstore-version"
[[items]]
section = "format"
name = "revlog-compression"
default-type = "lambda"
alias = [["experimental", "format.compression"]]
default = [ "zstd", "zlib",]
[[items]]
section = "format"
name = "sparse-revlog"
default = true
[[items]]
section = "format"
name = "use-dirstate-tracked-hint"
default = false
experimental = true
[[items]]
section = "format"
name = "use-dirstate-tracked-hint.automatic-upgrade-of-mismatching-repositories"
default = false
experimental = true
[[items]]
section = "format"
name = "use-dirstate-tracked-hint.automatic-upgrade-of-mismatching-repositories:quiet"
default = false
experimental = true
[[items]]
section = "format"
name = "use-dirstate-tracked-hint.version"
default = 1
experimental = true
[[items]]
section = "format"
name = "use-dirstate-v2"
default = false
alias = [["format", "exp-rc-dirstate-v2"]]
experimental = true
documentation = """Enables dirstate-v2 format *when creating a new repository*.
Which format to use for existing repos is controlled by `.hg/requires`."""
[[items]]
section = "format"
name = "use-dirstate-v2.automatic-upgrade-of-mismatching-repositories"
default = false
experimental = true
[[items]]
section = "format"
name = "use-dirstate-v2.automatic-upgrade-of-mismatching-repositories:quiet"
default = false
experimental = true
# Having 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.
[[items]]
section = "format"
name = "use-internal-phase"
default = false
experimental = true
[[items]]
section = "format"
name = "use-persistent-nodemap"
default-type = "dynamic"
[[items]]
section = "format"
name = "use-share-safe"
default = true
[[items]]
section = "format"
name = "use-share-safe.automatic-upgrade-of-mismatching-repositories"
default = false
experimental = true
[[items]]
section = "format"
name = "use-share-safe.automatic-upgrade-of-mismatching-repositories:quiet"
default = false
experimental = true
[[items]]
section = "format"
name = "usefncache"
default = true
[[items]]
section = "format"
name = "usegeneraldelta"
default = true
[[items]]
section = "format"
name = "usestore"
default = true
[[items]]
section = "fsmonitor"
name = "warn_update_file_count"
default = 50000
[[items]]
section = "fsmonitor"
name = "warn_update_file_count_rust"
default = 400000
[[items]]
section = "fsmonitor"
name = "warn_when_unused"
default = true
[[items]]
section = "help"
name = 'hidden-command\..*'
default = false
generic = true
[[items]]
section = "help"
name = 'hidden-topic\..*'
default = false
generic = true
[[items]]
section = "hgweb-paths"
name = ".*"
default-type = "list_type"
generic = true
[[items]]
section = "hooks"
name = ".*:run-with-plain"
default = true
generic = true
[[items]]
section = "hooks"
name = "[^:]*"
default-type = "dynamic"
generic = true
[[items]]
section = "hostfingerprints"
name = ".*"
default-type = "list_type"
generic = true
[[items]]
section = "hostsecurity"
name = ".*:ciphers$"
default-type = "dynamic"
generic = true
[[items]]
section = "hostsecurity"
name = ".*:fingerprints$"
default-type = "list_type"
generic = true
[[items]]
section = "hostsecurity"
name = ".*:minimumprotocol$"
default-type = "dynamic"
generic = true
[[items]]
section = "hostsecurity"
name = ".*:verifycertsfile$"
generic = true
[[items]]
section = "hostsecurity"
name = "ciphers"
[[items]]
section = "hostsecurity"
name = "minimumprotocol"
default-type = "dynamic"
[[items]]
section = "http"
name = "timeout"
[[items]]
section = "http_proxy"
name = "always"
default = false
[[items]]
section = "http_proxy"
name = "host"
[[items]]
section = "http_proxy"
name = "no"
default-type = "list_type"
[[items]]
section = "http_proxy"
name = "passwd"
[[items]]
section = "http_proxy"
name = "user"
[[items]]
section = "logtoprocess"
name = "command"
[[items]]
section = "logtoprocess"
name = "commandexception"
[[items]]
section = "logtoprocess"
name = "commandfinish"
[[items]]
section = "logtoprocess"
name = "develwarn"
[[items]]
section = "logtoprocess"
name = "uiblocked"
[[items]]
section = "merge"
name = "checkignored"
default = "abort"
[[items]]
section = "merge"
name = "checkunknown"
default = "abort"
[[items]]
section = "merge"
name = "disable-partial-tools"
default = false
experimental = true
[[items]]
section = "merge"
name = "followcopies"
default = true
[[items]]
section = "merge"
name = "on-failure"
default = "continue"
[[items]]
section = "merge"
name = "preferancestor"
default-type = "lambda"
default = ["*"]
experimental = true
[[items]]
section = "merge"
name = "strict-capability-check"
default = false
[[items]]
section = "merge-tools"
name = ".*"
generic = true
[[items]]
section = "merge-tools"
name = '.*\.args$'
default = "$local $base $other"
generic = true
priority = -1
[[items]]
section = "merge-tools"
name = '.*\.binary$'
default = false
generic = true
priority = -1
[[items]]
section = "merge-tools"
name = '.*\.check$'
default-type = "list_type"
generic = true
priority = -1
[[items]]
section = "merge-tools"
name = '.*\.checkchanged$'
default = false
generic = true
priority = -1
[[items]]
section = "merge-tools"
name = '.*\.executable$'
default-type = "dynamic"
generic = true
priority = -1
[[items]]
section = "merge-tools"
name = '.*\.fixeol$'
default = false
generic = true
priority = -1
[[items]]
section = "merge-tools"
name = '.*\.gui$'
default = false
generic = true
priority = -1
[[items]]
section = "merge-tools"
name = '.*\.mergemarkers$'
default = "basic"
generic = true
priority = -1
[[items]]
section = "merge-tools"
name = '.*\.mergemarkertemplate$' # take from command-templates.mergemarker
default-type = "dynamic"
generic = true
priority = -1
[[items]]
section = "merge-tools"
name = '.*\.premerge$'
default-type = "dynamic"
generic = true
priority = -1
[[items]]
section = "merge-tools"
name = '.*\.priority$'
default = 0
generic = true
priority = -1
[[items]]
section = "merge-tools"
name = '.*\.regappend$'
default = ""
generic = true
priority = -1
[[items]]
section = "merge-tools"
name = '.*\.symlink$'
default = false
generic = true
priority = -1
[[items]]
section = "pager"
name = "attend-.*"
default-type = "dynamic"
generic = true
[[items]]
section = "pager"
name = "ignore"
default-type = "list_type"
[[items]]
section = "pager"
name = "pager"
default-type = "dynamic"
[[items]]
section = "partial-merge-tools"
name = ".*"
generic = true
experimental = true
[[items]]
section = "partial-merge-tools"
name = '.*\.args'
default = "$local $base $other"
generic = true
priority = -1
experimental = true
[[items]]
section = "partial-merge-tools"
name = '.*\.disable'
default = false
generic = true
priority = -1
experimental = true
[[items]]
section = "partial-merge-tools"
name = '.*\.executable$'
default-type = "dynamic"
generic = true
priority = -1
experimental = true
[[items]]
section = "partial-merge-tools"
name = '.*\.order'
default = 0
generic = true
priority = -1
experimental = true
[[items]]
section = "partial-merge-tools"
name = '.*\.patterns'
default-type = "dynamic"
generic = true
priority = -1
experimental = true
[[items]]
section = "patch"
name = "eol"
default = "strict"
[[items]]
section = "patch"
name = "fuzz"
default = 2
[[items]]
section = "paths"
name = "[^:]*"
generic = true
[[items]]
section = "paths"
name = ".*:bookmarks.mode"
default = "default"
generic = true
[[items]]
section = "paths"
name = ".*:multi-urls"
default = false
generic = true
[[items]]
section = "paths"
name = ".*:pulled-delta-reuse-policy"
generic = true
[[items]]
section = "paths"
name = ".*:pushrev"
generic = true
[[items]]
section = "paths"
name = ".*:pushurl"
generic = true
[[items]]
section = "paths"
name = "default"
[[items]]
section = "paths"
name = "default-push"
[[items]]
section = "phases"
name = "checksubrepos"
default = "follow"
[[items]]
section = "phases"
name = "new-commit"
default = "draft"
[[items]]
section = "phases"
name = "publish"
default = true
[[items]]
section = "profiling"
name = "enabled"
default = false
[[items]]
section = "profiling"
name = "format"
default = "text"
[[items]]
section = "profiling"
name = "freq"
default = 1000
[[items]]
section = "profiling"
name = "limit"
default = 30
[[items]]
section = "profiling"
name = "nested"
default = 0
[[items]]
section = "profiling"
name = "output"
[[items]]
section = "profiling"
name = "showmax"
default = 0.999
[[items]]
section = "profiling"
name = "showmin"
default-type = "dynamic"
[[items]]
section = "profiling"
name = "showtime"
default = true
[[items]]
section = "profiling"
name = "sort"
default = "inlinetime"
[[items]]
section = "profiling"
name = "statformat"
default = "hotpath"
[[items]]
section = "profiling"
name = "time-track"
default-type = "dynamic"
[[items]]
section = "profiling"
name = "type"
default = "stat"
[[items]]
section = "progress"
name = "assume-tty"
default = false
[[items]]
section = "progress"
name = "changedelay"
default = 1
[[items]]
section = "progress"
name = "clear-complete"
default = true
[[items]]
section = "progress"
name = "debug"
default = false
[[items]]
section = "progress"
name = "delay"
default = 3
[[items]]
section = "progress"
name = "disable"
default = false
[[items]]
section = "progress"
name = "estimateinterval"
default = 60.0
[[items]]
section = "progress"
name = "format"
default-type = "lambda"
default = [ "topic", "bar", "number", "estimate",]
[[items]]
section = "progress"
name = "refresh"
default = 0.1
[[items]]
section = "progress"
name = "width"
default-type = "dynamic"
[[items]]
section = "pull"
name = "confirm"
default = false
[[items]]
section = "push"
name = "pushvars.server"
default = false
[[items]]
section = "rebase"
name = "experimental.inmemory"
default = false
[[items]]
section = "rebase"
name = "singletransaction"
default = false
[[items]]
section = "rebase"
name = "store-source"
default = true
experimental = true
documentation = """Controls creation of a `rebase_source` extra field during rebase.
When false, no such field is created. This is useful e.g. 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."""
[[items]]
section = "rewrite"
name = "backup-bundle"
default = true
alias = [["ui", "history-editing-backup"]]
[[items]]
section = "rewrite"
name = "empty-successor"
default = "skip"
experimental = true
[[items]]
section = "rewrite"
name = "update-timestamp"
default = false
[[items]]
section = "rhg"
name = "cat"
default = true
experimental = true
documentation = """rhg cat has some quirks that need to be ironed out. \
In particular, the `-r` argument accepts a partial hash, but does not \
correctly resolve `abcdef` as a potential bookmark, tag or branch name."""
[[items]]
section = "rhg"
name = "fallback-exectutable"
experimental = true
[[items]]
section = "rhg"
name = "fallback-immediately"
default = false
experimental = true
[[items]]
section = "rhg"
name = "ignored-extensions"
default-type = "list_type"
experimental = true
[[items]]
section = "rhg"
name = "on-unsupported"
default = "abort"
experimental = true
[[items]]
section = "server"
name = "bookmarks-pushkey-compat"
default = true
[[items]]
section = "server"
name = "bundle1"
default = true
[[items]]
section = "server"
name = "bundle1.pull"
[[items]]
section = "server"
name = "bundle1.push"
[[items]]
section = "server"
name = "bundle1gd"
[[items]]
section = "server"
name = "bundle1gd.pull"
[[items]]
section = "server"
name = "bundle1gd.push"
[[items]]
section = "server"
name = "bundle2.stream"
default = true
alias = [["experimental", "bundle2.stream"]]
[[items]]
section = "server"
name = "compressionengines"
default-type = "list_type"
[[items]]
section = "server"
name = "concurrent-push-mode"
default = "check-related"
[[items]]
section = "server"
name = "disablefullbundle"
default = false
[[items]]
section = "server"
name = "maxhttpheaderlen"
default = 1024
[[items]]
section = "server"
name = "preferuncompressed"
default = false
[[items]]
section = "server"
name = "pullbundle"
default = true
[[items]]
section = "server"
name = "streamunbundle"
default = false
[[items]]
section = "server"
name = "uncompressed"
default = true
[[items]]
section = "server"
name = "uncompressedallowsecret"
default = false
[[items]]
section = "server"
name = "validate"
default = false
[[items]]
section = "server"
name = "view"
default = "served"
[[items]]
section = "server"
name = "zliblevel"
default = -1
[[items]]
section = "server"
name = "zstdlevel"
default = 3
[[items]]
section = "share"
name = "pool"
[[items]]
section = "share"
name = "poolnaming"
default = "identity"
[[items]]
section = "share"
name = "safe-mismatch.source-not-safe"
default = "abort"
[[items]]
section = "share"
name = "safe-mismatch.source-not-safe.warn"
default = true
[[items]]
section = "share"
name = "safe-mismatch.source-not-safe:verbose-upgrade"
default = true
[[items]]
section = "share"
name = "safe-mismatch.source-safe"
default = "abort"
[[items]]
section = "share"
name = "safe-mismatch.source-safe.warn"
default = true
[[items]]
section = "share"
name = "safe-mismatch.source-safe:verbose-upgrade"
default = true
[[items]]
section = "shelve"
name = "maxbackups"
default = 10
[[items]]
section = "shelve"
name = "store"
default = "internal"
experimental = true
[[items]]
section = "smtp"
name = "host"
[[items]]
section = "smtp"
name = "local_hostname"
[[items]]
section = "smtp"
name = "password"
[[items]]
section = "smtp"
name = "port"
default-type = "dynamic"
[[items]]
section = "smtp"
name = "tls"
default = "none"
[[items]]
section = "smtp"
name = "username"
[[items]]
section = "sparse"
name = "missingwarning"
default = true
experimental = true
[[items]]
section = "storage"
name = "dirstate-v2.slow-path"
default = "abort"
experimental = true # experimental as long as format.use-dirstate-v2 is.
[[items]]
section = "storage"
name = "new-repo-backend"
default = "revlogv1"
experimental = true
[[items]]
section = "storage"
name = "revlog.delta-parent-search.candidate-group-chunk-size"
default = 20
[[items]]
section = "storage"
name = "revlog.issue6528.fix-incoming"
default = true
[[items]]
section = "storage"
name = "revlog.optimize-delta-parent-choice"
default = true
alias = [["format", "aggressivemergedeltas"]]
[[items]]
section = "storage"
name = "revlog.persistent-nodemap.mmap"
default = true
[[items]]
section = "storage"
name = "revlog.persistent-nodemap.slow-path"
default = "abort"
[[items]]
section = "storage"
name = "revlog.reuse-external-delta"
default = true
[[items]]
section = "storage"
name = "revlog.reuse-external-delta-parent"
documentation = """This option is true unless `format.generaldelta` is set."""
[[items]]
section = "storage"
name = "revlog.zlib.level"
[[items]]
section = "storage"
name = "revlog.zstd.level"
[[items]]
section = "subrepos"
name = "allowed"
default-type = "dynamic" # to make backporting simpler
[[items]]
section = "subrepos"
name = "git:allowed"
default-type = "dynamic"
[[items]]
section = "subrepos"
name = "hg:allowed"
default-type = "dynamic"
[[items]]
section = "subrepos"
name = "svn:allowed"
default-type = "dynamic"
[[items]]
section = "templateconfig"
name = ".*"
default-type = "dynamic"
generic = true
[[items]]
section = "templates"
name = ".*"
generic = true
[[items]]
section = "trusted"
name = "groups"
default-type = "list_type"
[[items]]
section = "trusted"
name = "users"
default-type = "list_type"
[[items]]
section = "ui"
name = "_usedassubrepo"
default = false
[[items]]
section = "ui"
name = "allowemptycommit"
default = false
[[items]]
section = "ui"
name = "archivemeta"
default = true
[[items]]
section = "ui"
name = "askusername"
default = false
[[items]]
section = "ui"
name = "available-memory"
[[items]]
section = "ui"
name = "clonebundlefallback"
default = false
[[items]]
section = "ui"
name = "clonebundleprefers"
default-type = "list_type"
[[items]]
section = "ui"
name = "clonebundles"
default = true
[[items]]
section = "ui"
name = "color"
default = "auto"
[[items]]
section = "ui"
name = "commitsubrepos"
default = false
[[items]]
section = "ui"
name = "debug"
default = false
[[items]]
section = "ui"
name = "debugger"
[[items]]
section = "ui"
name = "detailed-exit-code"
default = false
experimental = true
[[items]]
section = "ui"
name = "editor"
default-type = "dynamic"
[[items]]
section = "ui"
name = "fallbackencoding"
[[items]]
section = "ui"
name = "forcecwd"
[[items]]
section = "ui"
name = "forcemerge"
[[items]]
section = "ui"
name = "formatdebug"
default = false
[[items]]
section = "ui"
name = "formatjson"
default = false
[[items]]
section = "ui"
name = "formatted"
[[items]]
section = "ui"
name = "interactive"
[[items]]
section = "ui"
name = "interface"
[[items]]
section = "ui"
name = "interface.chunkselector"
[[items]]
section = "ui"
name = "large-file-limit"
default = 10485760
[[items]]
section = "ui"
name = "logblockedtimes"
default = false
[[items]]
section = "ui"
name = "merge"
[[items]]
section = "ui"
name = "mergemarkers"
default = "basic"
[[items]]
section = "ui"
name = "message-output"
default = "stdio"
[[items]]
section = "ui"
name = "nontty"
default = false
[[items]]
section = "ui"
name = "origbackuppath"
[[items]]
section = "ui"
name = "paginate"
default = true
[[items]]
section = "ui"
name = "patch"
[[items]]
section = "ui"
name = "portablefilenames"
default = "warn"
[[items]]
section = "ui"
name = "promptecho"
default = false
[[items]]
section = "ui"
name = "quiet"
default = false
[[items]]
section = "ui"
name = "quietbookmarkmove"
default = false
[[items]]
section = "ui"
name = "relative-paths"
default = "legacy"
[[items]]
section = "ui"
name = "remotecmd"
default = "hg"
[[items]]
section = "ui"
name = "report_untrusted"
default = true
[[items]]
section = "ui"
name = "rollback"
default = true
[[items]]
section = "ui"
name = "signal-safe-lock"
default = true
[[items]]
section = "ui"
name = "slash"
default = false
[[items]]
section = "ui"
name = "ssh"
default = "ssh"
[[items]]
section = "ui"
name = "ssherrorhint"
[[items]]
section = "ui"
name = "statuscopies"
default = false
[[items]]
section = "ui"
name = "strict"
default = false
[[items]]
section = "ui"
name = "style"
default = ""
[[items]]
section = "ui"
name = "supportcontact"
[[items]]
section = "ui"
name = "textwidth"
default = 78
[[items]]
section = "ui"
name = "timeout"
default = "600"
[[items]]
section = "ui"
name = "timeout.warn"
default = 0
[[items]]
section = "ui"
name = "timestamp-output"
default = false
[[items]]
section = "ui"
name = "traceback"
default = false
[[items]]
section = "ui"
name = "tweakdefaults"
default = false
[[items]]
section = "ui"
name = "username"
alias = [["ui", "user"]]
[[items]]
section = "ui"
name = "verbose"
default = false
[[items]]
section = "verify"
name = "skipflags"
default = 0
[[items]]
section = "web"
name = "accesslog"
default = "-"
[[items]]
section = "web"
name = "address"
default = ""
[[items]]
section = "web"
name = "allow-archive"
default-type = "list_type"
alias = [["web", "allow_archive"]]
[[items]]
section = "web"
name = "allow-pull"
default = true
alias = [["web", "allowpull"]]
[[items]]
section = "web"
name = "allow-push"
default-type = "list_type"
alias = [["web", "allow_push"]]
[[items]]
section = "web"
name = "allow_read"
default-type = "list_type"
[[items]]
section = "web"
name = "allowbz2"
default = false
[[items]]
section = "web"
name = "allowgz"
default = false
[[items]]
section = "web"
name = "allowzip"
default = false
[[items]]
section = "web"
name = "archivesubrepos"
default = false
[[items]]
section = "web"
name = "baseurl"
[[items]]
section = "web"
name = "cacerts"
[[items]]
section = "web"
name = "cache"
default = true
[[items]]
section = "web"
name = "certificate"
[[items]]
section = "web"
name = "collapse"
default = false
[[items]]
section = "web"
name = "comparisoncontext"
default = 5
[[items]]
section = "web"
name = "contact"
[[items]]
section = "web"
name = "csp"
[[items]]
section = "web"
name = "deny_push"
default-type = "list_type"
[[items]]
section = "web"
name = "deny_read"
default-type = "list_type"
[[items]]
section = "web"
name = "descend"
default = true
[[items]]
section = "web"
name = "description"
default = ""
[[items]]
section = "web"
name = "encoding"
default-type = "lazy_module"
default = "encoding.encoding"
[[items]]
section = "web"
name = "errorlog"
default = "-"
[[items]]
section = "web"
name = "guessmime"
default = false
[[items]]
section = "web"
name = "hidden"
default = false
[[items]]
section = "web"
name = "ipv6"
default = false
[[items]]
section = "web"
name = "labels"
default-type = "list_type"
[[items]]
section = "web"
name = "logoimg"
default = "hglogo.png"
[[items]]
section = "web"
name = "logourl"
default = "https://mercurial-scm.org/"
[[items]]
section = "web"
name = "maxchanges"
default = 10
[[items]]
section = "web"
name = "maxfiles"
default = 10
[[items]]
section = "web"
name = "maxshortchanges"
default = 60
[[items]]
section = "web"
name = "motd"
default = ""
[[items]]
section = "web"
name = "name"
default-type = "dynamic"
[[items]]
section = "web"
name = "port"
default = 8000
[[items]]
section = "web"
name = "prefix"
default = ""
[[items]]
section = "web"
name = "push_ssl"
default = true
[[items]]
section = "web"
name = "refreshinterval"
default = 20
[[items]]
section = "web"
name = "server-header"
[[items]]
section = "web"
name = "static"
[[items]]
section = "web"
name = "staticurl"
[[items]]
section = "web"
name = "stripes"
default = 1
[[items]]
section = "web"
name = "style"
default = "paper"
[[items]]
section = "web"
name = "templates"
[[items]]
section = "web"
name = "view"
default = "served"
experimental = true
[[items]]
section = "worker"
name = "backgroundclose"
default-type = "dynamic"
[[items]]
section = "worker"
name = "backgroundclosemaxqueue"
# Windows defaults to a limit of 512 open files. A buffer of 128
# should give us enough headway.
default = 384
[[items]]
section = "worker"
name = "backgroundcloseminfilecount"
default = 2048
[[items]]
section = "worker"
name = "backgroundclosethreadcount"
default = 4
[[items]]
section = "worker"
name = "enabled"
default = true
[[items]]
section = "worker"
name = "numcpus"
# Templates and template applications
[[template-applications]]
template = "diff-options"
section = "annotate"
[[template-applications]]
template = "diff-options"
section = "commands"
prefix = "commit.interactive"
[[template-applications]]
template = "diff-options"
section = "commands"
prefix = "revert.interactive"
[[template-applications]]
template = "diff-options"
section = "diff"
[templates]
[[templates.diff-options]]
suffix = "nodates"
default = false
[[templates.diff-options]]
suffix = "showfunc"
default = false
[[templates.diff-options]]
suffix = "unified"
[[templates.diff-options]]
suffix = "git"
default = false
[[templates.diff-options]]
suffix = "ignorews"
default = false
[[templates.diff-options]]
suffix = "ignorewsamount"
default = false
[[templates.diff-options]]
suffix = "ignoreblanklines"
default = false
[[templates.diff-options]]
suffix = "ignorewseol"
default = false
[[templates.diff-options]]
suffix = "nobinary"
default = false
[[templates.diff-options]]
suffix = "noprefix"
default = false
[[templates.diff-options]]
suffix = "word-diff"
default = false
# In-core extensions
[[items]]
section = "blackbox"
name = "debug.to-stderr"
default = false
in_core_extension = "blackbox"
[[items]]
section = "blackbox"
name = "dirty"
default = false
in_core_extension = "blackbox"
[[items]]
section = "blackbox"
name = "maxsize"
default = "1 MB"
in_core_extension = "blackbox"
[[items]]
section = "blackbox"
name = "logsource"
default = false
in_core_extension = "blackbox"
[[items]]
section = "blackbox"
name = "maxfiles"
default = 7
in_core_extension = "blackbox"
[[items]]
section = "blackbox"
name = "track"
default-type = "lambda"
default = ["*"]
in_core_extension = "blackbox"
[[items]]
section = "blackbox"
name = "ignore"
default-type = "lambda"
default = ["chgserver", "cmdserver", "extension"]
in_core_extension = "blackbox"
[[items]]
section = "blackbox"
name = "date-format"
default = ""
in_core_extension = "blackbox"