mercurial/changegroup.py
changeset 1981 736b6c96bbbc
child 1997 802e8a029d99
new file mode 100644
--- /dev/null
+++ b/mercurial/changegroup.py
@@ -0,0 +1,43 @@
+"""
+changegroup.py - Mercurial changegroup manipulation functions
+
+ Copyright 2006 Matt Mackall <mpm@selenic.com>
+
+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)
+