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', ''))) |