Mercurial > hg > mercurial-source
diff mercurial/bundle2.py @ 36544:b996ddf5963d
bundle2: add a 'stream' part handler for stream cloning
The part contains the necessary arguments and payload to handle a stream bundle
v2. It will be put to use in later changesets.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Wed, 17 Jan 2018 16:35:22 +0100 (2018-01-17) |
parents | 2f54a3e228ff |
children | 7eedbd5d4880 |
line wrap: on
line diff
--- a/mercurial/bundle2.py +++ b/mercurial/bundle2.py @@ -164,6 +164,7 @@ phases, pushkey, pycompat, + streamclone, tags, url, util, @@ -2114,3 +2115,30 @@ key = "USERVAR_" + key hookargs[key] = value op.addhookargs(hookargs) + +@parthandler('stream', ('requirements', 'filecount', 'bytecount', 'version')) +def handlestreambundle(op, part): + + version = part.params['version'] + if version != 'v2': + raise error.Abort(_('unknown stream bundle version %s') % version) + requirements = part.params['requirements'].split() + filecount = int(part.params['filecount']) + bytecount = int(part.params['bytecount']) + + repo = op.repo + if len(repo): + msg = _('cannot apply stream clone to non empty repository') + raise error.Abort(msg) + + repo.ui.debug('applying stream bundle\n') + streamclone.applybundlev2(repo, part, filecount, bytecount, + requirements) + + # new requirements = old non-format requirements + + # new format-related remote requirements + # requirements from the streamed-in repository + repo.requirements = set(requirements) | ( + repo.requirements - repo.supportedformats) + repo._applyopenerreqs() + repo._writerequirements()