Mercurial > hg > mercurial-crew-with-dirclash
comparison mercurial/commands.py @ 3666:025f68f22ae2
move write_bundle to changegroup.py
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Wed, 15 Nov 2006 15:51:58 -0600 |
parents | d12c8668b102 |
children | 8500a13ec44b |
comparison
equal
deleted
inserted
replaced
3665:d12c8668b102 | 3666:025f68f22ae2 |
---|---|
8 from demandload import demandload | 8 from demandload import demandload |
9 from node import * | 9 from node import * |
10 from i18n import gettext as _ | 10 from i18n import gettext as _ |
11 demandload(globals(), "os re sys signal imp urllib pdb shlex") | 11 demandload(globals(), "os re sys signal imp urllib pdb shlex") |
12 demandload(globals(), "fancyopts ui hg util lock revlog bundlerepo") | 12 demandload(globals(), "fancyopts ui hg util lock revlog bundlerepo") |
13 demandload(globals(), "difflib patch tempfile time") | 13 demandload(globals(), "difflib patch time") |
14 demandload(globals(), "traceback errno version atexit bz2") | 14 demandload(globals(), "traceback errno version atexit bz2") |
15 demandload(globals(), "archival changegroup cmdutil hgweb.server sshserver") | 15 demandload(globals(), "archival changegroup cmdutil hgweb.server sshserver") |
16 | 16 |
17 class UnknownCommand(Exception): | 17 class UnknownCommand(Exception): |
18 """Exception raised if command is not in the command table.""" | 18 """Exception raised if command is not in the command table.""" |
40 message = open(logfile).read() | 40 message = open(logfile).read() |
41 except IOError, inst: | 41 except IOError, inst: |
42 raise util.Abort(_("can't read commit message '%s': %s") % | 42 raise util.Abort(_("can't read commit message '%s': %s") % |
43 (logfile, inst.strerror)) | 43 (logfile, inst.strerror)) |
44 return message | 44 return message |
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 | 45 |
98 def setremoteconfig(ui, opts): | 46 def setremoteconfig(ui, opts): |
99 "copy remote options to ui tree" | 47 "copy remote options to ui tree" |
100 if opts.get('ssh'): | 48 if opts.get('ssh'): |
101 ui.setconfig("ui", "ssh", opts['ssh']) | 49 ui.setconfig("ui", "ssh", opts['ssh']) |
382 | 330 |
383 if revs: | 331 if revs: |
384 cg = repo.changegroupsubset(o, revs, 'bundle') | 332 cg = repo.changegroupsubset(o, revs, 'bundle') |
385 else: | 333 else: |
386 cg = repo.changegroup(o, 'bundle') | 334 cg = repo.changegroup(o, 'bundle') |
387 write_bundle(cg, fname) | 335 changegroup.writebundle(cg, fname, False) |
388 | 336 |
389 def cat(ui, repo, file1, *pats, **opts): | 337 def cat(ui, repo, file1, *pats, **opts): |
390 """output the latest or given revisions of files | 338 """output the latest or given revisions of files |
391 | 339 |
392 Print the specified files as they were at the given revision. | 340 Print the specified files as they were at the given revision. |
1342 try: | 1290 try: |
1343 fname = opts["bundle"] | 1291 fname = opts["bundle"] |
1344 if fname or not other.local(): | 1292 if fname or not other.local(): |
1345 # create a bundle (uncompressed if other repo is not local) | 1293 # create a bundle (uncompressed if other repo is not local) |
1346 cg = other.changegroup(incoming, "incoming") | 1294 cg = other.changegroup(incoming, "incoming") |
1347 fname = cleanup = write_bundle(cg, fname, compress=other.local()) | 1295 fname = cleanup = changegroup.writebundle(cg, fname, other.local()) |
1348 # keep written bundle? | 1296 # keep written bundle? |
1349 if opts["bundle"]: | 1297 if opts["bundle"]: |
1350 cleanup = None | 1298 cleanup = None |
1351 if not other.local(): | 1299 if not other.local(): |
1352 # use the created uncompressed bundlerepo | 1300 # use the created uncompressed bundlerepo |
1780 files += open(opts['files']).read().splitlines() | 1728 files += open(opts['files']).read().splitlines() |
1781 | 1729 |
1782 parents = [repo.lookup(p) for p in opts['parent']] | 1730 parents = [repo.lookup(p) for p in opts['parent']] |
1783 | 1731 |
1784 try: | 1732 try: |
1785 repo.rawcommit(files, message, | 1733 repo.rawcommit(files, message, opts['user'], opts['date'], *parents) |
1786 opts['user'], opts['date'], *parents) | |
1787 except ValueError, inst: | 1734 except ValueError, inst: |
1788 raise util.Abort(str(inst)) | 1735 raise util.Abort(str(inst)) |
1789 | 1736 |
1790 def recover(ui, repo): | 1737 def recover(ui, repo): |
1791 """roll back an interrupted transaction | 1738 """roll back an interrupted transaction |