Mercurial > hg
view tests/dumbhttp.py @ 23416:53a65929ef1f stable
pushkey: gracefully handle prepushkey hook failure (issue4455)
This allow to gracefully report the failure of the bookmark push and carry on.
Before this change set. Local push would plain quit and wireprotocol would
failed in various ungraceful way.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Sat, 29 Nov 2014 19:17:47 -0800 |
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()