Mercurial > hg-stable
view 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 |
line wrap: on
line source
#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. Dummy extension simulating unsafe long running command $ SYNC_FILE="$TESTTMP/sync-file" $ export SYNC_FILE $ DONE_FILE="$TESTTMP/done-file" $ export DONE_FILE $ $ cat > wait_ext.py <<EOF > import os > import time > > from mercurial.i18n import _ > from mercurial import registrar > from mercurial import testing > > cmdtable = {} > command = registrar.command(cmdtable) > > @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() > with ui.uninterruptible(): > testing.write_file(sync_file, b'%d' % os.getpid()) > testing.wait_file(done_file) > ui.warn(b"end of unsafe operation\n") > ui.warn(b"%d second(s) passed\n" % int(time.time() - start)) > EOF $ 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 $ 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 Kludge to emulate timeout(1) which is not generally available. Set up repository $ hg init repo $ cd repo $ cat >> $HGRCPATH << EOF > [extensions] > wait_ext = $TESTTMP/wait_ext.py > EOF Test ctrl-c $ rm -f $SYNC_FILE $DONE_FILE $ sh -c "../send-signal.sh INT" & $ ../wait-signal.sh interrupted! [255] $ cat >> $HGRCPATH << EOF > [experimental] > nointerrupt = yes > EOF $ rm -f $SYNC_FILE $DONE_FILE $ sh -c "../send-signal.sh INT" & $ ../wait-signal.sh interrupted! [255] $ cat >> $HGRCPATH << EOF > [experimental] > nointerrupt-interactiveonly = False > EOF $ rm -f $SYNC_FILE $DONE_FILE $ sh -c "../send-signal.sh INT" & $ ../wait-signal.sh shutting down cleanly press ^C again to terminate immediately (dangerous) end of unsafe operation interrupted! [255]