Mercurial > hg
changeset 35758: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 |
parents | bbf7abd09ff0 |
children | c24dad55ac19 |
files | mercurial/bundle2.py |
diffstat | 1 files changed, 28 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/bundle2.py Thu Jan 18 00:45:27 2018 +0100 +++ b/mercurial/bundle2.py Wed Jan 17 16:35:22 2018 +0100 @@ -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()