comparison mercurial/streamclone.py @ 48596:739f2ca3aa3f

stream-clone: factor computation of new clone requirement out This gather code duplicated in multiple place and will make it easier to modify it safely in the future. Differential Revision: https://phab.mercurial-scm.org/D12027
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Fri, 14 Jan 2022 17:57:49 +0100
parents 31a72e5e9200
children 8475a1364909
comparison
equal deleted inserted replaced
48595:6a68350ec2ef 48596:739f2ca3aa3f
28 util, 28 util,
29 ) 29 )
30 from .utils import ( 30 from .utils import (
31 stringutil, 31 stringutil,
32 ) 32 )
33
34
35 def new_stream_clone_requirements(
36 supported_formats, default_requirements, streamed_requirements
37 ):
38 """determine the final set of requirement for a new stream clone
39
40 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
42 configuration choice when possible.
43 """
44 requirements = set(default_requirements)
45 requirements -= supported_formats
46 requirements.update(streamed_requirements)
47 return requirements
33 48
34 49
35 def canperformstreamclone(pullop, bundle2=False): 50 def canperformstreamclone(pullop, bundle2=False):
36 """Whether it is possible to perform a streaming clone as part of pull. 51 """Whether it is possible to perform a streaming clone as part of pull.
37 52
182 _(b'unexpected response from remote server:'), l 197 _(b'unexpected response from remote server:'), l
183 ) 198 )
184 199
185 with repo.lock(): 200 with repo.lock():
186 consumev1(repo, fp, filecount, bytecount) 201 consumev1(repo, fp, filecount, bytecount)
187 202 repo.requirements = new_stream_clone_requirements(
188 # new requirements = old non-format requirements + 203 repo.supportedformats,
189 # new format-related remote requirements 204 repo.requirements,
190 # requirements from the streamed-in repository 205 requirements,
191 repo.requirements = requirements | (
192 repo.requirements - repo.supportedformats
193 ) 206 )
194 repo.svfs.options = localrepo.resolvestorevfsoptions( 207 repo.svfs.options = localrepo.resolvestorevfsoptions(
195 repo.ui, repo.requirements, repo.features 208 repo.ui, repo.requirements, repo.features
196 ) 209 )
197 scmutil.writereporequirements(repo) 210 scmutil.writereporequirements(repo)
795 % b', '.join(sorted(missingreqs)) 808 % b', '.join(sorted(missingreqs))
796 ) 809 )
797 810
798 consumev2(repo, fp, filecount, filesize) 811 consumev2(repo, fp, filecount, filesize)
799 812
800 # new requirements = old non-format requirements + 813 repo.requirements = new_stream_clone_requirements(
801 # new format-related remote requirements 814 repo.supportedformats,
802 # requirements from the streamed-in repository 815 repo.requirements,
803 repo.requirements = set(requirements) | ( 816 requirements,
804 repo.requirements - repo.supportedformats
805 ) 817 )
806 repo.svfs.options = localrepo.resolvestorevfsoptions( 818 repo.svfs.options = localrepo.resolvestorevfsoptions(
807 repo.ui, repo.requirements, repo.features 819 repo.ui, repo.requirements, repo.features
808 ) 820 )
809 scmutil.writereporequirements(repo) 821 scmutil.writereporequirements(repo)