30 from .utils import ( |
30 from .utils import ( |
31 stringutil, |
31 stringutil, |
32 ) |
32 ) |
33 |
33 |
34 |
34 |
35 def new_stream_clone_requirements( |
35 def new_stream_clone_requirements(default_requirements, streamed_requirements): |
36 supported_formats, default_requirements, streamed_requirements |
|
37 ): |
|
38 """determine the final set of requirement for a new stream clone |
36 """determine the final set of requirement for a new stream clone |
39 |
37 |
40 this method combine the "default" requirements that a new repository would |
38 this method combine the "default" requirements that a new repository would |
41 use with the constaint we get from the stream clone content. We keep local |
39 use with the constaint we get from the stream clone content. We keep local |
42 configuration choice when possible. |
40 configuration choice when possible. |
43 """ |
41 """ |
44 requirements = set(default_requirements) |
42 requirements = set(default_requirements) |
45 requirements -= supported_formats |
43 requirements -= requirementsmod.STREAM_FIXED_REQUIREMENTS |
46 requirements.update(streamed_requirements) |
44 requirements.update(streamed_requirements) |
47 return requirements |
45 return requirements |
48 |
46 |
49 |
47 |
50 def streamed_requirements(repo): |
48 def streamed_requirements(repo): |
51 """the set of requirement the new clone will have to support |
49 """the set of requirement the new clone will have to support |
52 |
50 |
53 This is used for advertising the stream options and to generate the actual |
51 This is used for advertising the stream options and to generate the actual |
54 stream content.""" |
52 stream content.""" |
55 requiredformats = repo.requirements & repo.supportedformats |
53 requiredformats = ( |
|
54 repo.requirements & requirementsmod.STREAM_FIXED_REQUIREMENTS |
|
55 ) |
56 return requiredformats |
56 return requiredformats |
57 |
57 |
58 |
58 |
59 def canperformstreamclone(pullop, bundle2=False): |
59 def canperformstreamclone(pullop, bundle2=False): |
60 """Whether it is possible to perform a streaming clone as part of pull. |
60 """Whether it is possible to perform a streaming clone as part of pull. |
207 ) |
207 ) |
208 |
208 |
209 with repo.lock(): |
209 with repo.lock(): |
210 consumev1(repo, fp, filecount, bytecount) |
210 consumev1(repo, fp, filecount, bytecount) |
211 repo.requirements = new_stream_clone_requirements( |
211 repo.requirements = new_stream_clone_requirements( |
212 repo.supportedformats, |
|
213 repo.requirements, |
212 repo.requirements, |
214 requirements, |
213 requirements, |
215 ) |
214 ) |
216 repo.svfs.options = localrepo.resolvestorevfsoptions( |
215 repo.svfs.options = localrepo.resolvestorevfsoptions( |
217 repo.ui, repo.requirements, repo.features |
216 repo.ui, repo.requirements, repo.features |
818 ) |
817 ) |
819 |
818 |
820 consumev2(repo, fp, filecount, filesize) |
819 consumev2(repo, fp, filecount, filesize) |
821 |
820 |
822 repo.requirements = new_stream_clone_requirements( |
821 repo.requirements = new_stream_clone_requirements( |
823 repo.supportedformats, |
|
824 repo.requirements, |
822 repo.requirements, |
825 requirements, |
823 requirements, |
826 ) |
824 ) |
827 repo.svfs.options = localrepo.resolvestorevfsoptions( |
825 repo.svfs.options = localrepo.resolvestorevfsoptions( |
828 repo.ui, repo.requirements, repo.features |
826 repo.ui, repo.requirements, repo.features |