move write_bundle to changegroup.py
authorMatt Mackall <mpm@selenic.com>
Wed, 15 Nov 2006 15:51:58 -0600
changeset 3659 025f68f22ae2
parent 3658 d12c8668b102
child 3660 8500a13ec44b
move write_bundle to changegroup.py
mercurial/changegroup.py
mercurial/commands.py
--- a/mercurial/changegroup.py	Wed Nov 15 15:51:58 2006 -0600
+++ b/mercurial/changegroup.py	Wed Nov 15 15:51:58 2006 -0600
@@ -8,7 +8,7 @@
 """
 from i18n import gettext as _
 from demandload import *
-demandload(globals(), "struct util")
+demandload(globals(), "struct os bz2 util tempfile")
 
 def getchunk(source):
     """get a chunk from a changegroup"""
@@ -41,3 +41,55 @@
 def closechunk():
     return struct.pack(">l", 0)
 
+class nocompress(object):
+    def compress(self, x):
+        return x
+    def flush(self):
+        return ""
+
+def writebundle(cg, filename, compress):
+    """Write a bundle file and return its filename.
+
+    Existing files will not be overwritten.
+    If no filename is specified, a temporary file is created.
+    bz2 compression can be turned off.
+    The bundle file will be deleted in case of errors.
+    """
+
+    fh = None
+    cleanup = None
+    try:
+        if filename:
+            if os.path.exists(filename):
+                raise util.Abort(_("file '%s' already exists") % filename)
+            fh = open(filename, "wb")
+        else:
+            fd, filename = tempfile.mkstemp(prefix="hg-bundle-", suffix=".hg")
+            fh = os.fdopen(fd, "wb")
+        cleanup = filename
+
+        if compress:
+            fh.write("HG10")
+            z = bz2.BZ2Compressor(9)
+        else:
+            fh.write("HG10UN")
+            z = nocompress()
+        # parse the changegroup data, otherwise we will block
+        # in case of sshrepo because we don't know the end of the stream
+
+        # an empty chunkiter is the end of the changegroup
+        empty = False
+        while not empty:
+            empty = True
+            for chunk in chunkiter(cg):
+                empty = False
+                fh.write(z.compress(genchunk(chunk)))
+            fh.write(z.compress(closechunk()))
+        fh.write(z.flush())
+        cleanup = None
+        return filename
+    finally:
+        if fh is not None:
+            fh.close()
+        if cleanup is not None:
+            os.unlink(cleanup)
--- a/mercurial/commands.py	Wed Nov 15 15:51:58 2006 -0600
+++ b/mercurial/commands.py	Wed Nov 15 15:51:58 2006 -0600
@@ -10,7 +10,7 @@
 from i18n import gettext as _
 demandload(globals(), "os re sys signal imp urllib pdb shlex")
 demandload(globals(), "fancyopts ui hg util lock revlog bundlerepo")
-demandload(globals(), "difflib patch tempfile time")
+demandload(globals(), "difflib patch time")
 demandload(globals(), "traceback errno version atexit bz2")
 demandload(globals(), "archival changegroup cmdutil hgweb.server sshserver")
 
@@ -43,58 +43,6 @@
                              (logfile, inst.strerror))
     return message
 
-def write_bundle(cg, filename=None, compress=True):
-    """Write a bundle file and return its filename.
-
-    Existing files will not be overwritten.
-    If no filename is specified, a temporary file is created.
-    bz2 compression can be turned off.
-    The bundle file will be deleted in case of errors.
-    """
-    class nocompress(object):
-        def compress(self, x):
-            return x
-        def flush(self):
-            return ""
-
-    fh = None
-    cleanup = None
-    try:
-        if filename:
-            if os.path.exists(filename):
-                raise util.Abort(_("file '%s' already exists") % filename)
-            fh = open(filename, "wb")
-        else:
-            fd, filename = tempfile.mkstemp(prefix="hg-bundle-", suffix=".hg")
-            fh = os.fdopen(fd, "wb")
-        cleanup = filename
-
-        if compress:
-            fh.write("HG10")
-            z = bz2.BZ2Compressor(9)
-        else:
-            fh.write("HG10UN")
-            z = nocompress()
-        # parse the changegroup data, otherwise we will block
-        # in case of sshrepo because we don't know the end of the stream
-
-        # an empty chunkiter is the end of the changegroup
-        empty = False
-        while not empty:
-            empty = True
-            for chunk in changegroup.chunkiter(cg):
-                empty = False
-                fh.write(z.compress(changegroup.genchunk(chunk)))
-            fh.write(z.compress(changegroup.closechunk()))
-        fh.write(z.flush())
-        cleanup = None
-        return filename
-    finally:
-        if fh is not None:
-            fh.close()
-        if cleanup is not None:
-            os.unlink(cleanup)
-
 def setremoteconfig(ui, opts):
     "copy remote options to ui tree"
     if opts.get('ssh'):
@@ -384,7 +332,7 @@
         cg = repo.changegroupsubset(o, revs, 'bundle')
     else:
         cg = repo.changegroup(o, 'bundle')
-    write_bundle(cg, fname)
+    changegroup.writebundle(cg, fname, False)
 
 def cat(ui, repo, file1, *pats, **opts):
     """output the latest or given revisions of files
@@ -1344,7 +1292,7 @@
         if fname or not other.local():
             # create a bundle (uncompressed if other repo is not local)
             cg = other.changegroup(incoming, "incoming")
-            fname = cleanup = write_bundle(cg, fname, compress=other.local())
+            fname = cleanup = changegroup.writebundle(cg, fname, other.local())
             # keep written bundle?
             if opts["bundle"]:
                 cleanup = None
@@ -1782,8 +1730,7 @@
     parents = [repo.lookup(p) for p in opts['parent']]
 
     try:
-        repo.rawcommit(files, message,
-                       opts['user'], opts['date'], *parents)
+        repo.rawcommit(files, message, opts['user'], opts['date'], *parents)
     except ValueError, inst:
         raise util.Abort(str(inst))