Rev 6181: Some win32 specific tweaks. in http://bazaar.launchpad.net/~jameinel/bzr/2.5-soft-hangup-795025
John Arbash Meinel
john at arbash-meinel.com
Fri Sep 23 11:43:59 UTC 2011
At http://bazaar.launchpad.net/~jameinel/bzr/2.5-soft-hangup-795025
------------------------------------------------------------
revno: 6181
revision-id: john at arbash-meinel.com-20110923114351-i4cn4z6x8y1228yr
parent: john at arbash-meinel.com-20110922151852-cm37vp10i2ggtddn
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: 2.5-soft-hangup-795025
timestamp: Fri 2011-09-23 13:43:51 +0200
message:
Some win32 specific tweaks.
Namely, don't use signal.signal(SIGHUP) when it isn't available.
Most of the tests run just fine on Windows, except the one test
that actually interacts with signal().
Test suite passes on Windows now.
-------------- next part --------------
=== modified file 'bzrlib/smart/signals.py'
--- a/bzrlib/smart/signals.py 2011-09-22 15:18:52 +0000
+++ b/bzrlib/smart/signals.py 2011-09-23 11:43:51 +0000
@@ -53,6 +53,10 @@
def install_sighup_handler():
"""Setup a handler for the SIGHUP signal."""
+ if getattr(signal, "SIGHUP", None) is None:
+ # If we can't install SIGHUP, there is no reason (yet) to do graceful
+ # shutdown.
+ return
old = signal.signal(signal.SIGHUP, _sighup_handler)
_setup_on_hangup_dict()
return old
=== modified file 'bzrlib/tests/test_smart_signals.py'
--- a/bzrlib/tests/test_smart_signals.py 2011-09-22 14:52:30 +0000
+++ b/bzrlib/tests/test_smart_signals.py 2011-09-23 11:43:51 +0000
@@ -15,12 +15,18 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+import sys
import signal
import weakref
from bzrlib import tests
from bzrlib.smart import signals
+# Windows doesn't define SIGHUP. And while we could just skip a lot of these
+# tests, we often don't actually care about interaction with 'signal', so we
+# can still run the tests for code coverage.
+SIGHUP = getattr(signal, 'SIGHUP', 1)
+
class TestSignalHandlers(tests.TestCase):
@@ -43,7 +49,7 @@
def call_me():
calls.append('called')
signals.register_on_hangup('myid', call_me)
- signals._sighup_handler(signal.SIGHUP, None)
+ signals._sighup_handler(SIGHUP, None)
self.assertEqual(['called'], calls)
signals.unregister_on_hangup('myid')
@@ -64,7 +70,7 @@
signals.register_on_hangup('myid', call_me)
signals.register_on_hangup('otherid', fail_me)
# _sighup_handler should call both, even though it got an exception
- signals._sighup_handler(signal.SIGHUP, None)
+ signals._sighup_handler(SIGHUP, None)
signals.unregister_on_hangup('myid')
signals.unregister_on_hangup('otherid')
log = self.get_log()
@@ -82,7 +88,7 @@
calls.append('called')
signals.register_on_hangup('myid', call_me_and_unregister)
signals.register_on_hangup('other', call_me)
- signals._sighup_handler(signal.SIGHUP, None)
+ signals._sighup_handler(SIGHUP, None)
def test_keyboard_interrupt_propagated(self):
# In case we get 'stuck' while running a hangup function, we should
@@ -91,7 +97,7 @@
raise KeyboardInterrupt()
signals.register_on_hangup('myid', call_me_and_raise)
self.assertRaises(KeyboardInterrupt,
- signals._sighup_handler, signal.SIGHUP, None)
+ signals._sighup_handler, SIGHUP, None)
signals.unregister_on_hangup('myid')
def test_weak_references(self):
@@ -108,7 +114,7 @@
signals.register_on_hangup('myid', call_me)
del call_me
# Non-CPython might want to do a gc.collect() here
- signals._sighup_handler(signal.SIGHUP, None)
+ signals._sighup_handler(SIGHUP, None)
self.assertEqual([], calls)
def test_not_installed(self):
@@ -119,17 +125,20 @@
def call_me():
calls.append('called')
signals.register_on_hangup('myid', calls)
- signals._sighup_handler(signal.SIGHUP, None)
+ signals._sighup_handler(SIGHUP, None)
signals.unregister_on_hangup('myid')
log = self.get_log()
self.assertEqual('', log)
def test_install_sighup_handler(self):
+ if getattr(signal, 'SIGHUP', None) is None:
+ raise tests.TestNotApplicable('No SIGHUP to handle on this'
+ ' platform (%s)' % (sys.platform,))
# install_sighup_handler should set up a signal handler for SIGHUP, as
# well as the signals._on_sighup dict.
# TODO: Windows testing
signals._on_sighup = None
orig = signals.install_sighup_handler()
- old = signal.signal(signal.SIGHUP, orig)
+ old = signal.signal(SIGHUP, orig)
self.assertIsNot(None, signals._on_sighup)
self.assertEqual(signals._sighup_handler, old)
More information about the bazaar-commits
mailing list