annotate tests/test-nointerrupt.t @ 51555:15e680a44502

unbundle: move most of the logic on cmdutil to help debug::unbundle reuse This make sure `hg debug::unbundle` focus on the core logic.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 27 Mar 2024 17:46:23 +0000
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]