Mercurial > hg
changeset 12336:9d234f7d8a77
bundle: move chunk parsing into unbundle class
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Sun, 19 Sep 2010 13:12:45 -0500 |
parents | e21fe9c5fb25 |
children | 6a6149487817 |
files | mercurial/changegroup.py mercurial/revlog.py |
diffstat | 2 files changed, 17 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/changegroup.py Sun Sep 19 12:51:54 2010 -0500 +++ b/mercurial/changegroup.py Sun Sep 19 13:12:45 2010 -0500 @@ -163,6 +163,15 @@ % (len(d), l)) return d + def parsechunk(self): + l = self.chunklength() + if not l: + return {} + h = self.read(80) + node, p1, p2, cs = struct.unpack("20s20s20s20s", h) + data = self.read(l - 80) + return dict(node=node, p1=p1, p2=p2, cs=cs, data=data) + class headerlessfixup(object): def __init__(self, fh, h): self._h = h
--- a/mercurial/revlog.py Sun Sep 19 12:51:54 2010 -0500 +++ b/mercurial/revlog.py Sun Sep 19 13:12:45 2010 -0500 @@ -1302,18 +1302,21 @@ # loop through our set of deltas chain = None while 1: - chunk = bundle.chunk() - if not chunk: + chunkdata = bundle.parsechunk() + if not chunkdata: break - node, p1, p2, cs = struct.unpack("20s20s20s20s", chunk[:80]) + node = chunkdata['node'] + p1 = chunkdata['p1'] + p2 = chunkdata['p2'] + cs = chunkdata['cs'] + delta = chunkdata['data'] + link = linkmapper(cs) if (node in self.nodemap and (not self.flags(self.rev(node)) & REVIDX_PUNCHED_FLAG)): # this can happen if two branches make the same change chain = node continue - delta = buffer(chunk, 80) - del chunk for p in (p1, p2): if not p in self.nodemap: