25
from bzrlib import errors, export
25
from bzrlib import errors, export, osutils
26
from bzrlib.export import _export_iter_entries
26
27
from bzrlib.trace import mutter
29
def tar_exporter(tree, dest, root, compression=None):
30
def tar_exporter(tree, dest, root, subdir, compression=None):
30
31
"""Export this tree to a new tar file.
32
33
`dest` will be created holding the contents of this tree; if it
33
34
already exists, it will be clobbered, like with "tar -c".
36
mutter('export version %r', tree)
36
38
compression = str(compression or '')
43
45
root = export.get_root_name(dest)
44
46
ball = tarfile.open(dest, 'w:' + compression)
45
mutter('export version %r', tree)
47
entries = inv.iter_entries()
48
entries.next() # skip root
49
for dp, ie in entries:
50
# .bzrignore has no meaning outside of a working tree
52
if dp == ".bzrignore":
54
item, fileobj = ie.get_tar_item(root, dp, now, tree)
47
for dp, ie in _export_iter_entries(tree, subdir):
48
filename = osutils.pathjoin(root, dp).encode('utf8')
49
item = tarfile.TarInfo(filename)
52
item.type = tarfile.REGTYPE
53
if tree.is_executable(ie.file_id):
57
item.size = ie.text_size
58
fileobj = tree.get_file(ie.file_id)
59
elif ie.kind == "directory":
60
item.type = tarfile.DIRTYPE
65
elif ie.kind == "symlink":
66
item.type = tarfile.SYMTYPE
69
item.linkname = ie.symlink_target
72
raise BzrError("don't know how to export {%s} of kind %r" %
73
(ie.file_id, ie.kind))
55
74
ball.addfile(item, fileobj)
59
def tgz_exporter(tree, dest, root):
60
tar_exporter(tree, dest, root, compression='gz')
63
def tbz_exporter(tree, dest, root):
64
tar_exporter(tree, dest, root, compression='bz2')
78
def tgz_exporter(tree, dest, root, subdir):
79
tar_exporter(tree, dest, root, subdir, compression='gz')
82
def tbz_exporter(tree, dest, root, subdir):
83
tar_exporter(tree, dest, root, subdir, compression='bz2')