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)