[Updated] D9151: test: add test-transaction-rollback-on-sigpipe.t demonstrating py3 regression
mplamann (Mitchell Plamann)
phabricator at mercurial-scm.org
Fri Oct 16 07:49:00 UTC 2020
Closed by commit rHG2c6b054e22d0: test: add test-transaction-rollback-on-sigpipe.t demonstrating py3 regression (authored by mplamann).
This revision was automatically updated to reflect the committed changes.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D9151?vs=23206&id=23246
CHANGES SINCE LAST ACTION
https://phab.mercurial-scm.org/D9151/new/
REVISION DETAIL
https://phab.mercurial-scm.org/D9151
AFFECTED FILES
tests/test-transaction-rollback-on-sigpipe.t
CHANGE DETAILS
diff --git a/tests/test-transaction-rollback-on-sigpipe.t b/tests/test-transaction-rollback-on-sigpipe.t
new file mode 100644
--- /dev/null
+++ b/tests/test-transaction-rollback-on-sigpipe.t
@@ -0,0 +1,67 @@
+Test that, when an hg push is interrupted and the remote side recieves SIGPIPE,
+the remote hg is able to successfully roll back the transaction.
+
+ $ hg init -q remote
+ $ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" -q ssh://user@dummy/`pwd`/remote local
+
+ $ check_for_abandoned_transaction() {
+ > [[ -f $TESTTMP/remote/.hg/store/journal ]] && echo "Abandoned transaction!"
+ > }
+
+ $ pidfile=`pwd`/pidfile
+ $ >$pidfile
+
+ $ script() {
+ > cat >"$1"
+ > chmod +x "$1"
+ > }
+
+On the remote end, run hg, piping stdout and stderr through processes that we
+know the PIDs of. We will later kill these to simulate an ssh client
+disconnecting.
+
+ $ killable_pipe=`pwd`/killable_pipe.sh
+ $ script $killable_pipe <<EOF
+ > #!/bin/bash
+ > echo \$\$ >> $pidfile
+ > exec cat
+ > EOF
+
+ $ remotecmd=`pwd`/remotecmd.sh
+ $ script $remotecmd <<EOF
+ > #!/bin/bash
+ > hg "\$@" 1> >($killable_pipe) 2> >($killable_pipe >&2)
+ > EOF
+
+In the pretxnchangegroup hook, kill the PIDs recorded above to simulate ssh
+disconnecting. Then exit nonzero, to force a transaction rollback.
+
+ $ hook_script=`pwd`/pretxnchangegroup.sh
+ $ script $hook_script <<EOF
+ > #!/bin/bash
+ > for pid in \$(cat $pidfile) ; do
+ > kill \$pid
+ > while kill -0 \$pid 2>/dev/null ; do
+ > sleep 0.1
+ > done
+ > done
+ > exit 1
+ > EOF
+
+ $ cat >remote/.hg/hgrc <<EOF
+ > [hooks]
+ > pretxnchangegroup.break-things=$hook_script
+ > EOF
+
+ $ cd local
+ $ echo foo > foo ; hg commit -qAm "commit"
+ $ hg push -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" --remotecmd $remotecmd 2>&1 | grep -v $killable_pipe
+ pushing to ssh://user@dummy/$TESTTMP/remote
+ searching for changes
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ abort: stream ended unexpectedly (got 0 bytes, expected 4)
+
+ $ check_for_abandoned_transaction
+ Abandoned transaction!
To: mplamann, #hg-reviewers, pulkit
Cc: pulkit, mercurial-patches
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-patches/attachments/20201016/ffb645ab/attachment-0002.html>
More information about the Mercurial-patches
mailing list