Handle CTRL+C in serve under Windows.
--- 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)