mercurial/requirements.py
author Pierre-Yves David <pierre-yves.david@octobus.net>
Fri, 21 Jan 2022 03:05:43 +0100
changeset 48635 b060e305d79f
parent 48624 66b59fbb0cdd
child 48674 6fd9a17c32ab
permissions -rw-r--r--
test-http-bad-server: factor code dealing with "read" in the new object This will make sure both `read` and `readline` do the same processing and make it simpler to update that processing in the future. Differential Revision: https://phab.mercurial-scm.org/D12044
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45392
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
     1
# requirements.py - objects and functions related to repository requirements
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
     2
#
46819
d4ba4d51f85f contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents: 46717
diff changeset
     3
# Copyright 2005-2007 Olivia Mackall <olivia@selenic.com>
45392
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
     4
#
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
     5
# This software may be used and distributed according to the terms of the
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
     6
# GNU General Public License version 2 or any later version.
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
     7
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
     8
from __future__ import absolute_import
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
     9
48624
66b59fbb0cdd requirements: move the comment about manifestv2 in the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48623
diff changeset
    10
# obsolete experimental requirements:
66b59fbb0cdd requirements: move the comment about manifestv2 in the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48623
diff changeset
    11
#  - manifestv2: An experimental new manifest format that allowed
66b59fbb0cdd requirements: move the comment about manifestv2 in the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48623
diff changeset
    12
#    for stem compression of long paths. Experiment ended up not
66b59fbb0cdd requirements: move the comment about manifestv2 in the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48623
diff changeset
    13
#    being successful (repository sizes went up due to worse delta
66b59fbb0cdd requirements: move the comment about manifestv2 in the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48623
diff changeset
    14
#    chains), and the code was deleted in 4.6.
66b59fbb0cdd requirements: move the comment about manifestv2 in the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48623
diff changeset
    15
46666
f4c325bf80fc requirements: also add a generaldelta constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46665
diff changeset
    16
GENERALDELTA_REQUIREMENT = b'generaldelta'
46675
c3773636ddbb requirements: also add a dotencode constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46666
diff changeset
    17
DOTENCODE_REQUIREMENT = b'dotencode'
46676
ab58098bebed requirements: also add a store constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46675
diff changeset
    18
STORE_REQUIREMENT = b'store'
46677
b4c2a2af25e2 requirements: also add a fncache constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46676
diff changeset
    19
FNCACHE_REQUIREMENT = b'fncache'
46666
f4c325bf80fc requirements: also add a generaldelta constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46665
diff changeset
    20
48295
bf11ff22a9af dirstate-v2: freeze the on-disk format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47288
diff changeset
    21
DIRSTATE_V2_REQUIREMENT = b'dirstate-v2'
47288
ed0d54b20c5b dirstate-v2: Add a new experimental `exp-dirstate-v2` repository requirement
Simon Sapin <simon.sapin@octobus.net>
parents: 47274
diff changeset
    22
45392
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
    23
# When narrowing is finalized and no longer subject to format changes,
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
    24
# we should move this to just "narrow" or similar.
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
    25
NARROW_REQUIREMENT = b'narrowhg-experimental'
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
    26
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
    27
# Enables sparse working directory usage
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
    28
SPARSE_REQUIREMENT = b'exp-sparse'
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
    29
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
    30
# Enables the internal phase which is used to hide changesets instead
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
    31
# of stripping them
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
    32
INTERNAL_PHASE_REQUIREMENT = b'internal-phase'
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
    33
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
    34
# Stores manifest in Tree structure
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
    35
TREEMANIFEST_REQUIREMENT = b'treemanifest'
45393
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
    36
46665
ee91966aec0f requirements: add constant for revlog v1 requirement
Raphaël Gomès <rgomes@octobus.net>
parents: 46334
diff changeset
    37
REVLOGV1_REQUIREMENT = b'revlogv1'
ee91966aec0f requirements: add constant for revlog v1 requirement
Raphaël Gomès <rgomes@octobus.net>
parents: 46334
diff changeset
    38
45393
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
    39
# Increment the sub-version when the revlog v2 format changes to lock out old
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
    40
# clients.
47274
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47240
diff changeset
    41
CHANGELOGV2_REQUIREMENT = b'exp-changelog-v2'
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47240
diff changeset
    42
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47240
diff changeset
    43
# Increment the sub-version when the revlog v2 format changes to lock out old
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47240
diff changeset
    44
# clients.
46717
913485776542 revlog: introduce v2 format
Raphaël Gomès <rgomes@octobus.net>
parents: 46677
diff changeset
    45
REVLOGV2_REQUIREMENT = b'exp-revlogv2.2'
45393
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
    46
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
    47
# A repository with the sparserevlog feature will have delta chains that
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
    48
# can spread over a larger span. Sparse reading cuts these large spans into
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
    49
# pieces, so that each piece isn't too big.
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
    50
# Without the sparserevlog capability, reading from the repository could use
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
    51
# huge amounts of memory, because the whole span would be read at once,
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
    52
# including all the intermediate revisions that aren't pertinent for the chain.
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
    53
# This is why once a repository has enabled sparse-read, it becomes required.
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
    54
SPARSEREVLOG_REQUIREMENT = b'sparserevlog'
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
    55
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
    56
# A repository with the the copies-sidedata-changeset requirement will store
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
    57
# copies related information in changeset's sidedata.
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
    58
COPIESSDC_REQUIREMENT = b'exp-copies-sidedata-changeset'
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
    59
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
    60
# The repository use persistent nodemap for the changelog and the manifest.
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
    61
NODEMAP_REQUIREMENT = b'persistent-nodemap'
45394
bd56597b2254 requirements: introduce a set of working directory specific requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45393
diff changeset
    62
45406
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45394
diff changeset
    63
# Denotes that the current repository is a share
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45394
diff changeset
    64
SHARED_REQUIREMENT = b'shared'
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45394
diff changeset
    65
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45394
diff changeset
    66
# Denotes that current repository is a share and the shared source path is
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45394
diff changeset
    67
# relative to the current repository root path
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45394
diff changeset
    68
RELATIVE_SHARED_REQUIREMENT = b'relshared'
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45394
diff changeset
    69
45494
d252f51ab032 share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45406
diff changeset
    70
# A repository with share implemented safely. The repository has different
d252f51ab032 share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45406
diff changeset
    71
# store and working copy requirements i.e. both `.hg/requires` and
d252f51ab032 share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45406
diff changeset
    72
# `.hg/store/requires` are present.
46334
6e81446bf1d9 share: move share safe functionality out of experimental
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45494
diff changeset
    73
SHARESAFE_REQUIREMENT = b'share-safe'
45494
d252f51ab032 share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45406
diff changeset
    74
48621
dfbfa802876b requirements: move "bookmark in store" requirements in the right module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48295
diff changeset
    75
# Bookmarks must be stored in the `store` part of the repository and will be
dfbfa802876b requirements: move "bookmark in store" requirements in the right module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48295
diff changeset
    76
# share accross shares
dfbfa802876b requirements: move "bookmark in store" requirements in the right module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48295
diff changeset
    77
BOOKMARKS_IN_STORE_REQUIREMENT = b'bookmarksinstore'
dfbfa802876b requirements: move "bookmark in store" requirements in the right module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48295
diff changeset
    78
45394
bd56597b2254 requirements: introduce a set of working directory specific requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45393
diff changeset
    79
# List of requirements which are working directory specific
bd56597b2254 requirements: introduce a set of working directory specific requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45393
diff changeset
    80
# These requirements cannot be shared between repositories if they
bd56597b2254 requirements: introduce a set of working directory specific requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45393
diff changeset
    81
# share the same store
45406
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45394
diff changeset
    82
# * sparse is a working directory specific functionality and hence working
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45394
diff changeset
    83
#   directory specific requirement
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45394
diff changeset
    84
# * SHARED_REQUIREMENT and RELATIVE_SHARED_REQUIREMENT are requirements which
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45394
diff changeset
    85
#   represents that the current working copy/repository shares store of another
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45394
diff changeset
    86
#   repo. Hence both of them should be stored in working copy
45494
d252f51ab032 share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45406
diff changeset
    87
# * SHARESAFE_REQUIREMENT needs to be stored in working dir to mark that rest of
d252f51ab032 share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45406
diff changeset
    88
#   the requirements are stored in store's requires
47288
ed0d54b20c5b dirstate-v2: Add a new experimental `exp-dirstate-v2` repository requirement
Simon Sapin <simon.sapin@octobus.net>
parents: 47274
diff changeset
    89
# * DIRSTATE_V2_REQUIREMENT affects .hg/dirstate, of which there is one per
ed0d54b20c5b dirstate-v2: Add a new experimental `exp-dirstate-v2` repository requirement
Simon Sapin <simon.sapin@octobus.net>
parents: 47274
diff changeset
    90
#   working directory.
45406
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45394
diff changeset
    91
WORKING_DIR_REQUIREMENTS = {
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45394
diff changeset
    92
    SPARSE_REQUIREMENT,
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45394
diff changeset
    93
    SHARED_REQUIREMENT,
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45394
diff changeset
    94
    RELATIVE_SHARED_REQUIREMENT,
45494
d252f51ab032 share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45406
diff changeset
    95
    SHARESAFE_REQUIREMENT,
47288
ed0d54b20c5b dirstate-v2: Add a new experimental `exp-dirstate-v2` repository requirement
Simon Sapin <simon.sapin@octobus.net>
parents: 47274
diff changeset
    96
    DIRSTATE_V2_REQUIREMENT,
45406
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45394
diff changeset
    97
}
48623
baddab229b86 stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48621
diff changeset
    98
baddab229b86 stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48621
diff changeset
    99
# List of requirement that impact "stream-clone" (and hardlink clone) and
baddab229b86 stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48621
diff changeset
   100
# cannot be changed in such cases.
baddab229b86 stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48621
diff changeset
   101
#
baddab229b86 stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48621
diff changeset
   102
# requirements not in this list are safe to be altered during stream-clone.
baddab229b86 stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48621
diff changeset
   103
#
baddab229b86 stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48621
diff changeset
   104
# note: the list is currently inherited from previous code and miss some relevant requirement while containing some irrelevant ones.
baddab229b86 stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48621
diff changeset
   105
STREAM_FIXED_REQUIREMENTS = {
baddab229b86 stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48621
diff changeset
   106
    BOOKMARKS_IN_STORE_REQUIREMENT,
baddab229b86 stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48621
diff changeset
   107
    CHANGELOGV2_REQUIREMENT,
baddab229b86 stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48621
diff changeset
   108
    COPIESSDC_REQUIREMENT,
baddab229b86 stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48621
diff changeset
   109
    DIRSTATE_V2_REQUIREMENT,
baddab229b86 stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48621
diff changeset
   110
    GENERALDELTA_REQUIREMENT,
baddab229b86 stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48621
diff changeset
   111
    NODEMAP_REQUIREMENT,
baddab229b86 stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48621
diff changeset
   112
    REVLOGV1_REQUIREMENT,
baddab229b86 stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48621
diff changeset
   113
    REVLOGV2_REQUIREMENT,
baddab229b86 stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48621
diff changeset
   114
    SHARESAFE_REQUIREMENT,
baddab229b86 stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48621
diff changeset
   115
    SPARSEREVLOG_REQUIREMENT,
baddab229b86 stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48621
diff changeset
   116
    TREEMANIFEST_REQUIREMENT,
baddab229b86 stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48621
diff changeset
   117
}