Mercurial > hg
view tests/test-ctxmanager.py @ 31769:594dd384803c
test-serve: make the 'listening at *' lines optional
The daemonized serve process doesn't print these lines out (see 448d0c452140).
I was able to get it to with the following hack:
diff --git a/mercurial/win32.py b/mercurial/win32.py
--- a/mercurial/win32.py
+++ b/mercurial/win32.py
@@ -418,6 +418,11 @@
return str(ppid)
def spawndetached(args):
+
+ import subprocess
+ return subprocess.Popen(args, cwd=pycompat.getcwd(), env=encoding.environ,
+ creationflags=subprocess.CREATE_NEW_PROCESS_GROUP).pid
+
# No standard library function really spawns a fully detached
# process under win32 because they allocate pipes or other objects
# to handle standard streams communications. Passing these objects
However, MSYS translates --prefixes starting with '/' to 'C:/MinGW/msys/1.0',
which changes the output. The output isn't so important that I want to spend a
bunch of time on this, and risk breaking some subtle behavior of `hg serve -d`
with the more complicated code.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sun, 02 Apr 2017 00:56:52 -0400 |
parents | 441491aba8c3 |
children | 68c43a416585 |
line wrap: on
line source
from __future__ import absolute_import import silenttestrunner import unittest from mercurial import util class contextmanager(object): def __init__(self, name, trace): self.name = name self.entered = False self.exited = False self.trace = trace def __enter__(self): self.entered = True self.trace(('enter', self.name)) return self def __exit__(self, exc_type, exc_val, exc_tb): self.exited = exc_type, exc_val, exc_tb self.trace(('exit', self.name)) def __repr__(self): return '<ctx %r>' % self.name class ctxerror(Exception): pass class raise_on_enter(contextmanager): def __enter__(self): self.trace(('raise', self.name)) raise ctxerror(self.name) class raise_on_exit(contextmanager): def __exit__(self, exc_type, exc_val, exc_tb): self.trace(('raise', self.name)) raise ctxerror(self.name) def ctxmgr(name, trace): return lambda: contextmanager(name, trace) class test_ctxmanager(unittest.TestCase): def test_basics(self): trace = [] addtrace = trace.append with util.ctxmanager(ctxmgr('a', addtrace), ctxmgr('b', addtrace)) as c: a, b = c.enter() c.atexit(addtrace, ('atexit', 'x')) c.atexit(addtrace, ('atexit', 'y')) self.assertEqual(trace, [('enter', 'a'), ('enter', 'b'), ('atexit', 'y'), ('atexit', 'x'), ('exit', 'b'), ('exit', 'a')]) def test_raise_on_enter(self): trace = [] addtrace = trace.append def go(): with util.ctxmanager(ctxmgr('a', addtrace), lambda: raise_on_enter('b', addtrace)) as c: c.enter() addtrace('unreachable') self.assertRaises(ctxerror, go) self.assertEqual(trace, [('enter', 'a'), ('raise', 'b'), ('exit', 'a')]) def test_raise_on_exit(self): trace = [] addtrace = trace.append def go(): with util.ctxmanager(ctxmgr('a', addtrace), lambda: raise_on_exit('b', addtrace)) as c: c.enter() addtrace('running') self.assertRaises(ctxerror, go) self.assertEqual(trace, [('enter', 'a'), ('enter', 'b'), 'running', ('raise', 'b'), ('exit', 'a')]) if __name__ == '__main__': silenttestrunner.main(__name__)