mercurial/streamclone.py
changeset 48596 739f2ca3aa3f
parent 47878 31a72e5e9200
child 48597 8475a1364909
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)