# HG changeset patch # User Christian Ebert # Date 1347471883 -3600 # Node ID 193e68a0c8d267cdea2241232582253a83d826b4 # Parent feb663195388a4e918f5073d4159705ea599e8f7# Parent b90bb2b0826a3de8c1091da9d353648a79f1570b Merge with stable diff -r feb663195388 -r 193e68a0c8d2 tests/killdaemons.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/killdaemons.py Wed Sep 12 18:44:43 2012 +0100 @@ -0,0 +1,54 @@ +#!/usr/bin/env python + +import os, sys, time, errno, signal + +if os.name =='nt': + import ctypes + def kill(pid, logfn, tryhard=True): + logfn('# Killing daemon process %d' % pid) + PROCESS_TERMINATE = 1 + handle = ctypes.windll.kernel32.OpenProcess( + PROCESS_TERMINATE, False, pid) + ctypes.windll.kernel32.TerminateProcess(handle, -1) + ctypes.windll.kernel32.CloseHandle(handle) +else: + def kill(pid, logfn, tryhard=True): + try: + os.kill(pid, 0) + logfn('# Killing daemon process %d' % pid) + os.kill(pid, signal.SIGTERM) + if tryhard: + for i in range(10): + time.sleep(0.05) + os.kill(pid, 0) + else: + time.sleep(0.1) + os.kill(pid, 0) + logfn('# Daemon process %d is stuck - really killing it' % pid) + os.kill(pid, signal.SIGKILL) + except OSError, err: + if err.errno != errno.ESRCH: + raise + +def killdaemons(pidfile, tryhard=True, remove=False, logfn=None): + if not logfn: + logfn = lambda s: s + # Kill off any leftover daemon processes + try: + fp = open(pidfile) + for line in fp: + try: + pid = int(line) + except ValueError: + continue + kill(pid, logfn, tryhard) + fp.close() + if remove: + os.unlink(pidfile) + except IOError: + pass + +if __name__ == '__main__': + path, = sys.argv[1:] + killdaemons(path) + diff -r feb663195388 -r 193e68a0c8d2 tests/run-tests.py --- a/tests/run-tests.py Thu Aug 30 16:18:03 2012 +0100 +++ b/tests/run-tests.py Wed Sep 12 18:44:43 2012 +0100 @@ -54,6 +54,7 @@ import time import re import threading +import killdaemons as killmod processlock = threading.Lock() @@ -348,29 +349,8 @@ pass def killdaemons(): - # Kill off any leftover daemon processes - try: - fp = open(DAEMON_PIDS) - for line in fp: - try: - pid = int(line) - except ValueError: - continue - try: - os.kill(pid, 0) - vlog('# Killing daemon process %d' % pid) - os.kill(pid, signal.SIGTERM) - time.sleep(0.1) - os.kill(pid, 0) - vlog('# Daemon process %d is stuck - really killing it' % pid) - os.kill(pid, signal.SIGKILL) - except OSError, err: - if err.errno != errno.ESRCH: - raise - fp.close() - os.unlink(DAEMON_PIDS) - except IOError: - pass + return killmod.killdaemons(DAEMON_PIDS, tryhard=False, remove=True, + logfn=vlog) def cleanup(options): if not options.keep_tmpdir: diff -r feb663195388 -r 193e68a0c8d2 tests/test-keyword.t --- a/tests/test-keyword.t Thu Aug 30 16:18:03 2012 +0100 +++ b/tests/test-keyword.t Wed Sep 12 18:44:43 2012 +0100 @@ -814,7 +814,7 @@ $ cd .. -Expansion in destinaton with global configuration +Expansion in destination with global configuration $ hg --quiet clone Test globalconf $ cat globalconf/a