tests/killdaemons.py
author Matt Harbison <matt_harbison@yahoo.com>
Fri, 15 Apr 2022 11:32:27 -0400
changeset 49082 dd381b973efc
parent 48875 6000f5b25c9b
child 49309 d54b213c4380
permissions -rwxr-xr-x
contrib: add a hint if the Windows dependency MSI is already installed In the past, I've gotten confused when the script failed on seemingly random python installs (and thus the py3.8 install was commented out from the last time this happened to me, which has been reverted here). This particular error code means the package was already installed. For python, it means the major and minor version are the same, but the micro version may differ. In practice, ignoring the python installation failure will cause the pip installation that happens next to fail, because python.exe for that version is somewhere else on the system. This could probably be fixed by running py.exe with the major and minor version, but that is skipped during the install for some reason. I didn't feel like over complicating this though, and at least there's a better hint when the problem occurs. Differential Revision: https://phab.mercurial-scm.org/D12560
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45830
c102b704edb5 global: use python3 in shebangs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43076
diff changeset
     1
#!/usr/bin/env python3
7344
58fd3c718ca4 tests: add killdaemons helper script
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     2
28942
05cb9c6f310e py3: use absolute_import in killdaemons.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 25473
diff changeset
     3
import errno
05cb9c6f310e py3: use absolute_import in killdaemons.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 25473
diff changeset
     4
import os
05cb9c6f310e py3: use absolute_import in killdaemons.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 25473
diff changeset
     5
import signal
05cb9c6f310e py3: use absolute_import in killdaemons.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 25473
diff changeset
     6
import sys
05cb9c6f310e py3: use absolute_import in killdaemons.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 25473
diff changeset
     7
import time
7344
58fd3c718ca4 tests: add killdaemons helper script
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     8
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
     9
if os.name == 'nt':
17465
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    10
    import ctypes
20493
b5f43dbf64ca tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents: 17466
diff changeset
    11
32857
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    12
    _BOOL = ctypes.c_long
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    13
    _DWORD = ctypes.c_ulong
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    14
    _UINT = ctypes.c_uint
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    15
    _HANDLE = ctypes.c_void_p
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    16
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    17
    ctypes.windll.kernel32.CloseHandle.argtypes = [_HANDLE]
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    18
    ctypes.windll.kernel32.CloseHandle.restype = _BOOL
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    19
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    20
    ctypes.windll.kernel32.GetLastError.argtypes = []
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    21
    ctypes.windll.kernel32.GetLastError.restype = _DWORD
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    22
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    23
    ctypes.windll.kernel32.OpenProcess.argtypes = [_DWORD, _BOOL, _DWORD]
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    24
    ctypes.windll.kernel32.OpenProcess.restype = _HANDLE
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    25
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    26
    ctypes.windll.kernel32.TerminateProcess.argtypes = [_HANDLE, _UINT]
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    27
    ctypes.windll.kernel32.TerminateProcess.restype = _BOOL
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    28
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    29
    ctypes.windll.kernel32.WaitForSingleObject.argtypes = [_HANDLE, _DWORD]
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    30
    ctypes.windll.kernel32.WaitForSingleObject.restype = _DWORD
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    31
20493
b5f43dbf64ca tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents: 17466
diff changeset
    32
    def _check(ret, expectederr=None):
b5f43dbf64ca tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents: 17466
diff changeset
    33
        if ret == 0:
b5f43dbf64ca tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents: 17466
diff changeset
    34
            winerrno = ctypes.GetLastError()
b5f43dbf64ca tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents: 17466
diff changeset
    35
            if winerrno == expectederr:
b5f43dbf64ca tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents: 17466
diff changeset
    36
                return True
b5f43dbf64ca tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents: 17466
diff changeset
    37
            raise ctypes.WinError(winerrno)
b5f43dbf64ca tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents: 17466
diff changeset
    38
17465
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    39
    def kill(pid, logfn, tryhard=True):
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    40
        logfn('# Killing daemon process %d' % pid)
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    41
        PROCESS_TERMINATE = 1
20496
acbd19b9fbe1 tests: killdaemons.py for windows distinguishes access violation and terminated
Simon Heimberg <simohe@besonet.ch>
parents: 20495
diff changeset
    42
        PROCESS_QUERY_INFORMATION = 0x400
20698
1147563faf62 killdaemons: drop superfluous L suffix from constant
Augie Fackler <raf@durin42.com>
parents: 20496
diff changeset
    43
        SYNCHRONIZE = 0x00100000
20494
ea3adeac5248 tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents: 20493
diff changeset
    44
        WAIT_OBJECT_0 = 0
ea3adeac5248 tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents: 20493
diff changeset
    45
        WAIT_TIMEOUT = 258
32858
ed1f376090cd killdaemons: fix WaitForSingleObject() error handling logic on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 32857
diff changeset
    46
        WAIT_FAILED = _DWORD(0xFFFFFFFF).value
17465
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    47
        handle = ctypes.windll.kernel32.OpenProcess(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    48
            PROCESS_TERMINATE | SYNCHRONIZE | PROCESS_QUERY_INFORMATION,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    49
            False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    50
            pid,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    51
        )
32857
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    52
        if handle is None:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    53
            _check(0, 87)  # err 87 when process not found
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    54
            return  # process not found, already finished
20493
b5f43dbf64ca tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents: 17466
diff changeset
    55
        try:
20496
acbd19b9fbe1 tests: killdaemons.py for windows distinguishes access violation and terminated
Simon Heimberg <simohe@besonet.ch>
parents: 20495
diff changeset
    56
            r = ctypes.windll.kernel32.WaitForSingleObject(handle, 100)
acbd19b9fbe1 tests: killdaemons.py for windows distinguishes access violation and terminated
Simon Heimberg <simohe@besonet.ch>
parents: 20495
diff changeset
    57
            if r == WAIT_OBJECT_0:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    58
                pass  # terminated, but process handle still available
20496
acbd19b9fbe1 tests: killdaemons.py for windows distinguishes access violation and terminated
Simon Heimberg <simohe@besonet.ch>
parents: 20495
diff changeset
    59
            elif r == WAIT_TIMEOUT:
acbd19b9fbe1 tests: killdaemons.py for windows distinguishes access violation and terminated
Simon Heimberg <simohe@besonet.ch>
parents: 20495
diff changeset
    60
                _check(ctypes.windll.kernel32.TerminateProcess(handle, -1))
32858
ed1f376090cd killdaemons: fix WaitForSingleObject() error handling logic on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 32857
diff changeset
    61
            elif r == WAIT_FAILED:
ed1f376090cd killdaemons: fix WaitForSingleObject() error handling logic on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 32857
diff changeset
    62
                _check(0)  # err stored in GetLastError()
20494
ea3adeac5248 tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents: 20493
diff changeset
    63
ea3adeac5248 tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents: 20493
diff changeset
    64
            # TODO?: forcefully kill when timeout
ea3adeac5248 tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents: 20493
diff changeset
    65
            #        and ?shorter waiting time? when tryhard==True
ea3adeac5248 tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents: 20493
diff changeset
    66
            r = ctypes.windll.kernel32.WaitForSingleObject(handle, 100)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    67
            # timeout = 100 ms
20494
ea3adeac5248 tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents: 20493
diff changeset
    68
            if r == WAIT_OBJECT_0:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    69
                pass  # process is terminated
20494
ea3adeac5248 tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents: 20493
diff changeset
    70
            elif r == WAIT_TIMEOUT:
ea3adeac5248 tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents: 20493
diff changeset
    71
                logfn('# Daemon process %d is stuck')
32858
ed1f376090cd killdaemons: fix WaitForSingleObject() error handling logic on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 32857
diff changeset
    72
            elif r == WAIT_FAILED:
ed1f376090cd killdaemons: fix WaitForSingleObject() error handling logic on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 32857
diff changeset
    73
                _check(0)  # err stored in GetLastError()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    74
        except:  # re-raises
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    75
            ctypes.windll.kernel32.CloseHandle(handle)  # no _check, keep error
20493
b5f43dbf64ca tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents: 17466
diff changeset
    76
            raise
b5f43dbf64ca tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents: 17466
diff changeset
    77
        _check(ctypes.windll.kernel32.CloseHandle(handle))
b5f43dbf64ca tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents: 17466
diff changeset
    78
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    79
17465
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    80
else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    81
17465
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    82
    def kill(pid, logfn, tryhard=True):
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    83
        try:
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    84
            os.kill(pid, 0)
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    85
            logfn('# Killing daemon process %d' % pid)
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    86
            os.kill(pid, signal.SIGTERM)
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    87
            if tryhard:
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    88
                for i in range(10):
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    89
                    time.sleep(0.05)
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    90
                    os.kill(pid, 0)
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    91
            else:
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    92
                time.sleep(0.1)
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    93
                os.kill(pid, 0)
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    94
            logfn('# Daemon process %d is stuck - really killing it' % pid)
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    95
            os.kill(pid, signal.SIGKILL)
25031
0adc22a0b6b3 python3: update killdaemons and run-tests print and exception syntax
Augie Fackler <augie@google.com>
parents: 21194
diff changeset
    96
        except OSError as err:
17465
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    97
            if err.errno != errno.ESRCH:
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    98
                raise
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    99
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
   100
17464
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   101
def killdaemons(pidfile, tryhard=True, remove=False, logfn=None):
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   102
    if not logfn:
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   103
        logfn = lambda s: s
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   104
    # Kill off any leftover daemon processes
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   105
    try:
32677
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   106
        pids = []
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   107
        with open(pidfile) as fp:
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   108
            for line in fp:
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   109
                try:
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   110
                    pid = int(line)
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   111
                    if pid <= 0:
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   112
                        raise ValueError
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   113
                except ValueError:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
   114
                    logfn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
   115
                        '# Not killing daemon process %s - invalid pid'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
   116
                        % line.rstrip()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
   117
                    )
32677
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   118
                    continue
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   119
                pids.append(pid)
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   120
        for pid in pids:
17465
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
   121
            kill(pid, logfn, tryhard)
17464
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   122
        if remove:
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   123
            os.unlink(pidfile)
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   124
    except IOError:
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   125
        pass
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   126
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
   127
17464
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   128
if __name__ == '__main__':
25473
123c99034cb6 tests: make killdaemons.py use DAEMON_PIDS by default
Matt Mackall <mpm@selenic.com>
parents: 25031
diff changeset
   129
    if len(sys.argv) > 1:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
   130
        (path,) = sys.argv[1:]
25473
123c99034cb6 tests: make killdaemons.py use DAEMON_PIDS by default
Matt Mackall <mpm@selenic.com>
parents: 25031
diff changeset
   131
    else:
123c99034cb6 tests: make killdaemons.py use DAEMON_PIDS by default
Matt Mackall <mpm@selenic.com>
parents: 25031
diff changeset
   132
        path = os.environ["DAEMON_PIDS"]
123c99034cb6 tests: make killdaemons.py use DAEMON_PIDS by default
Matt Mackall <mpm@selenic.com>
parents: 25031
diff changeset
   133
37846
89793289c891 tests: remove pid file by default
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32858
diff changeset
   134
    killdaemons(path, remove=True)