Mercurial > hg
changeset 28532:ed75909c4c67
merge with stable
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Tue, 15 Mar 2016 14:10:46 -0700 |
parents | fe79a5821e5a (current diff) aa440c3d7c5d (diff) |
children | dfd5a6830ea7 |
files | mercurial/streamclone.py |
diffstat | 2 files changed, 42 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/streamclone.py Fri Mar 11 20:34:49 2016 -0500 +++ b/mercurial/streamclone.py Tue Mar 15 14:10:46 2016 -0700 @@ -206,7 +206,8 @@ # partially encode name over the wire for backwards compat yield '%s\0%d\n' % (store.encodedir(name), size) if size <= 65536: - yield svfs.read(name) + with svfs(name, 'rb') as fp: + yield fp.read(size) else: for chunk in util.filechunkiter(svfs(name), limit=size): yield chunk
--- a/tests/test-clone-uncompressed.t Fri Mar 11 20:34:49 2016 -0500 +++ b/tests/test-clone-uncompressed.t Tue Mar 15 14:10:46 2016 -0700 @@ -50,3 +50,43 @@ preparing listkeys for "phases" sending listkeys command received listkey for "phases": 58 bytes + + +Stream clone while repo is changing: + + $ mkdir changing + $ cd changing + +extension for delaying the server process so we reliably can modify the repo +while cloning + + $ cat > delayer.py <<EOF + > import time + > from mercurial import extensions, scmutil + > def __call__(orig, self, path, *args, **kwargs): + > if path == 'data/f1.i': + > time.sleep(2) + > return orig(self, path, *args, **kwargs) + > extensions.wrapfunction(scmutil.vfs, '__call__', __call__) + > EOF + +prepare repo with small and big file to cover both code paths in emitrevlogdata + + $ hg init repo + $ touch repo/f1 + $ $TESTDIR/seq.py 50000 > repo/f2 + $ hg -R repo ci -Aqm "0" + $ hg -R repo serve -p $HGPORT1 -d --pid-file=hg.pid --config extensions.delayer=delayer.py + $ cat hg.pid >> $DAEMON_PIDS + +clone while modifying the repo between stating file with write lock and +actually serving file content + + $ hg clone -q --uncompressed -U http://localhost:$HGPORT1 clone & + $ sleep 1 + $ echo >> repo/f1 + $ echo >> repo/f2 + $ hg -R repo ci -m "1" + $ wait + $ hg -R clone id + 000000000000