Mercurial > hg
view tests/test-transaction-rollback-on-sigpipe.t @ 47375:8125bcd28a5c
rewriteutil: add pointer to help text when rewrite would cause divergence
The evolve extension's version of the hint has this pointer. I missed
it when I moved it to core. This is pretty much the same as
D10723. Turns out I missed two places :(
Differential Revision: https://phab.mercurial-scm.org/D10832
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Tue, 01 Jun 2021 22:38:29 -0700 |
parents | aa07bcc4f505 |
children | 452795b0b69a |
line wrap: on
line source
#require bash Test that, when an hg push is interrupted and the remote side receives 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 $ 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 > #!/usr/bin/env bash > echo \$\$ >> $pidfile > exec cat > EOF $ remotecmd=`pwd`/remotecmd.sh $ script $remotecmd <<EOF > #!/usr/bin/env 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 > #!/usr/bin/env 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 -q -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" --remotecmd $remotecmd 2>&1 | grep -v $killable_pipe abort: stream ended unexpectedly (got 0 bytes, expected 4) The remote should be left in a good state $ hg --cwd ../remote recover no interrupted transaction available [1]