Mercurial > hg
annotate tests/test-nointerrupt.t @ 48206:c7690fabce5f
chistedit: move patchcontents() onto state class
Differential Revision: https://phab.mercurial-scm.org/D11642
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Tue, 12 Oct 2021 08:56:56 -0700 |
parents | 6edc8800dbc3 |
children | 8c34edb1ad10 |
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) |
47805
8892f604e242
test-nointerrupt: make "sure" the handler "might" trigger (issue6558)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47762
diff
changeset
|
30 > # make sure we get rescheduled and the signal get a chance to be handled |
8892f604e242
test-nointerrupt: make "sure" the handler "might" trigger (issue6558)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47762
diff
changeset
|
31 > time.sleep(0.1) |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
32 > 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
|
33 > 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
|
34 > EOF |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
35 |
47762
f48a688a7044
test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47587
diff
changeset
|
36 $ 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
|
37 > #!/bin/sh |
f48a688a7044
test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47587
diff
changeset
|
38 > SIG=\$1 |
f48a688a7044
test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47587
diff
changeset
|
39 > 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
|
40 > 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
|
41 > exit 1 |
f48a688a7044
test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47587
diff
changeset
|
42 > fi |
f48a688a7044
test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47587
diff
changeset
|
43 > "$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
|
44 > kill -s \$SIG \`cat "$SYNC_FILE"\` |
47805
8892f604e242
test-nointerrupt: make "sure" the handler "might" trigger (issue6558)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47762
diff
changeset
|
45 > sleep 1 |
47762
f48a688a7044
test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47587
diff
changeset
|
46 > touch "$DONE_FILE" |
f48a688a7044
test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47587
diff
changeset
|
47 > EOF |
f48a688a7044
test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47587
diff
changeset
|
48 |
f48a688a7044
test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47587
diff
changeset
|
49 #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
|
50 $ 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
|
51 #endif |
f48a688a7044
test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47587
diff
changeset
|
52 |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
53 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
|
54 |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
55 Set up repository |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
56 $ hg init repo |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
57 $ cd repo |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
58 $ cat >> $HGRCPATH << EOF |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
59 > [extensions] |
47762
f48a688a7044
test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47587
diff
changeset
|
60 > 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
|
61 > EOF |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
62 |
47762
f48a688a7044
test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47587
diff
changeset
|
63 |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
64 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
|
65 $ 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
|
66 $ sh -c "../send-signal.sh INT" & |
f48a688a7044
test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47587
diff
changeset
|
67 $ hg wait-signal |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
68 interrupted! |
48186
6edc8800dbc3
dispatch: use detailed exit code 250 for keyboard interrupt
Martin von Zweigbergk <martinvonz@google.com>
parents:
47805
diff
changeset
|
69 [250] |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
70 |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
71 $ cat >> $HGRCPATH << EOF |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
72 > [experimental] |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
73 > nointerrupt = yes |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
74 > EOF |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
75 |
47762
f48a688a7044
test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47587
diff
changeset
|
76 $ 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
|
77 $ sh -c "../send-signal.sh INT" & |
f48a688a7044
test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47587
diff
changeset
|
78 $ hg wait-signal |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
79 interrupted! |
48186
6edc8800dbc3
dispatch: use detailed exit code 250 for keyboard interrupt
Martin von Zweigbergk <martinvonz@google.com>
parents:
47805
diff
changeset
|
80 [250] |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
81 |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
82 $ cat >> $HGRCPATH << EOF |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
83 > [experimental] |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
84 > nointerrupt-interactiveonly = False |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
85 > EOF |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
86 |
47762
f48a688a7044
test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47587
diff
changeset
|
87 $ 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
|
88 $ sh -c "../send-signal.sh INT" & |
f48a688a7044
test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47587
diff
changeset
|
89 $ hg wait-signal |
38526
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
90 shutting down cleanly |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
91 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
|
92 end of unsafe operation |
313a940d49a3
ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
93 interrupted! |
48186
6edc8800dbc3
dispatch: use detailed exit code 250 for keyboard interrupt
Martin von Zweigbergk <martinvonz@google.com>
parents:
47805
diff
changeset
|
94 [250] |