##// END OF EJS Templates
dispatch: don't show list of commands on bogus command...
dispatch: don't show list of commands on bogus command If a command is ambiguous, you get this: $ hg ve hg: command 've' is ambiguous: verify version [255] If you typo a command, you get this: $ hg comit hg: unknown command 'comit' (did you mean one of commit, incoming, mycommit?) [255] But if you completely mistype a command so it no longer looks like any existing commands, you get a full list of commands. That might be useful the first time you use Mercurial, but after that it's probably more annoying than help, especially if you have the pager enabled and have a short terminal. Let's instead give a short hint telling the user to run `hg help` for more help. Differential Revision: https://phab.mercurial-scm.org/D4024

File last commit:

r36594:cfd0c1df default
r38810:81fb4421 default
Show More
get-with-headers.py
112 lines | 3.2 KiB | text/x-python | PythonLexer
/ tests / get-with-headers.py
Eric Hopper
Add a test for getting raw files via the web UI.
r2532 #!/usr/bin/env python
Martin Geisler
tests: fix doc string in get-with-headers.py
r8447 """This does HTTP GET requests given a host:port and path and returns
Eric Hopper
Add a test for getting raw files via the web UI.
r2532 a subset of the headers plus the body of the result."""
Yuya Nishihara
get-with-headers: use bytes stdout thoroughly...
r36594 from __future__ import absolute_import
Gregory Szorc
tests: use absolute_import in /get-with-headers.py...
r27296
Gregory Szorc
tests: use argparse in get-with-headers.py...
r35798 import argparse
Gregory Szorc
tests: use absolute_import in /get-with-headers.py...
r27296 import json
import os
import sys
Patrick Mezard
get-with-headers: fix stream modes under Windows
r7054
Pulkit Goyal
py3: conditionalize httplib import...
r29455 from mercurial import (
util,
)
httplib = util.httplib
Patrick Mezard
get-with-headers: fix stream modes under Windows
r7054 try:
Gregory Szorc
tests: use absolute_import in /get-with-headers.py...
r27296 import msvcrt
Patrick Mezard
get-with-headers: fix stream modes under Windows
r7054 msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY)
except ImportError:
pass
Yuya Nishihara
get-with-headers: use bytes stdout thoroughly...
r36594 stdout = getattr(sys.stdout, 'buffer', sys.stdout)
Gregory Szorc
tests: use argparse in get-with-headers.py...
r35798 parser = argparse.ArgumentParser()
parser.add_argument('--twice', action='store_true')
parser.add_argument('--headeronly', action='store_true')
parser.add_argument('--json', action='store_true')
parser.add_argument('--hgproto')
Gregory Szorc
tests: teach get-with-headers.py some new tricks...
r35799 parser.add_argument('--requestheader', nargs='*', default=[],
help='Send an additional HTTP request header. Argument '
'value is <header>=<value>')
parser.add_argument('--bodyfile',
help='Write HTTP response body to a file')
Gregory Szorc
tests: use argparse in get-with-headers.py...
r35798 parser.add_argument('host')
parser.add_argument('path')
parser.add_argument('show', nargs='*')
Dirkjan Ochtman
tests: extend get-with-headers to support cache testing
r12182
Gregory Szorc
tests: use argparse in get-with-headers.py...
r35798 args = parser.parse_args()
twice = args.twice
headeronly = args.headeronly
formatjson = args.json
hgproto = args.hgproto
Gregory Szorc
tests: teach get-with-headers.py some new tricks...
r35799 requestheaders = args.requestheader
Gregory Szorc
protocol: send application/mercurial-0.2 responses to capable clients...
r30764
Dirkjan Ochtman
tests: extend get-with-headers to support cache testing
r12182 tag = None
def request(host, path, show):
Mads Kiilerich
tests: prepare get-with-headers.py for MSYS...
r17017 assert not path.startswith('/'), path
Dirkjan Ochtman
tests: extend get-with-headers to support cache testing
r12182 global tag
headers = {}
if tag:
headers['If-None-Match'] = tag
Gregory Szorc
protocol: send application/mercurial-0.2 responses to capable clients...
r30764 if hgproto:
headers['X-HgProto-1'] = hgproto
Bryan O'Sullivan
hgweb: return meaningful HTTP status codes instead of nonsense
r5561
Gregory Szorc
tests: teach get-with-headers.py some new tricks...
r35799 for header in requestheaders:
key, value = header.split('=', 1)
headers[key] = value
Dirkjan Ochtman
tests: extend get-with-headers to support cache testing
r12182 conn = httplib.HTTPConnection(host)
Mads Kiilerich
tests: prepare get-with-headers.py for MSYS...
r17017 conn.request("GET", '/' + path, None, headers)
Dirkjan Ochtman
tests: extend get-with-headers to support cache testing
r12182 response = conn.getresponse()
Yuya Nishihara
get-with-headers: use bytes stdout thoroughly...
r36594 stdout.write(b'%d %s\n' % (response.status,
response.reason.encode('ascii')))
Mads Kiilerich
serve: don't send any content headers with 304 responses...
r18380 if show[:1] == ['-']:
Mads Kiilerich
tests: make test-hgweb.t output stable...
r18393 show = sorted(h for h, v in response.getheaders()
if h.lower() not in show)
Dirkjan Ochtman
tests: extend get-with-headers to support cache testing
r12182 for h in [h.lower() for h in show]:
if response.getheader(h, None) is not None:
Yuya Nishihara
get-with-headers: use bytes stdout thoroughly...
r36594 stdout.write(b"%s: %s\n" % (h.encode('ascii'),
response.getheader(h).encode('ascii')))
Pierre-Yves David
get-with-headers: add a --headeronly switch...
r18400 if not headeronly:
Yuya Nishihara
get-with-headers: use bytes stdout thoroughly...
r36594 stdout.write(b'\n')
Gregory Szorc
hgweb: send proper HTTP response after uncaught exception...
r23409 data = response.read()
Gregory Szorc
get-with-headers: support parsing and pretty printing JSON...
r24543
Gregory Szorc
tests: teach get-with-headers.py some new tricks...
r35799 if args.bodyfile:
bodyfh = open(args.bodyfile, 'wb')
else:
Yuya Nishihara
get-with-headers: use bytes stdout thoroughly...
r36594 bodyfh = stdout
Gregory Szorc
tests: teach get-with-headers.py some new tricks...
r35799
Gregory Szorc
get-with-headers: support parsing and pretty printing JSON...
r24543 # Pretty print JSON. This also has the beneficial side-effect
# of verifying emitted JSON is well-formed.
if formatjson:
# json.dumps() will print trailing newlines. Eliminate them
# to make tests easier to write.
data = json.loads(data)
lines = json.dumps(data, sort_keys=True, indent=2).splitlines()
for line in lines:
Gregory Szorc
tests: teach get-with-headers.py some new tricks...
r35799 bodyfh.write(line.rstrip())
bodyfh.write(b'\n')
Gregory Szorc
get-with-headers: support parsing and pretty printing JSON...
r24543 else:
Gregory Szorc
tests: teach get-with-headers.py some new tricks...
r35799 bodyfh.write(data)
if args.bodyfile:
bodyfh.close()
Dirkjan Ochtman
tests: extend get-with-headers to support cache testing
r12182
Gregory Szorc
tests: store ETag when using --headeronly...
r31791 if twice and response.getheader('ETag', None):
tag = response.getheader('ETag')
Dirkjan Ochtman
tests: extend get-with-headers to support cache testing
r12182
return response.status
Gregory Szorc
tests: use argparse in get-with-headers.py...
r35798 status = request(args.host, args.path, args.show)
Dirkjan Ochtman
tests: extend get-with-headers to support cache testing
r12182 if twice:
Gregory Szorc
tests: use argparse in get-with-headers.py...
r35798 status = request(args.host, args.path, args.show)
Dirkjan Ochtman
tests: extend get-with-headers to support cache testing
r12182
if 200 <= status <= 305:
Bryan O'Sullivan
hgweb: return meaningful HTTP status codes instead of nonsense
r5561 sys.exit(0)
sys.exit(1)