##// END OF EJS Templates
debugobsolete: also issue the "new obsmarkers" messsage...
debugobsolete: also issue the "new obsmarkers" messsage We are going to improve the way this message is issued in the core codebase. This will make it appears for `hg debugobsolete` too. Since this seems like a good idea, we make the output change in a previous changesets to clarify the next changeset.

File last commit:

r41106:8ecb17b7 default
r43163:34a46d48 default
Show More
test-nointerrupt.t
85 lines | 2.0 KiB | text/troff | Tads3Lexer
/ tests / test-nointerrupt.t
Matt Harbison
tests: disable test-nointerrupt on Windows...
r39515 #require no-windows
Augie Fackler
ui: add an uninterruptable context manager that can block SIGINT...
r38545 Dummy extension simulating unsafe long running command
$ cat > sleepext.py <<EOF
Augie Fackler
tests: properly sort imports in test-nointerrupt.t...
r38678 > import itertools
Augie Fackler
ui: add an uninterruptable context manager that can block SIGINT...
r38545 > import time
>
Augie Fackler
tests: properly sort imports in test-nointerrupt.t...
r38678 > from mercurial.i18n import _
Augie Fackler
ui: add an uninterruptable context manager that can block SIGINT...
r38545 > from mercurial import registrar
>
> cmdtable = {}
> command = registrar.command(cmdtable)
>
> @command(b'sleep', [], _(b'TIME'), norepo=True)
> def sleep(ui, sleeptime=b"1", **opts):
Kyle Lippincott
procutil: correct spelling of uninterruptable -> uninterruptible...
r41106 > with ui.uninterruptible():
Augie Fackler
ui: add an uninterruptable context manager that can block SIGINT...
r38545 > for _i in itertools.repeat(None, int(sleeptime)):
> time.sleep(1)
> ui.warn(b"end of unsafe operation\n")
> ui.warn(b"%s second(s) passed\n" % sleeptime)
> EOF
Kludge to emulate timeout(1) which is not generally available.
$ cat > timeout.py <<EOF
> from __future__ import print_function
> import argparse
> import signal
> import subprocess
> import sys
> import time
>
> ap = argparse.ArgumentParser()
> ap.add_argument('-s', nargs=1, default='SIGTERM')
> ap.add_argument('duration', nargs=1, type=int)
> ap.add_argument('argv', nargs='*')
> opts = ap.parse_args()
> try:
> sig = int(opts.s[0])
> except ValueError:
> sname = opts.s[0]
> if not sname.startswith('SIG'):
> sname = 'SIG' + sname
> sig = getattr(signal, sname)
> proc = subprocess.Popen(opts.argv)
> time.sleep(opts.duration[0])
> proc.poll()
> if proc.returncode is None:
> proc.send_signal(sig)
> proc.wait()
> sys.exit(124)
> EOF
Set up repository
$ hg init repo
$ cd repo
$ cat >> $HGRCPATH << EOF
> [extensions]
> sleepext = ../sleepext.py
> EOF
Test ctrl-c
$ python $TESTTMP/timeout.py -s INT 1 hg sleep 2
interrupted!
[124]
$ cat >> $HGRCPATH << EOF
> [experimental]
> nointerrupt = yes
> EOF
$ python $TESTTMP/timeout.py -s INT 1 hg sleep 2
interrupted!
[124]
$ cat >> $HGRCPATH << EOF
> [experimental]
> nointerrupt-interactiveonly = False
> EOF
$ python $TESTTMP/timeout.py -s INT 1 hg sleep 2
shutting down cleanly
press ^C again to terminate immediately (dangerous)
end of unsafe operation
interrupted!
[124]