Mercurial > hg
view tests/dumbhttp.py @ 23053:5ba11ab48fcf stable
ui: separate option to show prompt echo, enabled only in tests (issue4417)
The problem in commandserver was addressed by 524b786bd54f, but it is tricky
to reuse ui.nontty option to disable echo back. Instead, this patch introduces
new option to enable echoing of prompt response.
Prompt echoing is changed to be off by default, which should avoid possible
breakage of output parsing in user scripts.
For now, this option is undocumented because it exists for internal use.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Tue, 21 Oct 2014 23:16:46 +0900 |
parents | 10116463b0b1 |
children | 6eab50a34fed |
line wrap: on
line source
#!/usr/bin/env python """ Small and dumb HTTP server for use in tests. """ from optparse import OptionParser import BaseHTTPServer, SimpleHTTPServer, os, signal, subprocess, sys def run(server_class=BaseHTTPServer.HTTPServer, handler_class=SimpleHTTPServer.SimpleHTTPRequestHandler, server_address=('localhost', 8000)): httpd = server_class(server_address, handler_class) httpd.serve_forever() if __name__ == '__main__': parser = OptionParser() parser.add_option('-p', '--port', dest='port', type='int', default=8000, help='TCP port to listen on', metavar='PORT') parser.add_option('-H', '--host', dest='host', default='localhost', help='hostname or IP to listen on', metavar='HOST') parser.add_option('--pid', dest='pid', help='file name where the PID of the server is stored') parser.add_option('-f', '--foreground', dest='foreground', action='store_true', help='do not start the HTTP server in the background') (options, args) = parser.parse_args() signal.signal(signal.SIGTERM, lambda x, y: sys.exit(0)) if options.foreground and options.pid: parser.error("options --pid and --foreground are mutually exclusive") if options.foreground: run(server_address=(options.host, options.port)) else: # This doesn't attempt to cleanly detach the process, as it's not # meant to be a long-lived, independent process. As a consequence, # it's still part of the same process group, and keeps any file # descriptors it might have inherited besided stdin/stdout/stderr. # Trying to do things cleanly is more complicated, requires # OS-dependent code, and is not worth the effort. proc = subprocess.Popen([sys.executable, __file__, '-f', '-H', options.host, '-p', str(options.port)], stdin=open(os.devnull, 'r'), stdout=open(os.devnull, 'w'), stderr=subprocess.STDOUT) if options.pid: fp = file(options.pid, 'wb') fp.write(str(proc.pid) + '\n') fp.close()