Show More
@@ -8,7 +8,7 b' of the GNU General Public License, incor' | |||
|
8 | 8 | """ |
|
9 | 9 | from i18n import gettext as _ |
|
10 | 10 | from demandload import * |
|
11 | demandload(globals(), "struct util") | |
|
11 | demandload(globals(), "struct os bz2 util tempfile") | |
|
12 | 12 | |
|
13 | 13 | def getchunk(source): |
|
14 | 14 | """get a chunk from a changegroup""" |
@@ -41,3 +41,55 b' def genchunk(data):' | |||
|
41 | 41 | def closechunk(): |
|
42 | 42 | return struct.pack(">l", 0) |
|
43 | 43 | |
|
44 | class nocompress(object): | |
|
45 | def compress(self, x): | |
|
46 | return x | |
|
47 | def flush(self): | |
|
48 | return "" | |
|
49 | ||
|
50 | def writebundle(cg, filename, compress): | |
|
51 | """Write a bundle file and return its filename. | |
|
52 | ||
|
53 | Existing files will not be overwritten. | |
|
54 | If no filename is specified, a temporary file is created. | |
|
55 | bz2 compression can be turned off. | |
|
56 | The bundle file will be deleted in case of errors. | |
|
57 | """ | |
|
58 | ||
|
59 | fh = None | |
|
60 | cleanup = None | |
|
61 | try: | |
|
62 | if filename: | |
|
63 | if os.path.exists(filename): | |
|
64 | raise util.Abort(_("file '%s' already exists") % filename) | |
|
65 | fh = open(filename, "wb") | |
|
66 | else: | |
|
67 | fd, filename = tempfile.mkstemp(prefix="hg-bundle-", suffix=".hg") | |
|
68 | fh = os.fdopen(fd, "wb") | |
|
69 | cleanup = filename | |
|
70 | ||
|
71 | if compress: | |
|
72 | fh.write("HG10") | |
|
73 | z = bz2.BZ2Compressor(9) | |
|
74 | else: | |
|
75 | fh.write("HG10UN") | |
|
76 | z = nocompress() | |
|
77 | # parse the changegroup data, otherwise we will block | |
|
78 | # in case of sshrepo because we don't know the end of the stream | |
|
79 | ||
|
80 | # an empty chunkiter is the end of the changegroup | |
|
81 | empty = False | |
|
82 | while not empty: | |
|
83 | empty = True | |
|
84 | for chunk in chunkiter(cg): | |
|
85 | empty = False | |
|
86 | fh.write(z.compress(genchunk(chunk))) | |
|
87 | fh.write(z.compress(closechunk())) | |
|
88 | fh.write(z.flush()) | |
|
89 | cleanup = None | |
|
90 | return filename | |
|
91 | finally: | |
|
92 | if fh is not None: | |
|
93 | fh.close() | |
|
94 | if cleanup is not None: | |
|
95 | os.unlink(cleanup) |
@@ -10,7 +10,7 b' from node import *' | |||
|
10 | 10 | from i18n import gettext as _ |
|
11 | 11 | demandload(globals(), "os re sys signal imp urllib pdb shlex") |
|
12 | 12 | demandload(globals(), "fancyopts ui hg util lock revlog bundlerepo") |
|
13 |
demandload(globals(), "difflib patch t |
|
|
13 | demandload(globals(), "difflib patch time") | |
|
14 | 14 | demandload(globals(), "traceback errno version atexit bz2") |
|
15 | 15 | demandload(globals(), "archival changegroup cmdutil hgweb.server sshserver") |
|
16 | 16 | |
@@ -43,58 +43,6 b' def logmessage(opts):' | |||
|
43 | 43 | (logfile, inst.strerror)) |
|
44 | 44 | return message |
|
45 | 45 | |
|
46 | def write_bundle(cg, filename=None, compress=True): | |
|
47 | """Write a bundle file and return its filename. | |
|
48 | ||
|
49 | Existing files will not be overwritten. | |
|
50 | If no filename is specified, a temporary file is created. | |
|
51 | bz2 compression can be turned off. | |
|
52 | The bundle file will be deleted in case of errors. | |
|
53 | """ | |
|
54 | class nocompress(object): | |
|
55 | def compress(self, x): | |
|
56 | return x | |
|
57 | def flush(self): | |
|
58 | return "" | |
|
59 | ||
|
60 | fh = None | |
|
61 | cleanup = None | |
|
62 | try: | |
|
63 | if filename: | |
|
64 | if os.path.exists(filename): | |
|
65 | raise util.Abort(_("file '%s' already exists") % filename) | |
|
66 | fh = open(filename, "wb") | |
|
67 | else: | |
|
68 | fd, filename = tempfile.mkstemp(prefix="hg-bundle-", suffix=".hg") | |
|
69 | fh = os.fdopen(fd, "wb") | |
|
70 | cleanup = filename | |
|
71 | ||
|
72 | if compress: | |
|
73 | fh.write("HG10") | |
|
74 | z = bz2.BZ2Compressor(9) | |
|
75 | else: | |
|
76 | fh.write("HG10UN") | |
|
77 | z = nocompress() | |
|
78 | # parse the changegroup data, otherwise we will block | |
|
79 | # in case of sshrepo because we don't know the end of the stream | |
|
80 | ||
|
81 | # an empty chunkiter is the end of the changegroup | |
|
82 | empty = False | |
|
83 | while not empty: | |
|
84 | empty = True | |
|
85 | for chunk in changegroup.chunkiter(cg): | |
|
86 | empty = False | |
|
87 | fh.write(z.compress(changegroup.genchunk(chunk))) | |
|
88 | fh.write(z.compress(changegroup.closechunk())) | |
|
89 | fh.write(z.flush()) | |
|
90 | cleanup = None | |
|
91 | return filename | |
|
92 | finally: | |
|
93 | if fh is not None: | |
|
94 | fh.close() | |
|
95 | if cleanup is not None: | |
|
96 | os.unlink(cleanup) | |
|
97 | ||
|
98 | 46 | def setremoteconfig(ui, opts): |
|
99 | 47 | "copy remote options to ui tree" |
|
100 | 48 | if opts.get('ssh'): |
@@ -384,7 +332,7 b' def bundle(ui, repo, fname, dest=None, *' | |||
|
384 | 332 | cg = repo.changegroupsubset(o, revs, 'bundle') |
|
385 | 333 | else: |
|
386 | 334 | cg = repo.changegroup(o, 'bundle') |
|
387 |
write |
|
|
335 | changegroup.writebundle(cg, fname, False) | |
|
388 | 336 | |
|
389 | 337 | def cat(ui, repo, file1, *pats, **opts): |
|
390 | 338 | """output the latest or given revisions of files |
@@ -1344,7 +1292,7 b' def incoming(ui, repo, source="default",' | |||
|
1344 | 1292 | if fname or not other.local(): |
|
1345 | 1293 | # create a bundle (uncompressed if other repo is not local) |
|
1346 | 1294 | cg = other.changegroup(incoming, "incoming") |
|
1347 |
fname = cleanup = write |
|
|
1295 | fname = cleanup = changegroup.writebundle(cg, fname, other.local()) | |
|
1348 | 1296 | # keep written bundle? |
|
1349 | 1297 | if opts["bundle"]: |
|
1350 | 1298 | cleanup = None |
@@ -1782,8 +1730,7 b' def rawcommit(ui, repo, *pats, **opts):' | |||
|
1782 | 1730 | parents = [repo.lookup(p) for p in opts['parent']] |
|
1783 | 1731 | |
|
1784 | 1732 | try: |
|
1785 | repo.rawcommit(files, message, | |
|
1786 | opts['user'], opts['date'], *parents) | |
|
1733 | repo.rawcommit(files, message, opts['user'], opts['date'], *parents) | |
|
1787 | 1734 | except ValueError, inst: |
|
1788 | 1735 | raise util.Abort(str(inst)) |
|
1789 | 1736 |
General Comments 0
You need to be logged in to leave comments.
Login now