mercurial/bundlerepo.py
changeset 6569 c15bfe9cdcd6
parent 6315 5c96a4bca66b
child 6647 602f7c1ab954
equal deleted inserted replaced
6568:0c4c804c8261 6569:c15bfe9cdcd6
    10 of the GNU General Public License, incorporated herein by reference.
    10 of the GNU General Public License, incorporated herein by reference.
    11 """
    11 """
    12 
    12 
    13 from node import hex, nullid, short
    13 from node import hex, nullid, short
    14 from i18n import _
    14 from i18n import _
    15 import changegroup, util, os, struct, bz2, tempfile, shutil, mdiff
    15 import changegroup, util, os, struct, bz2, zlib, tempfile, shutil, mdiff
    16 import repo, localrepo, changelog, manifest, filelog, revlog
    16 import repo, localrepo, changelog, manifest, filelog, revlog
    17 
    17 
    18 class bundlerevlog(revlog.revlog):
    18 class bundlerevlog(revlog.revlog):
    19     def __init__(self, opener, indexfile, bundlefile,
    19     def __init__(self, opener, indexfile, bundlefile,
    20                  linkmapper=None):
    20                  linkmapper=None):
   171         header = self.bundlefile.read(6)
   171         header = self.bundlefile.read(6)
   172         if not header.startswith("HG"):
   172         if not header.startswith("HG"):
   173             raise util.Abort(_("%s: not a Mercurial bundle file") % bundlename)
   173             raise util.Abort(_("%s: not a Mercurial bundle file") % bundlename)
   174         elif not header.startswith("HG10"):
   174         elif not header.startswith("HG10"):
   175             raise util.Abort(_("%s: unknown bundle version") % bundlename)
   175             raise util.Abort(_("%s: unknown bundle version") % bundlename)
   176         elif header == "HG10BZ":
   176         elif (header == "HG10BZ") or (header == "HG10GZ"):
   177             fdtemp, temp = tempfile.mkstemp(prefix="hg-bundle-",
   177             fdtemp, temp = tempfile.mkstemp(prefix="hg-bundle-",
   178                                             suffix=".hg10un", dir=self.path)
   178                                             suffix=".hg10un", dir=self.path)
   179             self.tempfile = temp
   179             self.tempfile = temp
   180             fptemp = os.fdopen(fdtemp, 'wb')
   180             fptemp = os.fdopen(fdtemp, 'wb')
   181             def generator(f):
   181             def generator(f):
   182                 zd = bz2.BZ2Decompressor()
   182                 if header == "HG10BZ":
   183                 zd.decompress("BZ")
   183                     zd = bz2.BZ2Decompressor()
       
   184                     zd.decompress("BZ")
       
   185                 elif header == "HG10GZ":
       
   186                     zd = zlib.decompressobj()
   184                 for chunk in f:
   187                 for chunk in f:
   185                     yield zd.decompress(chunk)
   188                     yield zd.decompress(chunk)
   186             gen = generator(util.filechunkiter(self.bundlefile, 4096))
   189             gen = generator(util.filechunkiter(self.bundlefile, 4096))
   187 
   190 
   188             try:
   191             try: