mercurial/changegroup.py
changeset 5370 61462e7d62ed
parent 3932 e0793314360e
equal deleted inserted replaced
5369:7530334bf301 5370:61462e7d62ed
    31         c = getchunk(source)
    31         c = getchunk(source)
    32         if not c:
    32         if not c:
    33             break
    33             break
    34         yield c
    34         yield c
    35 
    35 
    36 def genchunk(data):
    36 def chunkheader(length):
    37     """build a changegroup chunk"""
    37     """build a changegroup chunk header"""
    38     header = struct.pack(">l", len(data)+ 4)
    38     return struct.pack(">l", length + 4)
    39     return "%s%s" % (header, data)
       
    40 
    39 
    41 def closechunk():
    40 def closechunk():
    42     return struct.pack(">l", 0)
    41     return struct.pack(">l", 0)
    43 
    42 
    44 class nocompress(object):
    43 class nocompress(object):
    84         empty = False
    83         empty = False
    85         while not empty:
    84         while not empty:
    86             empty = True
    85             empty = True
    87             for chunk in chunkiter(cg):
    86             for chunk in chunkiter(cg):
    88                 empty = False
    87                 empty = False
    89                 fh.write(z.compress(genchunk(chunk)))
    88                 fh.write(z.compress(chunkheader(len(chunk))))
       
    89                 pos = 0
       
    90                 while pos < len(chunk):
       
    91                     next = pos + 2**20
       
    92                     fh.write(z.compress(chunk[pos:next]))
       
    93                     pos = next
    90             fh.write(z.compress(closechunk()))
    94             fh.write(z.compress(closechunk()))
    91         fh.write(z.flush())
    95         fh.write(z.flush())
    92         cleanup = None
    96         cleanup = None
    93         return filename
    97         return filename
    94     finally:
    98     finally: