Mercurial > hg
changeset 26639:92d67e5729b9
exchange: move bundle specification parsing from cmdutil
Clone bundles require a well-defined string to specify the type of
bundle that is listed so clients can filter compatible file types. The
`hg bundle` command and cmdutil.parsebundletype() already establish the
beginnings of a bundle specification format.
As part of formalizing this format specification so it can be used by
clone bundles, we move the specification parsing bits verbatim to
exchange.py, which is a more suitable place than cmdutil.py. A
subsequent patch will refactor this code to make it more appropriate as
a general API.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Tue, 13 Oct 2015 11:43:21 -0700 |
parents | 7afaf2566e25 |
children | b13fdcc4e700 |
files | mercurial/cmdutil.py mercurial/commands.py mercurial/exchange.py |
diffstat | 3 files changed, 54 insertions(+), 54 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/cmdutil.py Tue Mar 24 00:28:28 2015 +0900 +++ b/mercurial/cmdutil.py Tue Oct 13 11:43:21 2015 -0700 @@ -3366,56 +3366,3 @@ % self._suffix) raise error.Abort(msg) self._abort() - -_bundlecompspecs = {'none': None, - 'bzip2': 'BZ', - 'gzip': 'GZ', - } - -_bundleversionspecs = {'v1': '01', - 'v2': '02', - 'bundle2': '02', #legacy - } - -def parsebundletype(repo, spec): - """return the internal bundle type to use from a user input - - This is parsing user specified bundle type as accepted in: - - 'hg bundle --type TYPE'. - - It accept format in the form [compression][-version]|[version] - - Consensus about extensions of the format for various bundle2 feature - is to prefix any feature with "+". eg "+treemanifest" or "gzip+phases" - """ - comp, version = None, None - - if '-' in spec: - comp, version = spec.split('-', 1) - elif spec in _bundlecompspecs: - comp = spec - elif spec in _bundleversionspecs: - version = spec - else: - raise error.Abort(_('unknown bundle type specified with --type')) - - if comp is None: - comp = 'BZ' - else: - try: - comp = _bundlecompspecs[comp] - except KeyError: - raise error.Abort(_('unknown bundle type specified with --type')) - - if version is None: - version = '01' - if 'generaldelta' in repo.requirements: - version = '02' - else: - try: - version = _bundleversionspecs[version] - except KeyError: - raise error.Abort(_('unknown bundle type specified with --type')) - - return version, comp
--- a/mercurial/commands.py Tue Mar 24 00:28:28 2015 +0900 +++ b/mercurial/commands.py Tue Oct 13 11:43:21 2015 -0700 @@ -1242,7 +1242,7 @@ revs = scmutil.revrange(repo, opts['rev']) bundletype = opts.get('type', 'bzip2').lower() - cgversion, bcompression = cmdutil.parsebundletype(repo, bundletype) + cgversion, bcompression = exchange.parsebundlespec(repo, bundletype) if opts.get('all'): base = ['null']
--- a/mercurial/exchange.py Tue Mar 24 00:28:28 2015 +0900 +++ b/mercurial/exchange.py Tue Oct 13 11:43:21 2015 -0700 @@ -15,6 +15,59 @@ import tags import url as urlmod +_bundlecompspecs = {'none': None, + 'bzip2': 'BZ', + 'gzip': 'GZ', + } + +_bundleversionspecs = {'v1': '01', + 'v2': '02', + 'bundle2': '02', #legacy + } + +def parsebundlespec(repo, spec): + """return the internal bundle type to use from a user input + + This is parsing user specified bundle type as accepted in: + + 'hg bundle --type TYPE'. + + It accept format in the form [compression][-version]|[version] + + Consensus about extensions of the format for various bundle2 feature + is to prefix any feature with "+". eg "+treemanifest" or "gzip+phases" + """ + comp, version = None, None + + if '-' in spec: + comp, version = spec.split('-', 1) + elif spec in _bundlecompspecs: + comp = spec + elif spec in _bundleversionspecs: + version = spec + else: + raise error.Abort(_('unknown bundle type specified with --type')) + + if comp is None: + comp = 'BZ' + else: + try: + comp = _bundlecompspecs[comp] + except KeyError: + raise error.Abort(_('unknown bundle type specified with --type')) + + if version is None: + version = '01' + if 'generaldelta' in repo.requirements: + version = '02' + else: + try: + version = _bundleversionspecs[version] + except KeyError: + raise error.Abort(_('unknown bundle type specified with --type')) + + return version, comp + def readbundle(ui, fh, fname, vfs=None): header = changegroup.readexactly(fh, 4)