3 """This does HTTP GET requests given a host:port and path and returns |
3 """This does HTTP GET requests given a host:port and path and returns |
4 a subset of the headers plus the body of the result.""" |
4 a subset of the headers plus the body of the result.""" |
5 |
5 |
6 from __future__ import absolute_import, print_function |
6 from __future__ import absolute_import, print_function |
7 |
7 |
|
8 import argparse |
8 import json |
9 import json |
9 import os |
10 import os |
10 import sys |
11 import sys |
11 |
12 |
12 from mercurial import ( |
13 from mercurial import ( |
20 msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) |
21 msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) |
21 msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY) |
22 msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY) |
22 except ImportError: |
23 except ImportError: |
23 pass |
24 pass |
24 |
25 |
25 twice = False |
26 parser = argparse.ArgumentParser() |
26 if '--twice' in sys.argv: |
27 parser.add_argument('--twice', action='store_true') |
27 sys.argv.remove('--twice') |
28 parser.add_argument('--headeronly', action='store_true') |
28 twice = True |
29 parser.add_argument('--json', action='store_true') |
29 headeronly = False |
30 parser.add_argument('--hgproto') |
30 if '--headeronly' in sys.argv: |
31 parser.add_argument('host') |
31 sys.argv.remove('--headeronly') |
32 parser.add_argument('path') |
32 headeronly = True |
33 parser.add_argument('show', nargs='*') |
33 formatjson = False |
|
34 if '--json' in sys.argv: |
|
35 sys.argv.remove('--json') |
|
36 formatjson = True |
|
37 |
34 |
38 hgproto = None |
35 args = parser.parse_args() |
39 if '--hgproto' in sys.argv: |
36 |
40 idx = sys.argv.index('--hgproto') |
37 twice = args.twice |
41 hgproto = sys.argv[idx + 1] |
38 headeronly = args.headeronly |
42 sys.argv.pop(idx) |
39 formatjson = args.json |
43 sys.argv.pop(idx) |
40 hgproto = args.hgproto |
44 |
41 |
45 tag = None |
42 tag = None |
46 def request(host, path, show): |
43 def request(host, path, show): |
47 assert not path.startswith('/'), path |
44 assert not path.startswith('/'), path |
48 global tag |
45 global tag |
81 if twice and response.getheader('ETag', None): |
78 if twice and response.getheader('ETag', None): |
82 tag = response.getheader('ETag') |
79 tag = response.getheader('ETag') |
83 |
80 |
84 return response.status |
81 return response.status |
85 |
82 |
86 status = request(sys.argv[1], sys.argv[2], sys.argv[3:]) |
83 status = request(args.host, args.path, args.show) |
87 if twice: |
84 if twice: |
88 status = request(sys.argv[1], sys.argv[2], sys.argv[3:]) |
85 status = request(args.host, args.path, args.show) |
89 |
86 |
90 if 200 <= status <= 305: |
87 if 200 <= status <= 305: |
91 sys.exit(0) |
88 sys.exit(0) |
92 sys.exit(1) |
89 sys.exit(1) |