mercurial/hgweb/protocol.py
changeset 30206 d105195436c0
parent 30014 d34cf260d15b
child 30358 38130a0bbb99
equal deleted inserted replaced
30205:b4074417b661 30206:d105195436c0
    71         self.ui.ferr = self.ui.fout = stringio()
    71         self.ui.ferr = self.ui.fout = stringio()
    72     def restore(self):
    72     def restore(self):
    73         val = self.ui.fout.getvalue()
    73         val = self.ui.fout.getvalue()
    74         self.ui.ferr, self.ui.fout = self.oldio
    74         self.ui.ferr, self.ui.fout = self.oldio
    75         return val
    75         return val
       
    76 
    76     def groupchunks(self, fh):
    77     def groupchunks(self, fh):
       
    78         def getchunks():
       
    79             while True:
       
    80                 chunk = fh.read(32768)
       
    81                 if not chunk:
       
    82                     break
       
    83                 yield chunk
       
    84 
       
    85         return self.compresschunks(getchunks())
       
    86 
       
    87     def compresschunks(self, chunks):
    77         # Don't allow untrusted settings because disabling compression or
    88         # Don't allow untrusted settings because disabling compression or
    78         # setting a very high compression level could lead to flooding
    89         # setting a very high compression level could lead to flooding
    79         # the server's network or CPU.
    90         # the server's network or CPU.
    80         z = zlib.compressobj(self.ui.configint('server', 'zliblevel', -1))
    91         z = zlib.compressobj(self.ui.configint('server', 'zliblevel', -1))
    81         while True:
    92         for chunk in chunks:
    82             chunk = fh.read(32768)
       
    83             if not chunk:
       
    84                 break
       
    85             data = z.compress(chunk)
    93             data = z.compress(chunk)
    86             # Not all calls to compress() emit data. It is cheaper to inspect
    94             # Not all calls to compress() emit data. It is cheaper to inspect
    87             # that here than to send it via the generator.
    95             # that here than to send it via the generator.
    88             if data:
    96             if data:
    89                 yield data
    97                 yield data
    90         yield z.flush()
    98         yield z.flush()
       
    99 
    91     def _client(self):
   100     def _client(self):
    92         return 'remote:%s:%s:%s' % (
   101         return 'remote:%s:%s:%s' % (
    93             self.req.env.get('wsgi.url_scheme') or 'http',
   102             self.req.env.get('wsgi.url_scheme') or 'http',
    94             urlreq.quote(self.req.env.get('REMOTE_HOST', '')),
   103             urlreq.quote(self.req.env.get('REMOTE_HOST', '')),
    95             urlreq.quote(self.req.env.get('REMOTE_USER', '')))
   104             urlreq.quote(self.req.env.get('REMOTE_USER', '')))