##// END OF EJS Templates
test: clarify some output in `test-transaction-rollback-on-sigpipe`...
marmoute -
r48350:452795b0 default
parent child Browse files
Show More
@@ -1,61 +1,65
1 #require bash
1 #require bash
2 Test that, when an hg push is interrupted and the remote side receives SIGPIPE,
2 Test that, when an hg push is interrupted and the remote side receives SIGPIPE,
3 the remote hg is able to successfully roll back the transaction.
3 the remote hg is able to successfully roll back the transaction.
4
4
5 $ hg init -q remote
5 $ hg init -q remote
6 $ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" -q ssh://user@dummy/`pwd`/remote local
6 $ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" -q ssh://user@dummy/`pwd`/remote local
7
7
8 $ pidfile=`pwd`/pidfile
8 $ pidfile=`pwd`/pidfile
9 $ >$pidfile
9 $ >$pidfile
10
10
11 $ script() {
11 $ script() {
12 > cat >"$1"
12 > cat >"$1"
13 > chmod +x "$1"
13 > chmod +x "$1"
14 > }
14 > }
15
15
16 On the remote end, run hg, piping stdout and stderr through processes that we
16 On the remote end, run hg, piping stdout and stderr through processes that we
17 know the PIDs of. We will later kill these to simulate an ssh client
17 know the PIDs of. We will later kill these to simulate an ssh client
18 disconnecting.
18 disconnecting.
19
19
20 $ killable_pipe=`pwd`/killable_pipe.sh
20 $ killable_pipe=`pwd`/killable_pipe.sh
21 $ script $killable_pipe <<EOF
21 $ script $killable_pipe <<EOF
22 > #!/usr/bin/env bash
22 > #!/usr/bin/env bash
23 > echo \$\$ >> $pidfile
23 > echo \$\$ >> $pidfile
24 > exec cat
24 > exec cat
25 > EOF
25 > EOF
26
26
27 $ remotecmd=`pwd`/remotecmd.sh
27 $ remotecmd=`pwd`/remotecmd.sh
28 $ script $remotecmd <<EOF
28 $ script $remotecmd <<EOF
29 > #!/usr/bin/env bash
29 > #!/usr/bin/env bash
30 > hg "\$@" 1> >($killable_pipe) 2> >($killable_pipe >&2)
30 > hg "\$@" 1> >($killable_pipe) 2> >($killable_pipe >&2)
31 > EOF
31 > EOF
32
32
33 In the pretxnchangegroup hook, kill the PIDs recorded above to simulate ssh
33 In the pretxnchangegroup hook, kill the PIDs recorded above to simulate ssh
34 disconnecting. Then exit nonzero, to force a transaction rollback.
34 disconnecting. Then exit nonzero, to force a transaction rollback.
35
35
36 $ hook_script=`pwd`/pretxnchangegroup.sh
36 $ hook_script=`pwd`/pretxnchangegroup.sh
37 $ script $hook_script <<EOF
37 $ script $hook_script <<EOF
38 > #!/usr/bin/env bash
38 > #!/usr/bin/env bash
39 > for pid in \$(cat $pidfile) ; do
39 > for pid in \$(cat $pidfile) ; do
40 > kill \$pid
40 > kill \$pid
41 > while kill -0 \$pid 2>/dev/null ; do
41 > while kill -0 \$pid 2>/dev/null ; do
42 > sleep 0.1
42 > sleep 0.1
43 > done
43 > done
44 > done
44 > done
45 > exit 1
45 > exit 1
46 > EOF
46 > EOF
47
47
48 $ cat >remote/.hg/hgrc <<EOF
48 $ cat >remote/.hg/hgrc <<EOF
49 > [hooks]
49 > [hooks]
50 > pretxnchangegroup.break-things=$hook_script
50 > pretxnchangegroup.break-things=$hook_script
51 > EOF
51 > EOF
52
52
53 $ hg --cwd ./remote tip -T '{node|short}\n'
54 000000000000
53 $ cd local
55 $ cd local
54 $ echo foo > foo ; hg commit -qAm "commit"
56 $ echo foo > foo ; hg commit -qAm "commit"
55 $ hg push -q -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" --remotecmd $remotecmd 2>&1 | grep -v $killable_pipe
57 $ hg push -q -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" --remotecmd $remotecmd 2>&1 | grep -v $killable_pipe
56 abort: stream ended unexpectedly (got 0 bytes, expected 4)
58 abort: stream ended unexpectedly (got 0 bytes, expected 4)
57
59
58 The remote should be left in a good state
60 The remote should be left in a good state
61 $ hg --cwd ../remote tip -T '{node|short}\n'
62 000000000000
59 $ hg --cwd ../remote recover
63 $ hg --cwd ../remote recover
60 no interrupted transaction available
64 no interrupted transaction available
61 [1]
65 [1]
General Comments 0
You need to be logged in to leave comments. Login now