Mercurial > hg
changeset 12041:270fb4d39153
bundle: factor out decompressor
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Wed, 25 Aug 2010 15:33:05 -0500 |
parents | 529e712cb1ba |
children | 210049a8d16e |
files | mercurial/changegroup.py |
diffstat | 1 files changed, 19 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/changegroup.py Wed Aug 25 15:20:25 2010 -0500 +++ b/mercurial/changegroup.py Wed Aug 25 15:33:05 2010 -0500 @@ -120,27 +120,35 @@ if cleanup is not None: os.unlink(cleanup) -def unbundle(header, fh): - if header == 'HG10UN': +def decompressor(fh, alg): + if alg == 'UN': return fh - elif not header.startswith('HG'): - # old client with uncompressed bundle - def generator(f): - yield header - for chunk in f: - yield chunk - elif header == 'HG10GZ': + elif alg == 'GZ': def generator(f): zd = zlib.decompressobj() for chunk in f: yield zd.decompress(chunk) - elif header == 'HG10BZ': + elif alg == 'BZ': def generator(f): zd = bz2.BZ2Decompressor() zd.decompress("BZ") for chunk in util.filechunkiter(f, 4096): yield zd.decompress(chunk) - return util.chunkbuffer(generator(fh)) + else: + raise util.Abort("unknown bundle compression '%s'" % alg) + return generator(fh) + +def unbundle(header, fh): + if not header.startswith('HG'): + def fixup(f, h): + yield h + for x in f: + yield x + fh = fixup(f, h) + header = "HG10UN" + + alg = header[4:6] + return util.chunkbuffer(decompressor(fh, alg)) def readbundle(fh, fname): header = fh.read(6)