Show More
@@ -195,7 +195,7 b' def parsebundlespec(repo, spec, strict=T' | |||
|
195 | 195 | # repo supports and error if the bundle isn't compatible. |
|
196 | 196 | if version == b'packed1' and b'requirements' in params: |
|
197 | 197 | requirements = set(params[b'requirements'].split(b',')) |
|
198 |
missingreqs = requirements - re |
|
|
198 | missingreqs = requirements - requirementsmod.STREAM_FIXED_REQUIREMENTS | |
|
199 | 199 | if missingreqs: |
|
200 | 200 | raise error.UnsupportedBundleSpecification( |
|
201 | 201 | _(b'missing support for repository features: %s') |
@@ -89,3 +89,23 b' WORKING_DIR_REQUIREMENTS = {' | |||
|
89 | 89 | SHARESAFE_REQUIREMENT, |
|
90 | 90 | DIRSTATE_V2_REQUIREMENT, |
|
91 | 91 | } |
|
92 | ||
|
93 | # List of requirement that impact "stream-clone" (and hardlink clone) and | |
|
94 | # cannot be changed in such cases. | |
|
95 | # | |
|
96 | # requirements not in this list are safe to be altered during stream-clone. | |
|
97 | # | |
|
98 | # note: the list is currently inherited from previous code and miss some relevant requirement while containing some irrelevant ones. | |
|
99 | STREAM_FIXED_REQUIREMENTS = { | |
|
100 | BOOKMARKS_IN_STORE_REQUIREMENT, | |
|
101 | CHANGELOGV2_REQUIREMENT, | |
|
102 | COPIESSDC_REQUIREMENT, | |
|
103 | DIRSTATE_V2_REQUIREMENT, | |
|
104 | GENERALDELTA_REQUIREMENT, | |
|
105 | NODEMAP_REQUIREMENT, | |
|
106 | REVLOGV1_REQUIREMENT, | |
|
107 | REVLOGV2_REQUIREMENT, | |
|
108 | SHARESAFE_REQUIREMENT, | |
|
109 | SPARSEREVLOG_REQUIREMENT, | |
|
110 | TREEMANIFEST_REQUIREMENT, | |
|
111 | } |
@@ -32,9 +32,7 b' from .utils import (' | |||
|
32 | 32 | ) |
|
33 | 33 | |
|
34 | 34 | |
|
35 | def new_stream_clone_requirements( | |
|
36 | supported_formats, default_requirements, streamed_requirements | |
|
37 | ): | |
|
35 | def new_stream_clone_requirements(default_requirements, streamed_requirements): | |
|
38 | 36 | """determine the final set of requirement for a new stream clone |
|
39 | 37 | |
|
40 | 38 | this method combine the "default" requirements that a new repository would |
@@ -42,7 +40,7 b' def new_stream_clone_requirements(' | |||
|
42 | 40 | configuration choice when possible. |
|
43 | 41 | """ |
|
44 | 42 | requirements = set(default_requirements) |
|
45 | requirements -= supported_formats | |
|
43 | requirements -= requirementsmod.STREAM_FIXED_REQUIREMENTS | |
|
46 | 44 | requirements.update(streamed_requirements) |
|
47 | 45 | return requirements |
|
48 | 46 | |
@@ -52,7 +50,9 b' def streamed_requirements(repo):' | |||
|
52 | 50 | |
|
53 | 51 | This is used for advertising the stream options and to generate the actual |
|
54 | 52 | stream content.""" |
|
55 | requiredformats = repo.requirements & repo.supportedformats | |
|
53 | requiredformats = ( | |
|
54 | repo.requirements & requirementsmod.STREAM_FIXED_REQUIREMENTS | |
|
55 | ) | |
|
56 | 56 | return requiredformats |
|
57 | 57 | |
|
58 | 58 | |
@@ -209,7 +209,6 b' def maybeperformlegacystreamclone(pullop' | |||
|
209 | 209 | with repo.lock(): |
|
210 | 210 | consumev1(repo, fp, filecount, bytecount) |
|
211 | 211 | repo.requirements = new_stream_clone_requirements( |
|
212 | repo.supportedformats, | |
|
213 | 212 | repo.requirements, |
|
214 | 213 | requirements, |
|
215 | 214 | ) |
@@ -820,7 +819,6 b' def applybundlev2(repo, fp, filecount, f' | |||
|
820 | 819 | consumev2(repo, fp, filecount, filesize) |
|
821 | 820 | |
|
822 | 821 | repo.requirements = new_stream_clone_requirements( |
|
823 | repo.supportedformats, | |
|
824 | 822 | repo.requirements, |
|
825 | 823 | requirements, |
|
826 | 824 | ) |
General Comments 0
You need to be logged in to leave comments.
Login now