--- 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