tests/get-with-headers.py
changeset 35780 32317f8bbe2a
parent 31791 39f6333e968c
child 35781 c6ef8e841873
equal deleted inserted replaced
35779:eefabd9ed3e1 35780:32317f8bbe2a
     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)