diff -r dfb796786337 -r 736b6c96bbbc mercurial/changegroup.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mercurial/changegroup.py Tue Mar 21 11:47:21 2006 +0100 @@ -0,0 +1,43 @@ +""" +changegroup.py - Mercurial changegroup manipulation functions + + Copyright 2006 Matt Mackall + +This software may be used and distributed according to the terms +of the GNU General Public License, incorporated herein by reference. +""" +import struct +from demandload import * +demandload(globals(), "util") + +def getchunk(source): + """get a chunk from a changegroup""" + d = source.read(4) + if not d: + return "" + l = struct.unpack(">l", d)[0] + if l <= 4: + return "" + d = source.read(l - 4) + if len(d) < l - 4: + raise util.Abort(_("premature EOF reading chunk" + " (got %d bytes, expected %d)") + % (len(d), l - 4)) + return d + +def chunkiter(source): + """iterate through the chunks in source""" + while 1: + c = getchunk(source) + if not c: + break + yield c + +def genchunk(data): + """build a changegroup chunk""" + header = struct.pack(">l", len(data)+ 4) + return "%s%s" % (header, data) + +def closechunk(): + return struct.pack(">l", 0) +