comparison mercurial/commands.py @ 1943:8198c60f7914

refactor the bundle writing code, since we will reuse it later
author Benoit Boissinot <benoit.boissinot@ens-lyon.org>
date Mon, 13 Mar 2006 03:54:23 +0100
parents 7ae177a70f54
children fdf40c9b3306
comparison
equal deleted inserted replaced
1942:9da45de3118d 1943:8198c60f7914
272 return pat 272 return pat
273 return open(make_filename(repo, r, pat, node, total, seqno, revwidth, 273 return open(make_filename(repo, r, pat, node, total, seqno, revwidth,
274 pathname), 274 pathname),
275 mode) 275 mode)
276 276
277 def write_bundle(cg, filename, compress=True, fh=None):
278 if fh is None:
279 fh = open(filename, "wb")
280
281 class nocompress(object):
282 def compress(self, x):
283 return x
284 def flush(self):
285 return ""
286 try:
287 if compress:
288 fh.write("HG10")
289 z = bz2.BZ2Compressor(9)
290 else:
291 fh.write("HG11")
292 z = nocompress()
293 while 1:
294 chunk = cg.read(4096)
295 if not chunk:
296 break
297 fh.write(z.compress(chunk))
298 fh.write(z.flush())
299 except:
300 os.unlink(filename)
301 raise
302
277 def dodiff(fp, ui, repo, node1, node2, files=None, match=util.always, 303 def dodiff(fp, ui, repo, node1, node2, files=None, match=util.always,
278 changes=None, text=False, opts={}): 304 changes=None, text=False, opts={}):
279 if not node1: 305 if not node1:
280 node1 = repo.dirstate.parents()[0] 306 node1 = repo.dirstate.parents()[0]
281 # reading the data for node1 early allows it to play nicely 307 # reading the data for node1 early allows it to play nicely
828 extension is ".hg". 854 extension is ".hg".
829 855
830 Unlike import/export, this exactly preserves all changeset 856 Unlike import/export, this exactly preserves all changeset
831 contents including permissions, rename data, and revision history. 857 contents including permissions, rename data, and revision history.
832 """ 858 """
833 f = open(fname, "wb")
834 dest = ui.expandpath(dest) 859 dest = ui.expandpath(dest)
835 other = hg.repository(ui, dest) 860 other = hg.repository(ui, dest)
836 o = repo.findoutgoing(other) 861 o = repo.findoutgoing(other)
837 cg = repo.changegroup(o, 'bundle') 862 cg = repo.changegroup(o, 'bundle')
838 863 write_bundle(cg, fname)
839 try:
840 f.write("HG10")
841 z = bz2.BZ2Compressor(9)
842 while 1:
843 chunk = cg.read(4096)
844 if not chunk:
845 break
846 f.write(z.compress(chunk))
847 f.write(z.flush())
848 except:
849 os.unlink(fname)
850 raise
851 864
852 def cat(ui, repo, file1, *pats, **opts): 865 def cat(ui, repo, file1, *pats, **opts):
853 """output the latest or given revisions of files 866 """output the latest or given revisions of files
854 867
855 Print the specified files as they were at the given revision. 868 Print the specified files as they were at the given revision.