mercurial/hgweb/protocol.py
changeset 11626 2f8adc60e013
parent 11625 cdeb861335d5
child 12703 40bb5853fc4b
equal deleted inserted replaced
11625:cdeb861335d5 11626:2f8adc60e013
    41             chunk = cg.read(4096)
    41             chunk = cg.read(4096)
    42             if not chunk:
    42             if not chunk:
    43                 break
    43                 break
    44             yield z.compress(chunk)
    44             yield z.compress(chunk)
    45         yield z.flush()
    45         yield z.flush()
    46     def sendresponse(self, s):
       
    47         self.req.respond(HTTP_OK, HGTYPE, length=len(s))
       
    48         self.response = s
       
    49     def sendstream(self, source):
       
    50         self.req.respond(HTTP_OK, HGTYPE)
       
    51         for chunk in source.gen:
       
    52             self.req.write(chunk)
       
    53     def sendpushresponse(self, rsp):
       
    54         val = sys.stdout.getvalue()
       
    55         sys.stdout, sys.stderr = self.oldio
       
    56         self.req.respond(HTTP_OK, HGTYPE)
       
    57         self.response = '%d\n%s' % (rsp.res, val)
       
    58 
       
    59     handlers = {
       
    60         str: sendresponse,
       
    61         wireproto.streamres: sendstream,
       
    62         wireproto.pushres: sendpushresponse,
       
    63     }
       
    64 
       
    65     def _client(self):
    46     def _client(self):
    66         return 'remote:%s:%s:%s' % (
    47         return 'remote:%s:%s:%s' % (
    67             self.req.env.get('wsgi.url_scheme') or 'http',
    48             self.req.env.get('wsgi.url_scheme') or 'http',
    68             urllib.quote(self.req.env.get('REMOTE_HOST', '')),
    49             urllib.quote(self.req.env.get('REMOTE_HOST', '')),
    69             urllib.quote(self.req.env.get('REMOTE_USER', '')))
    50             urllib.quote(self.req.env.get('REMOTE_USER', '')))
    72     return cmd in wireproto.commands
    53     return cmd in wireproto.commands
    73 
    54 
    74 def call(repo, req, cmd):
    55 def call(repo, req, cmd):
    75     p = webproto(req)
    56     p = webproto(req)
    76     rsp = wireproto.dispatch(repo, p, cmd)
    57     rsp = wireproto.dispatch(repo, p, cmd)
    77     webproto.handlers[rsp.__class__](p, rsp)
    58     if isinstance(rsp, str):
    78     return [p.response]
    59         req.respond(HTTP_OK, HGTYPE, length=len(rsp))
       
    60         return [rsp]
       
    61     elif isinstance(rsp, wireproto.streamres):
       
    62         req.respond(HTTP_OK, HGTYPE)
       
    63         return rsp.gen
       
    64     elif isinstance(rsp, wireproto.pushres):
       
    65         val = sys.stdout.getvalue()
       
    66         sys.stdout, sys.stderr = p.oldio
       
    67         req.respond(HTTP_OK, HGTYPE)
       
    68         return ['%d\n%s' % (rsp.res, val)]