tests/test-racy-mutations.t
changeset 50047 3997c64eff8b
parent 48834 c827bb7b5806
child 50085 28dfb2df4ab9
--- a/tests/test-racy-mutations.t	Mon Feb 13 23:56:13 2023 +0100
+++ b/tests/test-racy-mutations.t	Tue Feb 07 13:14:59 2023 +0100
@@ -6,8 +6,12 @@
 - something (that doesn't respect the lock file) writing to the .hg directory
 while we're running
 
-  $ hg init a
-  $ cd a
+
+Initial setup
+-------------
+
+  $ hg init base-repo
+  $ cd base-repo
 
   $ cat > "$TESTTMP_FORWARD_SLASH/waitlock_editor.sh" <<EOF
   >     [ -n "\${WAITLOCK_ANNOUNCE:-}" ] && touch "\${WAITLOCK_ANNOUNCE}"
@@ -26,46 +30,63 @@
   $ echo r0 > r0
   $ hg commit -qAm 'r0'
 
+  $ cd ..
+  $ cp -R base-repo main-client
+  $ cp -R base-repo racing-client
+
+  $ mkdir sync
+  $ EDITOR_STARTED="$TESTTMP_FORWARD_SLASH/sync/.editor_started"
+  $ MISCHIEF_MANAGED="$TESTTMP_FORWARD_SLASH/sync/.mischief_managed"
+  $ JOBS_FINISHED="$TESTTMP_FORWARD_SLASH/sync/.jobs_finished"
+
+Actual test
+-----------
+
 Start an hg commit that will take a while
-  $ EDITOR_STARTED="$TESTTMP_FORWARD_SLASH/a/.editor_started"
-  $ MISCHIEF_MANAGED="$TESTTMP_FORWARD_SLASH/a/.mischief_managed"
-  $ JOBS_FINISHED="$TESTTMP_FORWARD_SLASH/a/.jobs_finished"
+
+  $ cd main-client
 
 #if fail-if-detected
-  $ cat >> .hg/hgrc << EOF
+  $ cat >> $HGRCPATH << EOF
   > [debug]
   > revlog.verifyposition.changelog = fail
   > EOF
 #endif
 
-  $ cat >> .hg/hgrc << EOF
-  > [ui]
-  > editor=sh $TESTTMP_FORWARD_SLASH/waitlock_editor.sh
-  > EOF
-
   $ echo foo > foo
-  $ (unset HGEDITOR;
-  >      WAITLOCK_ANNOUNCE="${EDITOR_STARTED}" \
-  >      WAITLOCK_FILE="${MISCHIEF_MANAGED}" \
-  >           hg commit -qAm 'r1 (foo)' --edit foo > .foo_commit_out 2>&1 ; touch "${JOBS_FINISHED}") &
+  $ (
+  >    unset HGEDITOR;
+  >    WAITLOCK_ANNOUNCE="${EDITOR_STARTED}" \
+  >    WAITLOCK_FILE="${MISCHIEF_MANAGED}" \
+  >    hg commit -qAm 'r1 (foo)' --edit foo \
+  >    --config ui.editor="sh $TESTTMP_FORWARD_SLASH/waitlock_editor.sh" \
+  >    > .foo_commit_out 2>&1 ;\
+  >    touch "${JOBS_FINISHED}"
+  > ) &
 
 Wait for the "editor" to actually start
   $ sh "$RUNTESTDIR_FORWARD_SLASH/testlib/wait-on-file" 5 "${EDITOR_STARTED}"
 
-  $ cat >> .hg/hgrc << EOF
-  > [ui]
-  > editor=
-  > EOF
 
-Break the locks, and make another commit.
-  $ hg debuglocks -LW
+Do a concurrent edition
+  $ cd ../racing-client
+  $ touch ../pre-race
+  $ sleep 1
   $ echo bar > bar
-  $ hg commit -qAm 'r2 (bar)' bar
-  $ hg debugrevlogindex -c
+  $ hg --repository ../racing-client commit -qAm 'r2 (bar)' bar
+  $ hg --repository ../racing-client debugrevlogindex -c
      rev linkrev nodeid       p1           p2
        0       0 222799e2f90b 000000000000 000000000000
        1       1 6f124f6007a0 222799e2f90b 000000000000
 
+We simulate an network FS race by overwriting raced repo content with the new
+content of the files changed in the racing repository
+
+  $ for x in `find . -type f -newer ../pre-race`; do
+  >    cp $x ../main-client/$x
+  > done
+  $ cd ../main-client
+
 Awaken the editor from that first commit
   $ touch "${MISCHIEF_MANAGED}"
 And wait for it to finish