mercurial/exchange.py
changeset 21065 f9a9a6d63e89
parent 21064 4d9d490d7bbe
child 21067 7974aa88868e
equal deleted inserted replaced
21064:4d9d490d7bbe 21065:f9a9a6d63e89
    10 import errno
    10 import errno
    11 import util, scmutil, changegroup, base85
    11 import util, scmutil, changegroup, base85
    12 import discovery, phases, obsolete, bookmarks, bundle2
    12 import discovery, phases, obsolete, bookmarks, bundle2
    13 
    13 
    14 def readbundle(ui, fh, fname, vfs=None):
    14 def readbundle(ui, fh, fname, vfs=None):
    15     header = changegroup.readexactly(fh, 6)
    15     header = changegroup.readexactly(fh, 4)
    16 
    16 
       
    17     alg = None
    17     if not fname:
    18     if not fname:
    18         fname = "stream"
    19         fname = "stream"
    19         if not header.startswith('HG') and header.startswith('\0'):
    20         if not header.startswith('HG') and header.startswith('\0'):
    20             fh = changegroup.headerlessfixup(fh, header)
    21             fh = changegroup.headerlessfixup(fh, header)
    21             header = "HG10UN"
    22             header = "HG10"
       
    23             alg = 'UN'
    22     elif vfs:
    24     elif vfs:
    23         fname = vfs.join(fname)
    25         fname = vfs.join(fname)
    24 
    26 
    25     magic, version, alg = header[0:2], header[2:4], header[4:6]
    27     magic, version = header[0:2], header[2:4]
    26 
    28 
    27     if magic != 'HG':
    29     if magic != 'HG':
    28         raise util.Abort(_('%s: not a Mercurial bundle') % fname)
    30         raise util.Abort(_('%s: not a Mercurial bundle') % fname)
    29     if version != '10':
    31     if version == '10':
       
    32         if alg is None:
       
    33             alg = changegroup.readexactly(fh, 2)
       
    34         return changegroup.unbundle10(fh, alg)
       
    35     else:
    30         raise util.Abort(_('%s: unknown bundle version %s') % (fname, version))
    36         raise util.Abort(_('%s: unknown bundle version %s') % (fname, version))
    31     return changegroup.unbundle10(fh, alg)
       
    32 
    37 
    33 
    38 
    34 class pushoperation(object):
    39 class pushoperation(object):
    35     """A object that represent a single push operation
    40     """A object that represent a single push operation
    36 
    41