annotate tests/test-nointerrupt.t @ 50329:3dbc7b1ecaba stable

typing: correct the signature of error.CommandError There's a place in `mercurial.dispatch._parse()` that passes None if a parse error happens before the command can be parsed out, and casting the error to bytes works fine because the command and message fields are apparently ignored. Likewise, TortoiseHg similarly passes None for the same reason.
author Matt Harbison <matt_harbison@yahoo.com>
date Fri, 24 Mar 2023 02:22:12 -0400
parents 8c75ae3f0eea
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47587
be496e3489b9 tests: blacklist a handful of test with `rhg` or `chg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47063
diff changeset
1 #require no-windows no-rhg
be496e3489b9 tests: blacklist a handful of test with `rhg` or `chg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47063
diff changeset
2
be496e3489b9 tests: blacklist a handful of test with `rhg` or `chg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47063
diff changeset
3 XXX-RHG this test hangs if `hg` is really `rhg`. This was hidden by the use of
be496e3489b9 tests: blacklist a handful of test with `rhg` or `chg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47063
diff changeset
4 `alias hg=rhg` by run-tests.py. With such alias removed, this test is revealed
be496e3489b9 tests: blacklist a handful of test with `rhg` or `chg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47063
diff changeset
5 buggy. This need to be resolved sooner than later.
39479
3ba87d5b9ad3 tests: disable test-nointerrupt on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 38656
diff changeset
6
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
7 Dummy extension simulating unsafe long running command
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
8 $ SYNC_FILE="$TESTTMP/sync-file"
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
9 $ export SYNC_FILE
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
10 $ DONE_FILE="$TESTTMP/done-file"
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
11 $ export DONE_FILE
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
12 $
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
13 $ cat > wait_ext.py <<EOF
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
14 > import os
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
15 > import time
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
16 >
38656
531f5e933e49 tests: properly sort imports in test-nointerrupt.t
Augie Fackler <augie@google.com>
parents: 38526
diff changeset
17 > from mercurial.i18n import _
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
18 > from mercurial import registrar
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
19 > from mercurial import testing
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
20 >
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
21 > cmdtable = {}
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
22 > command = registrar.command(cmdtable)
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
23 >
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
24 > @command(b'wait-signal', [], _(b'SYNC_FILE DONE_FILE'), norepo=True)
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
25 > def sleep(ui, sync_file=b"$SYNC_FILE", done_file=b"$DONE_FILE", **opts):
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
26 > start = time.time()
41076
8ecb17b7f432 procutil: correct spelling of uninterruptable -> uninterruptible
Kyle Lippincott <spectral@google.com>
parents: 39479
diff changeset
27 > with ui.uninterruptible():
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
28 > testing.write_file(sync_file, b'%d' % os.getpid())
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
29 > testing.wait_file(done_file)
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
30 > ui.warn(b"end of unsafe operation\n")
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
31 > ui.warn(b"%d second(s) passed\n" % int(time.time() - start))
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
32 > EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
33
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
34 $ cat > send-signal.sh << EOF
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
35 > #!/bin/sh
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
36 > SIG=\$1
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
37 > if [ -z "\$SIG" ]; then
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
38 > echo "send-signal.sh requires one argument" >&2
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
39 > exit 1
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
40 > fi
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
41 > "$RUNTESTDIR/testlib/wait-on-file" 10 "$SYNC_FILE" || exit 2
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
42 > kill -s \$SIG \`cat "$SYNC_FILE"\`
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
43 > EOF
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
44
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
45 #if no-windows
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
46 $ chmod +x send-signal.sh
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
47 #endif
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
48
49446
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
49 $ cat > wait-signal.sh << 'EOF'
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
50 > #!/bin/sh
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
51 > (hg wait-signal 2>&1; echo [$?]) | {
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
52 > read line
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
53 > touch "$DONE_FILE"
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
54 > echo "$line"
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
55 > cat
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
56 > }
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
57 > EOF
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
58
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
59 #if no-windows
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
60 $ chmod +x wait-signal.sh
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
61 #endif
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
62
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
63 Kludge to emulate timeout(1) which is not generally available.
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
64
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
65 Set up repository
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
66 $ hg init repo
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
67 $ cd repo
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
68 $ cat >> $HGRCPATH << EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
69 > [extensions]
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
70 > wait_ext = $TESTTMP/wait_ext.py
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
71 > EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
72
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
73 Test ctrl-c
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
74 $ rm -f $SYNC_FILE $DONE_FILE
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
75 $ sh -c "../send-signal.sh INT" &
49446
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
76 $ ../wait-signal.sh
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
77 interrupted!
48255
8c34edb1ad10 backout: backed out changeset 6edc8800dbc3
Raphaël Gomès <rgomes@octobus.net>
parents: 48186
diff changeset
78 [255]
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
79
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
80 $ cat >> $HGRCPATH << EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
81 > [experimental]
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
82 > nointerrupt = yes
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
83 > EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
84
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
85 $ rm -f $SYNC_FILE $DONE_FILE
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
86 $ sh -c "../send-signal.sh INT" &
49446
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
87 $ ../wait-signal.sh
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
88 interrupted!
48255
8c34edb1ad10 backout: backed out changeset 6edc8800dbc3
Raphaël Gomès <rgomes@octobus.net>
parents: 48186
diff changeset
89 [255]
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
90
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
91 $ cat >> $HGRCPATH << EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
92 > [experimental]
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
93 > nointerrupt-interactiveonly = False
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
94 > EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
95
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
96 $ rm -f $SYNC_FILE $DONE_FILE
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
97 $ sh -c "../send-signal.sh INT" &
49446
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
98 $ ../wait-signal.sh
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
99 shutting down cleanly
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
100 press ^C again to terminate immediately (dangerous)
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
101 end of unsafe operation
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
102 interrupted!
48255
8c34edb1ad10 backout: backed out changeset 6edc8800dbc3
Raphaël Gomès <rgomes@octobus.net>
parents: 48186
diff changeset
103 [255]