# HG changeset patch # User Alexis S. L. Carvalho # Date 1146116527 25200 # Node ID f5046cab9e2e53fd6d1d1109073d6674297f64cd # Parent 5fefab118f7ec4b45e2d35d001471f2083ea2c9c 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. diff --git a/mercurial/httprangereader.py b/mercurial/httprangereader.py --- a/mercurial/httprangereader.py +++ b/mercurial/httprangereader.py @@ -18,7 +18,8 @@ class httprangereader(object): urllib2.install_opener(opener) req = urllib2.Request(self.url) end = '' - if bytes: end = self.pos + bytes + if bytes: + end = self.pos + bytes - 1 req.add_header('Range', 'bytes=%d-%s' % (self.pos, end)) f = urllib2.urlopen(req) - return f.read() + return f.read(bytes) diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -333,8 +333,8 @@ class revlog(object): and st.st_ctime == oldst.st_ctime): return self.indexstat = st - if len(i) > 0: - v = struct.unpack(versionformat, i)[0] + if len(i) > 0: + v = struct.unpack(versionformat, i)[0] flags = v & ~0xFFFF fmt = v & 0xFFFF if fmt == 0: