crecord: avoid setting non-existing SIGTSTP signal on windows (issue5512)
authorPierre-Yves David <pierre-yves.david@ens-lyon.org>
Thu, 06 Apr 2017 11:28:25 +0200
changeset 31933 b2478a996a82
parent 31932 20a68f714f9b
child 31934 12aca6770046
crecord: avoid setting non-existing SIGTSTP signal on windows (issue5512) Windows do not have a SIGTSTP so we avoid setting the handler if the signal is unknown.
mercurial/crecord.py
--- a/mercurial/crecord.py	Thu Apr 06 11:25:13 2017 +0200
+++ b/mercurial/crecord.py	Thu Apr 06 11:28:25 2017 +0200
@@ -473,14 +473,17 @@
     """
     ui.write(_('starting interactive selection\n'))
     chunkselector = curseschunkselector(headerlist, ui, operation)
-    f = signal.getsignal(signal.SIGTSTP)
+    origsigtstp = sentinel = object()
+    if util.safehasattr(signal, 'SIGTSTP'):
+        origsigtstp = signal.getsignal(signal.SIGTSTP)
     try:
         curses.wrapper(chunkselector.main)
         if chunkselector.initerr is not None:
             raise error.Abort(chunkselector.initerr)
         # ncurses does not restore signal handler for SIGTSTP
     finally:
-        signal.signal(signal.SIGTSTP, f)
+        if origsigtstp is not sentinel:
+            signal.signal(signal.SIGTSTP, origsigtstp)
     return chunkselector.opts
 
 def testdecorator(testfn, f):