##// END OF EJS Templates
revisions: allow "x123" to refer to nodeid prefix "123"...
revisions: allow "x123" to refer to nodeid prefix "123" When resolving "123" to a revision, we try to interpret it as revnum before we try to interpret it as a nodeid hex prefix. This can lead to the shortest valid prefix being longer than necessary. This patch lets us write such nodeids in a shorter form by prefixing them with "x" instead of adding more hex digits until they're longer than the longest decimal revnum. On my hg repo with almost 69k revisions, turning this feature on saves on average 0.4% on the average nodeid length. That clearly doesn't justify this patch. However, it becomes more usefule when combined with the earlier patches in this series that let you disambiguate nodeid prefixes within a configured revset. Note that we attempt to resolve symbols as nodeid prefixes after we've exhausted all other posibilities, so this is a backwards compatible change (only queries that would previously fail may now succeed). I've still hidden this feature behind an experiemntal config option so we can roll it back if needed. Differential Revision: https://phab.mercurial-scm.org/D4041

File last commit:

r38612:e46c3b6a default
r38891:7848f284 default
Show More
dumbhttp.py
77 lines | 2.6 KiB | text/x-python | PythonLexer
Mike Hommey
tests: pull common http server setup out of individual tests...
r22959 #!/usr/bin/env python
Gregory Szorc
tests/dumbhttp: use absolute_import
r27282 from __future__ import absolute_import
Mike Hommey
tests: pull common http server setup out of individual tests...
r22959 """
Small and dumb HTTP server for use in tests.
"""
Gregory Szorc
tests/dumbhttp: use absolute_import
r27282 import optparse
Jun Wu
dumbhttp: use IPv6 if HGIPV6 is set to 1...
r31004 import os
Gregory Szorc
tests/dumbhttp: use absolute_import
r27282 import signal
Jun Wu
dumbhttp: use IPv6 if HGIPV6 is set to 1...
r31004 import socket
Gregory Szorc
tests/dumbhttp: use absolute_import
r27282 import sys
Mike Hommey
tests: pull common http server setup out of individual tests...
r22959
Gregory Szorc
tests/dumbhttp: use absolute_import
r27282 from mercurial import (
Yuya Nishihara
py3: fix dumbhttp.py to convert --daemon-postexec arguments back to bytes
r38612 encoding,
Pulkit Goyal
py3: make values bytes before passing into server.runservice()...
r37690 pycompat,
Yuya Nishihara
server: move cmdutil.service() to new module (API)...
r30506 server,
Pulkit Goyal
py3: conditionalize BaseHTTPServer, SimpleHTTPServer and CGIHTTPServer import...
r29566 util,
Gregory Szorc
tests/dumbhttp: use absolute_import
r27282 )
Pulkit Goyal
py3: conditionalize BaseHTTPServer, SimpleHTTPServer and CGIHTTPServer import...
r29566 httpserver = util.httpserver
Gregory Szorc
tests/dumbhttp: use absolute_import
r27282 OptionParser = optparse.OptionParser
Mike Hommey
tests: pull common http server setup out of individual tests...
r22959
Jun Wu
dumbhttp: use IPv6 if HGIPV6 is set to 1...
r31004 if os.environ.get('HGIPV6', '0') == '1':
class simplehttpserver(httpserver.httpserver):
address_family = socket.AF_INET6
else:
simplehttpserver = httpserver.httpserver
Yuya Nishihara
test-static-http: flush access log per request...
r34945 class _httprequesthandler(httpserver.simplehttprequesthandler):
def log_message(self, format, *args):
httpserver.simplehttprequesthandler.log_message(self, format, *args)
sys.stderr.flush()
Yuya Nishihara
tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()...
r23136 class simplehttpservice(object):
def __init__(self, host, port):
self.address = (host, port)
def init(self):
Yuya Nishihara
test-static-http: flush access log per request...
r34945 self.httpd = simplehttpserver(self.address, _httprequesthandler)
Yuya Nishihara
tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()...
r23136 def run(self):
self.httpd.serve_forever()
Mike Hommey
tests: pull common http server setup out of individual tests...
r22959
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')
Yuya Nishihara
test-static-http: show all files accessed over HTTP...
r34926 parser.add_option('--logfile', help='file name of access/error log')
Mike Hommey
tests: pull common http server setup out of individual tests...
r22959 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')
Jun Wu
serve: accept multiple values for --daemon-postexec...
r28451 parser.add_option('--daemon-postexec', action='append')
Mike Hommey
tests: pull common http server setup out of individual tests...
r22959
(options, args) = parser.parse_args()
signal.signal(signal.SIGTERM, lambda x, y: sys.exit(0))
Yuya Nishihara
test-static-http: show all files accessed over HTTP...
r34926 if options.foreground and options.logfile:
parser.error("options --logfile and --foreground are mutually "
"exclusive")
Mike Hommey
tests: pull common http server setup out of individual tests...
r22959 if options.foreground and options.pid:
parser.error("options --pid and --foreground are mutually exclusive")
Pulkit Goyal
py3: make values bytes before passing into server.runservice()...
r37690 opts = {b'pid_file': options.pid,
b'daemon': not options.foreground,
Yuya Nishihara
py3: fix dumbhttp.py to convert --daemon-postexec arguments back to bytes
r38612 b'daemon_postexec': pycompat.rapply(encoding.strtolocal,
options.daemon_postexec)}
Yuya Nishihara
tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()...
r23136 service = simplehttpservice(options.host, options.port)
Pulkit Goyal
py3: make values bytes before passing into server.runservice()...
r37690 runargs = [sys.executable, __file__] + sys.argv[1:]
runargs = [pycompat.fsencode(a) for a in runargs]
Yuya Nishihara
server: move cmdutil.service() to new module (API)...
r30506 server.runservice(opts, initfn=service.init, runfn=service.run,
Yuya Nishihara
test-static-http: show all files accessed over HTTP...
r34926 logfile=options.logfile,
Pulkit Goyal
py3: make values bytes before passing into server.runservice()...
r37690 runargs=runargs)