##// END OF EJS Templates
manifest: subclass the new `imanifestrevisionwritable` Protocol class...
manifest: subclass the new `imanifestrevisionwritable` Protocol class This is the same transformation as 3a90a6fd710d did for dirstate, but the CamelCase naming was already cleaned up here. See 4ef6dbc27a99 for the benefits of explicit subclassing.

File last commit:

r52756:f4733654 default
r53378:22f97aa5 default
Show More
requirements.py
126 lines | 4.8 KiB | text/x-python | PythonLexer
Pulkit Goyal
requirements: introduce new requirements related module...
r45932 # requirements.py - objects and functions related to repository requirements
#
Raphaël Gomès
contributor: change mentions of mpm to olivia...
r47575 # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com>
Pulkit Goyal
requirements: introduce new requirements related module...
r45932 #
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
Matt Harbison
typing: add `from __future__ import annotations` to most files...
r52756 from __future__ import annotations
Pulkit Goyal
requirements: introduce new requirements related module...
r45932
requirements: move the comment about manifestv2 in the module...
r49448 # obsolete experimental requirements:
# - manifestv2: An experimental new manifest format that allowed
# for stem compression of long paths. Experiment ended up not
# being successful (repository sizes went up due to worse delta
# chains), and the code was deleted in 4.6.
Raphaël Gomès
requirements: also add a generaldelta constant...
r47372 GENERALDELTA_REQUIREMENT = b'generaldelta'
Raphaël Gomès
requirements: also add a dotencode constant...
r47381 DOTENCODE_REQUIREMENT = b'dotencode'
Raphaël Gomès
requirements: also add a store constant...
r47382 STORE_REQUIREMENT = b'store'
Raphaël Gomès
requirements: also add a fncache constant...
r47383 FNCACHE_REQUIREMENT = b'fncache'
Raphaël Gomès
requirements: also add a generaldelta constant...
r47372
tracked-key: remove the dual write and rename to tracked-hint...
r49644 DIRSTATE_TRACKED_HINT_V1 = b'dirstate-tracked-key-v1'
dirstate-v2: freeze the on-disk format...
r49116 DIRSTATE_V2_REQUIREMENT = b'dirstate-v2'
Simon Sapin
dirstate-v2: Add a new experimental `exp-dirstate-v2` repository requirement...
r48052
Pulkit Goyal
requirements: introduce new requirements related module...
r45932 # When narrowing is finalized and no longer subject to format changes,
# we should move this to just "narrow" or similar.
NARROW_REQUIREMENT = b'narrowhg-experimental'
# Enables sparse working directory usage
SPARSE_REQUIREMENT = b'exp-sparse'
# Enables the internal phase which is used to hide changesets instead
# of stripping them
phase: rename the requirement for internal-phase (BC)...
r50347 INTERNAL_PHASE_REQUIREMENT = b'internal-phase-2'
Pulkit Goyal
requirements: introduce new requirements related module...
r45932
phase: introduce a dedicated requirement for the `archived` phase...
r50346 # Enables the internal phase which is used to hide changesets instead
# of stripping them
ARCHIVED_PHASE_REQUIREMENT = b'exp-archived-phase'
Pulkit Goyal
requirements: introduce new requirements related module...
r45932 # Stores manifest in Tree structure
TREEMANIFEST_REQUIREMENT = b'treemanifest'
Pulkit Goyal
localrepo: move requirements constant to requirements module...
r45933
Raphaël Gomès
requirements: add constant for revlog v1 requirement...
r47371 REVLOGV1_REQUIREMENT = b'revlogv1'
requirements: add an official `REVLOG_COMPRESSION_ZSTD` const...
r49498 # allow using ZSTD as compression engine for revlog content
REVLOG_COMPRESSION_ZSTD = b'revlog-compression-zstd'
Pulkit Goyal
localrepo: move requirements constant to requirements module...
r45933 # Increment the sub-version when the revlog v2 format changes to lock out old
# clients.
changelogv2: introduce a "changelogv2" feature...
r48037 CHANGELOGV2_REQUIREMENT = b'exp-changelog-v2'
# Increment the sub-version when the revlog v2 format changes to lock out old
# clients.
Raphaël Gomès
revlog: introduce v2 format...
r47438 REVLOGV2_REQUIREMENT = b'exp-revlogv2.2'
Pulkit Goyal
localrepo: move requirements constant to requirements module...
r45933
# A repository with the sparserevlog feature will have delta chains that
# can spread over a larger span. Sparse reading cuts these large spans into
# pieces, so that each piece isn't too big.
# Without the sparserevlog capability, reading from the repository could use
# huge amounts of memory, because the whole span would be read at once,
# including all the intermediate revisions that aren't pertinent for the chain.
# This is why once a repository has enabled sparse-read, it becomes required.
SPARSEREVLOG_REQUIREMENT = b'sparserevlog'
# A repository with the the copies-sidedata-changeset requirement will store
# copies related information in changeset's sidedata.
COPIESSDC_REQUIREMENT = b'exp-copies-sidedata-changeset'
# The repository use persistent nodemap for the changelog and the manifest.
NODEMAP_REQUIREMENT = b'persistent-nodemap'
Pulkit Goyal
requirements: introduce a set of working directory specific requirements...
r45934
Pulkit Goyal
requirements: introduce constants for `shared` and `relshared` requirements...
r45946 # Denotes that the current repository is a share
SHARED_REQUIREMENT = b'shared'
# Denotes that current repository is a share and the shared source path is
# relative to the current repository root path
RELATIVE_SHARED_REQUIREMENT = b'relshared'
Pulkit Goyal
share: introduce config option to store requires in .hg/store...
r46055 # A repository with share implemented safely. The repository has different
# store and working copy requirements i.e. both `.hg/requires` and
# `.hg/store/requires` are present.
Pulkit Goyal
share: move share safe functionality out of experimental...
r47052 SHARESAFE_REQUIREMENT = b'share-safe'
Pulkit Goyal
share: introduce config option to store requires in .hg/store...
r46055
requirements: move "bookmark in store" requirements in the right module...
r49445 # Bookmarks must be stored in the `store` part of the repository and will be
# share accross shares
BOOKMARKS_IN_STORE_REQUIREMENT = b'bookmarksinstore'
Pulkit Goyal
requirements: introduce a set of working directory specific requirements...
r45934 # List of requirements which are working directory specific
# These requirements cannot be shared between repositories if they
# share the same store
Pulkit Goyal
requirements: introduce constants for `shared` and `relshared` requirements...
r45946 # * sparse is a working directory specific functionality and hence working
# directory specific requirement
# * SHARED_REQUIREMENT and RELATIVE_SHARED_REQUIREMENT are requirements which
# represents that the current working copy/repository shares store of another
# repo. Hence both of them should be stored in working copy
Pulkit Goyal
share: introduce config option to store requires in .hg/store...
r46055 # * SHARESAFE_REQUIREMENT needs to be stored in working dir to mark that rest of
# the requirements are stored in store's requires
Simon Sapin
dirstate-v2: Add a new experimental `exp-dirstate-v2` repository requirement...
r48052 # * DIRSTATE_V2_REQUIREMENT affects .hg/dirstate, of which there is one per
# working directory.
Pulkit Goyal
requirements: introduce constants for `shared` and `relshared` requirements...
r45946 WORKING_DIR_REQUIREMENTS = {
SPARSE_REQUIREMENT,
SHARED_REQUIREMENT,
RELATIVE_SHARED_REQUIREMENT,
Pulkit Goyal
share: introduce config option to store requires in .hg/store...
r46055 SHARESAFE_REQUIREMENT,
tracked-key: remove the dual write and rename to tracked-hint...
r49644 DIRSTATE_TRACKED_HINT_V1,
Simon Sapin
dirstate-v2: Add a new experimental `exp-dirstate-v2` repository requirement...
r48052 DIRSTATE_V2_REQUIREMENT,
Pulkit Goyal
requirements: introduce constants for `shared` and `relshared` requirements...
r45946 }
stream-clone: add a explicit set list requirements relevant to stream clone...
r49447
# List of requirement that impact "stream-clone" (and hardlink clone) and
# cannot be changed in such cases.
#
# requirements not in this list are safe to be altered during stream-clone.
#
# note: the list is currently inherited from previous code and miss some relevant requirement while containing some irrelevant ones.
STREAM_FIXED_REQUIREMENTS = {
phase: introduce a dedicated requirement for the `archived` phase...
r50346 ARCHIVED_PHASE_REQUIREMENT,
stream-clone: add a explicit set list requirements relevant to stream clone...
r49447 BOOKMARKS_IN_STORE_REQUIREMENT,
CHANGELOGV2_REQUIREMENT,
COPIESSDC_REQUIREMENT,
GENERALDELTA_REQUIREMENT,
stream-clone: stop considering working copy only requirements...
r49500 INTERNAL_PHASE_REQUIREMENT,
requirements: add an official `REVLOG_COMPRESSION_ZSTD` const...
r49498 REVLOG_COMPRESSION_ZSTD,
stream-clone: add a explicit set list requirements relevant to stream clone...
r49447 REVLOGV1_REQUIREMENT,
REVLOGV2_REQUIREMENT,
SPARSEREVLOG_REQUIREMENT,
TREEMANIFEST_REQUIREMENT,
}