Handle CTRL+C in serve under Windows.
authorMarcos Chaves <marcos.nospam@gmail.com>
Thu, 21 Jun 2007 21:58:18 +0200
changeset 4672 272c0a09b203
parent 4659 7a7d4937272b
child 4673 d8442fc0da8d
Handle CTRL+C in serve under Windows.
mercurial/commands.py
mercurial/util.py
mercurial/util_win32.py
--- a/mercurial/commands.py	Thu Jun 21 09:25:49 2007 +0200
+++ b/mercurial/commands.py	Thu Jun 21 21:58:18 2007 +0200
@@ -2401,6 +2401,7 @@
 
     class service:
         def init(self):
+            util.set_signal_handler()
             try:
                 self.httpd = hgweb.server.create_server(parentui, repo)
             except socket.error, inst:
--- a/mercurial/util.py	Thu Jun 21 09:25:49 2007 +0200
+++ b/mercurial/util.py	Thu Jun 21 21:58:18 2007 +0200
@@ -1100,6 +1100,9 @@
                 return p_name
         return default
 
+    def set_signal_handler():
+        pass
+
 def find_exe(name, default=None):
     '''find path of an executable.
     if name contains a path component, return it as is.  otherwise,
--- a/mercurial/util_win32.py	Thu Jun 21 09:25:49 2007 +0200
+++ b/mercurial/util_win32.py	Thu Jun 21 21:58:18 2007 +0200
@@ -299,3 +299,12 @@
             raise WinIOError(err)
 
 getuser_fallback = win32api.GetUserName
+
+def set_signal_handler():
+    """Register a termination handler for console events including
+    CTRL+C. python signal handlers do not work well with socket
+    operations.
+    """
+    def handler(event):
+        win32process.ExitProcess(1)
+    win32api.SetConsoleCtrlHandler(handler)