test-nointerrupt.t
103 lines
| 2.4 KiB
| text/troff
|
Tads3Lexer
/ tests / test-nointerrupt.t
r48387 | #require no-windows no-rhg | |||
XXX-RHG this test hangs if `hg` is really `rhg`. This was hidden by the use of | ||||
`alias hg=rhg` by run-tests.py. With such alias removed, this test is revealed | ||||
buggy. This need to be resolved sooner than later. | ||||
Matt Harbison
|
r39515 | |||
Augie Fackler
|
r38545 | Dummy extension simulating unsafe long running command | ||
r48562 | $ SYNC_FILE="$TESTTMP/sync-file" | |||
$ export SYNC_FILE | ||||
$ DONE_FILE="$TESTTMP/done-file" | ||||
$ export DONE_FILE | ||||
$ | ||||
$ cat > wait_ext.py <<EOF | ||||
> import os | ||||
Augie Fackler
|
r38545 | > import time | ||
> | ||||
Augie Fackler
|
r38678 | > from mercurial.i18n import _ | ||
Augie Fackler
|
r38545 | > from mercurial import registrar | ||
r48562 | > from mercurial import testing | |||
Augie Fackler
|
r38545 | > | ||
> cmdtable = {} | ||||
> command = registrar.command(cmdtable) | ||||
> | ||||
r48562 | > @command(b'wait-signal', [], _(b'SYNC_FILE DONE_FILE'), norepo=True) | |||
> def sleep(ui, sync_file=b"$SYNC_FILE", done_file=b"$DONE_FILE", **opts): | ||||
> start = time.time() | ||||
Kyle Lippincott
|
r41106 | > with ui.uninterruptible(): | ||
r48562 | > testing.write_file(sync_file, b'%d' % os.getpid()) | |||
> testing.wait_file(done_file) | ||||
Augie Fackler
|
r38545 | > ui.warn(b"end of unsafe operation\n") | ||
r48562 | > ui.warn(b"%d second(s) passed\n" % int(time.time() - start)) | |||
Augie Fackler
|
r38545 | > EOF | ||
r48562 | $ cat > send-signal.sh << EOF | |||
> #!/bin/sh | ||||
> SIG=\$1 | ||||
> if [ -z "\$SIG" ]; then | ||||
> echo "send-signal.sh requires one argument" >&2 | ||||
> exit 1 | ||||
> fi | ||||
> "$RUNTESTDIR/testlib/wait-on-file" 10 "$SYNC_FILE" || exit 2 | ||||
> kill -s \$SIG \`cat "$SYNC_FILE"\` | ||||
> EOF | ||||
#if no-windows | ||||
$ chmod +x send-signal.sh | ||||
#endif | ||||
Arseniy Alekseyev
|
r50341 | $ cat > wait-signal.sh << 'EOF' | ||
> #!/bin/sh | ||||
> (hg wait-signal 2>&1; echo [$?]) | { | ||||
> read line | ||||
> touch "$DONE_FILE" | ||||
> echo "$line" | ||||
> cat | ||||
> } | ||||
> EOF | ||||
#if no-windows | ||||
$ chmod +x wait-signal.sh | ||||
#endif | ||||
Augie Fackler
|
r38545 | Kludge to emulate timeout(1) which is not generally available. | ||
Set up repository | ||||
$ hg init repo | ||||
$ cd repo | ||||
$ cat >> $HGRCPATH << EOF | ||||
> [extensions] | ||||
r48562 | > wait_ext = $TESTTMP/wait_ext.py | |||
Augie Fackler
|
r38545 | > EOF | ||
Test ctrl-c | ||||
r48562 | $ rm -f $SYNC_FILE $DONE_FILE | |||
$ sh -c "../send-signal.sh INT" & | ||||
Arseniy Alekseyev
|
r50341 | $ ../wait-signal.sh | ||
Augie Fackler
|
r38545 | interrupted! | ||
Raphaël Gomès
|
r49071 | [255] | ||
Augie Fackler
|
r38545 | |||
$ cat >> $HGRCPATH << EOF | ||||
> [experimental] | ||||
> nointerrupt = yes | ||||
> EOF | ||||
r48562 | $ rm -f $SYNC_FILE $DONE_FILE | |||
$ sh -c "../send-signal.sh INT" & | ||||
Arseniy Alekseyev
|
r50341 | $ ../wait-signal.sh | ||
Augie Fackler
|
r38545 | interrupted! | ||
Raphaël Gomès
|
r49071 | [255] | ||
Augie Fackler
|
r38545 | |||
$ cat >> $HGRCPATH << EOF | ||||
> [experimental] | ||||
> nointerrupt-interactiveonly = False | ||||
> EOF | ||||
r48562 | $ rm -f $SYNC_FILE $DONE_FILE | |||
$ sh -c "../send-signal.sh INT" & | ||||
Arseniy Alekseyev
|
r50341 | $ ../wait-signal.sh | ||
Augie Fackler
|
r38545 | shutting down cleanly | ||
press ^C again to terminate immediately (dangerous) | ||||
end of unsafe operation | ||||
interrupted! | ||||
Raphaël Gomès
|
r49071 | [255] | ||