mercurial/exchange.py
changeset 37165 6c7a6b04b274
parent 37164 b229fd9adeae
child 37167 6f467adf9f05
equal deleted inserted replaced
37164:b229fd9adeae 37165:6c7a6b04b274
    50                          'v2': '02',
    50                          'v2': '02',
    51                          'packed1': 's1',
    51                          'packed1': 's1',
    52                          'bundle2': '02', #legacy
    52                          'bundle2': '02', #legacy
    53                         }
    53                         }
    54 
    54 
       
    55 # Maps bundle version with content opts to choose which part to bundle
       
    56 _bundlespeccontentopts = {
       
    57     'v1': {
       
    58         'changegroup': True,
       
    59         'cg.version': '01',
       
    60         'obsolescence': False,
       
    61         'phases': False,
       
    62         'tagsfnodescache': False,
       
    63         'revbranchcache': False
       
    64     },
       
    65     'v2': {
       
    66         'changegroup': True,
       
    67         'cg.version': '02',
       
    68         'obsolescence': False,
       
    69         'phases': False,
       
    70         'tagsfnodescache': True,
       
    71         'revbranchcache': True
       
    72     },
       
    73     'packed1' : {
       
    74         'cg.version': 's1'
       
    75     }
       
    76 }
       
    77 _bundlespeccontentopts['bundle2'] = _bundlespeccontentopts['v2']
       
    78 
    55 # Compression engines allowed in version 1. THIS SHOULD NEVER CHANGE.
    79 # Compression engines allowed in version 1. THIS SHOULD NEVER CHANGE.
    56 _bundlespecv1compengines = {'gzip', 'bzip2', 'none'}
    80 _bundlespecv1compengines = {'gzip', 'bzip2', 'none'}
    57 
    81 
    58 @attr.s
    82 @attr.s
    59 class bundlespec(object):
    83 class bundlespec(object):
    60     compression = attr.ib()
    84     compression = attr.ib()
    61     version = attr.ib()
    85     version = attr.ib()
    62     params = attr.ib()
    86     params = attr.ib()
       
    87     contentopts = attr.ib()
    63 
    88 
    64 def parsebundlespec(repo, spec, strict=True, externalnames=False):
    89 def parsebundlespec(repo, spec, strict=True, externalnames=False):
    65     """Parse a bundle string specification into parts.
    90     """Parse a bundle string specification into parts.
    66 
    91 
    67     Bundle specifications denote a well-defined bundle/exchange format.
    92     Bundle specifications denote a well-defined bundle/exchange format.
   176         if missingreqs:
   201         if missingreqs:
   177             raise error.UnsupportedBundleSpecification(
   202             raise error.UnsupportedBundleSpecification(
   178                     _('missing support for repository features: %s') %
   203                     _('missing support for repository features: %s') %
   179                       ', '.join(sorted(missingreqs)))
   204                       ', '.join(sorted(missingreqs)))
   180 
   205 
       
   206     # Compute contentopts based on the version
       
   207     contentopts = _bundlespeccontentopts.get(version, {}).copy()
       
   208 
   181     if not externalnames:
   209     if not externalnames:
   182         engine = util.compengines.forbundlename(compression)
   210         engine = util.compengines.forbundlename(compression)
   183         compression = engine.bundletype()[1]
   211         compression = engine.bundletype()[1]
   184         version = _bundlespeccgversions[version]
   212         version = _bundlespeccgversions[version]
   185 
   213 
   186     return bundlespec(compression, version, params)
   214     return bundlespec(compression, version, params, contentopts)
   187 
   215 
   188 def readbundle(ui, fh, fname, vfs=None):
   216 def readbundle(ui, fh, fname, vfs=None):
   189     header = changegroup.readexactly(fh, 4)
   217     header = changegroup.readexactly(fh, 4)
   190 
   218 
   191     alg = None
   219     alg = None