tests: add test of stream clone of repo that is changing stable
authorMads Kiilerich <madski@unity3d.com>
Sun, 13 Mar 2016 02:28:46 +0100
branchstable
changeset 30819 95163ababeb86d6ca889e5e57a0c4eadb77b53d8
parent 30625 48e1a641765d541a4bdc3f36b69cb3f5974040af
child 30820 aa440c3d7c5d2baafeb632ee35db4d917ed9cf83
push id208
push usergszorc@mozilla.com
push dateSat, 19 Mar 2016 01:42:47 +0000
tests: add test of stream clone of repo that is changing This reveals an error introduced by 9fea6b38a8da.
tests/test-clone-uncompressed.t
--- a/tests/test-clone-uncompressed.t
+++ b/tests/test-clone-uncompressed.t
@@ -45,8 +45,53 @@ Clone with background file closing enabl
   bundle2-input-bundle: with-transaction
   bundle2-input-part: "listkeys" (params: 1 mandatory) supported
   bundle2-input-part: "listkeys" (params: 1 mandatory) supported
   bundle2-input-bundle: 1 parts total
   checking for updated bookmarks
   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
+  abort: unexpected response from remote server:
+  '*\n' (glob)
+  $ hg -R clone id
+  abort: repository clone not found!
+  [255]
+
+the current clone error is a regression from 9fea6b38a8da.