Mercurial > hg
changeset 26468:19bbd53af46d
streamclone: move payload header line consumption
bundle2 parts have parameters. These are a logical place for "header"
data such as the file count and payload size of stream clone data. In
preparation for supporting stream clones with bundle2, move the
consumption of the header line from the payload into
maybeperformlegacystreamclone().
Note: the header line is still being emitted by generatev1(). This will
be addressed in a subsequent patch.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sun, 04 Oct 2015 18:44:46 -0700 |
parents | ff2c89239d49 |
children | fb743268510e |
files | mercurial/streamclone.py |
diffstat | 1 files changed, 15 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/streamclone.py Sun Oct 04 18:35:19 2015 -0700 +++ b/mercurial/streamclone.py Sun Oct 04 18:44:46 2015 -0700 @@ -127,9 +127,16 @@ elif resp != 0: raise util.Abort(_('the server sent an unknown error code')) + l = fp.readline() + try: + filecount, bytecount = map(int, l.split(' ', 1)) + except (ValueError, TypeError): + raise error.ResponseError( + _('unexpected response from remote server:'), l) + lock = repo.lock() try: - consumev1(repo, fp) + consumev1(repo, fp, filecount, bytecount) # new requirements = old non-format requirements + # new format-related remote requirements @@ -215,7 +222,7 @@ finally: svfs.mustaudit = oldaudit -def consumev1(repo, fp): +def consumev1(repo, fp, filecount, bytecount): """Apply the contents from version 1 of a streaming clone file handle. This takes the output from "streamout" and applies it to the specified @@ -227,21 +234,15 @@ lock = repo.lock() try: repo.ui.status(_('streaming all changes\n')) - l = fp.readline() - try: - total_files, total_bytes = map(int, l.split(' ', 1)) - except (ValueError, TypeError): - raise error.ResponseError( - _('unexpected response from remote server:'), l) repo.ui.status(_('%d files to transfer, %s of data\n') % - (total_files, util.bytecount(total_bytes))) + (filecount, util.bytecount(bytecount))) handled_bytes = 0 - repo.ui.progress(_('clone'), 0, total=total_bytes) + repo.ui.progress(_('clone'), 0, total=bytecount) start = time.time() tr = repo.transaction(_('clone')) try: - for i in xrange(total_files): + for i in xrange(filecount): # XXX doesn't support '\n' or '\r' in filenames l = fp.readline() try: @@ -257,8 +258,7 @@ ofp = repo.svfs(store.decodedir(name), 'w') for chunk in util.filechunkiter(fp, limit=size): handled_bytes += len(chunk) - repo.ui.progress(_('clone'), handled_bytes, - total=total_bytes) + repo.ui.progress(_('clone'), handled_bytes, total=bytecount) ofp.write(chunk) ofp.close() tr.close() @@ -273,7 +273,7 @@ elapsed = 0.001 repo.ui.progress(_('clone'), None) repo.ui.status(_('transferred %s in %.1f seconds (%s/sec)\n') % - (util.bytecount(total_bytes), elapsed, - util.bytecount(total_bytes / elapsed))) + (util.bytecount(bytecount), elapsed, + util.bytecount(bytecount / elapsed))) finally: lock.release()