Skip to content
Snippets Groups Projects
Commit 7458de933f26 authored by Matt Mackall's avatar Matt Mackall
Browse files

bundle: push chunkbuffer down into decompress

We replace the fixup iterator with a file-like object so that
uncompressed file streams can be passed end to end through the stack.
parent b63f6422d2a7
No related branches found
No related tags found
No related merge requests found
......@@ -136,7 +136,7 @@
yield zd.decompress(chunk)
else:
raise util.Abort("unknown bundle compression '%s'" % alg)
return generator(fh)
return util.chunkbuffer(generator(fh))
class unbundle10(object):
def __init__(self, fh, alg):
......@@ -140,10 +140,10 @@
class unbundle10(object):
def __init__(self, fh, alg):
self._stream = util.chunkbuffer(decompressor(fh, alg))
self._stream = decompressor(fh, alg)
self._type = alg
def compressed(self):
return self._type != 'UN'
def read(self, l):
return self._stream.read(l)
......@@ -144,12 +144,24 @@
self._type = alg
def compressed(self):
return self._type != 'UN'
def read(self, l):
return self._stream.read(l)
class headerlessfixup(object):
def __init__(self, fh, h):
self._h = h
self._fh = fh
def read(self, n):
if self._h:
d, self._h = self._h[:n], self._h[n:]
if len(d) < n:
d += self._fh.read(n - len(d))
return d
return self._fh.read(n)
def readbundle(fh, fname):
header = fh.read(6)
if not fname:
fname = "stream"
if not header.startswith('HG') and header.startswith('\0'):
......@@ -150,15 +162,10 @@
def readbundle(fh, fname):
header = fh.read(6)
if not fname:
fname = "stream"
if not header.startswith('HG') and header.startswith('\0'):
# headerless bundle, clean things up
def fixup(f, h):
yield h
for x in f:
yield x
fh = fixup(fh, header)
fh = headerlessfixup(fh, header)
header = "HG10UN"
magic, version, alg = header[0:2], header[2:4], header[4:6]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment