mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 16:31:02 +03:00
f5397047b4
Initially we use --daemon-pipefds to pass file descriptors for synchronization. Later, in order to support Windows, --daemon-pipefds is changed to accept a file path to unlink instead. The name is outdated since then. chg client is designed to use flock, which will be held before starting a server and until the client actually connects to the server it started. The unlink synchronization approach is not so helpful in this case. To address the issues, this patch renames pipefds to postexec and the following patch will allow the value of --daemon-postexec to be things like 'unlink:/path/to/file' or 'none'.
56 lines
1.7 KiB
Python
Executable File
56 lines
1.7 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
from __future__ import absolute_import
|
|
|
|
"""
|
|
Small and dumb HTTP server for use in tests.
|
|
"""
|
|
|
|
import optparse
|
|
import BaseHTTPServer
|
|
import signal
|
|
import SimpleHTTPServer
|
|
import sys
|
|
|
|
from mercurial import (
|
|
cmdutil,
|
|
)
|
|
|
|
OptionParser = optparse.OptionParser
|
|
|
|
class simplehttpservice(object):
|
|
def __init__(self, host, port):
|
|
self.address = (host, port)
|
|
def init(self):
|
|
self.httpd = BaseHTTPServer.HTTPServer(
|
|
self.address, SimpleHTTPServer.SimpleHTTPRequestHandler)
|
|
def run(self):
|
|
self.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')
|
|
parser.add_option('--daemon-postexec')
|
|
|
|
(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")
|
|
|
|
opts = {'pid_file': options.pid,
|
|
'daemon': not options.foreground,
|
|
'daemon_postexec': options.daemon_postexec}
|
|
service = simplehttpservice(options.host, options.port)
|
|
cmdutil.service(opts, initfn=service.init, runfn=service.run,
|
|
runargs=[sys.executable, __file__] + sys.argv[1:])
|