Mercurial > public > mercurial-scm > hg-stable
annotate mercurial/requirements.py @ 45494:d252f51ab032
share: introduce config option to store requires in .hg/store
This introduces a config option which enabled stores the requirements on a
repository in store instead.
When enabled, `.hg/requires` will contain the `share-safe` requirement which
marks that the requirements are present in the store.
This is done so that repository requirements can be shared with shares made
using `hg share` command.
After this patch, `hg share` checks whether the source repository has
share-safe requirement, if yes, it does not copy the requirements.
Test for the new functionality is added and a test case in exitsing share tests
is also added.
Differential Revision: https://phab.mercurial-scm.org/D8633
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Tue, 14 Apr 2020 21:07:09 +0530 |
parents | 034d94f8761b |
children | 6e81446bf1d9 |
rev | line source |
---|---|
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 # |
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com> |
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 |
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
10 # 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
|
11 # we should move this to just "narrow" or similar. |
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
12 NARROW_REQUIREMENT = b'narrowhg-experimental' |
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
13 |
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
14 # Enables sparse working directory usage |
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
15 SPARSE_REQUIREMENT = b'exp-sparse' |
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
16 |
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
17 # 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
|
18 # of stripping them |
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
19 INTERNAL_PHASE_REQUIREMENT = b'internal-phase' |
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
20 |
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
21 # Stores manifest in Tree structure |
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
22 TREEMANIFEST_REQUIREMENT = b'treemanifest' |
45393
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45392
diff
changeset
|
23 |
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45392
diff
changeset
|
24 # 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
|
25 # clients. |
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45392
diff
changeset
|
26 REVLOGV2_REQUIREMENT = b'exp-revlogv2.1' |
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45392
diff
changeset
|
27 |
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45392
diff
changeset
|
28 # 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
|
29 # 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
|
30 # 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
|
31 # 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
|
32 # 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
|
33 # 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
|
34 # 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
|
35 SPARSEREVLOG_REQUIREMENT = b'sparserevlog' |
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45392
diff
changeset
|
36 |
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45392
diff
changeset
|
37 # A repository with the sidedataflag requirement will allow to store extra |
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45392
diff
changeset
|
38 # information for revision without altering their original hashes. |
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45392
diff
changeset
|
39 SIDEDATA_REQUIREMENT = b'exp-sidedata-flag' |
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45392
diff
changeset
|
40 |
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45392
diff
changeset
|
41 # 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
|
42 # copies related information in changeset's sidedata. |
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45392
diff
changeset
|
43 COPIESSDC_REQUIREMENT = b'exp-copies-sidedata-changeset' |
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45392
diff
changeset
|
44 |
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45392
diff
changeset
|
45 # 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
|
46 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
|
47 |
45406
034d94f8761b
requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45394
diff
changeset
|
48 # 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
|
49 SHARED_REQUIREMENT = b'shared' |
034d94f8761b
requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45394
diff
changeset
|
50 |
034d94f8761b
requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45394
diff
changeset
|
51 # 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
|
52 # 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
|
53 RELATIVE_SHARED_REQUIREMENT = b'relshared' |
034d94f8761b
requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45394
diff
changeset
|
54 |
45494
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
55 # 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
|
56 # 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
|
57 # `.hg/store/requires` are present. |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
58 SHARESAFE_REQUIREMENT = b'exp-sharesafe' |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
59 |
45394
bd56597b2254
requirements: introduce a set of working directory specific requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45393
diff
changeset
|
60 # 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
|
61 # 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
|
62 # share the same store |
45406
034d94f8761b
requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45394
diff
changeset
|
63 # * 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
|
64 # directory specific requirement |
034d94f8761b
requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45394
diff
changeset
|
65 # * 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
|
66 # 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
|
67 # 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
|
68 # * 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
|
69 # the requirements are stored in store's requires |
45406
034d94f8761b
requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45394
diff
changeset
|
70 WORKING_DIR_REQUIREMENTS = { |
034d94f8761b
requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45394
diff
changeset
|
71 SPARSE_REQUIREMENT, |
034d94f8761b
requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45394
diff
changeset
|
72 SHARED_REQUIREMENT, |
034d94f8761b
requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45394
diff
changeset
|
73 RELATIVE_SHARED_REQUIREMENT, |
45494
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
74 SHARESAFE_REQUIREMENT, |
45406
034d94f8761b
requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45394
diff
changeset
|
75 } |