Mercurial > hg
diff tests/test-transaction-rollback-on-sigpipe.t @ 47618:27ff81547d35
sigpipe-remote: simply delegate pipe forwarding to subprocess we can kill
Instead of using sophisticated logics with thread a non blocking pipes, we
simply spawn two new process in charge of reading the pipe and sending the
result to the client. When it is time to cut the pipe we violently kill them
without any remorse. This close the pipe regardless of any in progress `os.read`
call.
Ironically this is the very same things as what the initial shell setup was
doing, but in Python.
This makes the test pass run properly on Windows. This also reveal that the
Windows behavior is broken as the transaction is not properly rollback. However
this is an adventure for another time. Making the test behave properly was
enough effort.
Differential Revision: https://phab.mercurial-scm.org/D11087
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 12 Jul 2021 03:30:04 +0200 |
parents | a8d1adeeba87 |
children | 9c4204b7f3e4 |
line wrap: on
line diff
--- a/tests/test-transaction-rollback-on-sigpipe.t Mon Jul 12 03:29:21 2021 +0200 +++ b/tests/test-transaction-rollback-on-sigpipe.t Mon Jul 12 03:30:04 2021 +0200 @@ -26,37 +26,55 @@ > [hooks] > pretxnchangegroup.00-break-things=sh "$RUNTESTDIR/testlib/wait-on-file" 10 "$SYNCFILE2" "$SYNCFILE1" > pretxnchangegroup.01-output-things=echo "some remote output to be forward to the closed pipe" + > pretxnchangegroup.02-output-things=echo "some more remote output" > EOF $ hg --cwd ./remote tip -T '{node|short}\n' 000000000000 $ cd local $ echo foo > foo ; hg commit -qAm "commit" - $ hg push -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" --remotecmd "$remotecmd" - pushing to ssh://user@dummy/$TESTTMP/remote - searching for changes - remote: adding changesets (py3 !) - remote: adding manifests (py3 !) - remote: adding file changes (py3 !) - remote: adding changesets (no-py3 no-chg !) - remote: adding manifests (no-py3 no-chg !) - remote: adding file changes (no-py3 no-chg !) + +(use quiet to avoid flacky output from the server) + + $ hg push --quiet -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" --remotecmd "$remotecmd" abort: stream ended unexpectedly (got 0 bytes, expected 4) [255] $ cat $SIGPIPE_REMOTE_DEBUG_FILE SIGPIPE-HELPER: Starting - SIGPIPE-HELPER: Mercurial started SIGPIPE-HELPER: Redirection in place + SIGPIPE-HELPER: pipes closed in main SIGPIPE-HELPER: SYNCFILE1 detected - SIGPIPE-HELPER: pipes closed + SIGPIPE-HELPER: worker killed SIGPIPE-HELPER: creating SYNCFILE2 SIGPIPE-HELPER: Shutting down - SIGPIPE-HELPER: Server process terminated + SIGPIPE-HELPER: Server process terminated with status 255 (no-windows !) + SIGPIPE-HELPER: Server process terminated with status 1 (windows !) SIGPIPE-HELPER: Shut down The remote should be left in a good state $ hg --cwd ../remote tip -T '{node|short}\n' 000000000000 + +#if windows + +XXX-Windows Broken behavior to be fixed + +Behavior on Windows is broken and should be fixed. However this is a fairly +corner case situation and no data are being corrupted. This would affect +central repository being hosted on a Windows machine and accessed using ssh. + +This was catch as we setup new CI for Windows. Making the test pass on Windows +was enough of a pain that fixing the behavior set aside for now. Dear and +honorable reader, feel free to fix it. + + $ hg --cwd ../remote recover + rolling back interrupted transaction + (verify step skipped, run `hg verify` to check your repository content) + +#else + $ hg --cwd ../remote recover no interrupted transaction available [1] + +#endif