Mercurial > hg
comparison mercurial/httprangereader.py @ 2138:f5046cab9e2e
Fix revlog-ng interaction with old-http.
revlog.py wasn't trying to detect the version of a revlog file that
doesn't exist on the filesystem (as is the case with old-http).
Additionally, there was an off-by-one error in httprangereader.read
(ranges in HTTP Range headers are inclusive), making it get more data
than what was asked for. This made a struct.unpack complain that
"unpack str size does not match format".
Finally, with the two fixes above, test-static-http fails, since
BaseHTTPServer doesn't understand ranges and returns too much data.
Work around that by reading only the specified amount.
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Wed, 26 Apr 2006 22:42:07 -0700 |
parents | 59b3639df0a9 |
children | 12e11413ca19 |
comparison
equal
deleted
inserted
replaced
2137:5fefab118f7e | 2138:f5046cab9e2e |
---|---|
16 def read(self, bytes=None): | 16 def read(self, bytes=None): |
17 opener = urllib2.build_opener(byterange.HTTPRangeHandler()) | 17 opener = urllib2.build_opener(byterange.HTTPRangeHandler()) |
18 urllib2.install_opener(opener) | 18 urllib2.install_opener(opener) |
19 req = urllib2.Request(self.url) | 19 req = urllib2.Request(self.url) |
20 end = '' | 20 end = '' |
21 if bytes: end = self.pos + bytes | 21 if bytes: |
22 end = self.pos + bytes - 1 | |
22 req.add_header('Range', 'bytes=%d-%s' % (self.pos, end)) | 23 req.add_header('Range', 'bytes=%d-%s' % (self.pos, end)) |
23 f = urllib2.urlopen(req) | 24 f = urllib2.urlopen(req) |
24 return f.read() | 25 return f.read(bytes) |