--- 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))