35
35
def export_tarball_item(tree, ball, root, dp, ie, subdir=None, filtered=False,
38
filename = osutils.pathjoin(root, dp).encode('utf8')
39
item = tarfile.TarInfo(filename)
40
if force_mtime is not None:
41
item.mtime = force_mtime
43
item.mtime = tree.get_file_mtime(ie.file_id, dp)
45
item.type = tarfile.REGTYPE
46
if tree.is_executable(ie.file_id):
51
chunks = tree.get_file_lines(ie.file_id)
52
filters = tree._content_filter_stack(dp)
53
context = ContentFilterContext(dp, tree, ie)
54
contents = filtered_output_bytes(chunks, filters, context)
55
content = ''.join(contents)
56
item.size = len(content)
57
fileobj = StringIO.StringIO(content)
59
item.size = tree.get_file_size(ie.file_id)
60
fileobj = tree.get_file(ie.file_id)
61
elif ie.kind == "directory":
62
item.type = tarfile.DIRTYPE
67
elif ie.kind == "symlink":
68
item.type = tarfile.SYMTYPE
71
item.linkname = tree.get_symlink_target(ie.file_id)
74
raise errors.BzrError("don't know how to export {%s} of kind %r" %
75
(ie.file_id, ie.kind))
76
return (item, fileobj)
37
"""Export a tarball item
39
:param tree: Tree to export
40
:param ball: Tarball to export to
41
:param dp: Return value of _export_iter_entities
42
:param ie: Return value of _export_iter_entities
43
:param filtered: Whether to apply filters
44
:param subdir: Sub directory to export
45
:param force_mtime: Option mtime to force, instead of using
50
filename = osutils.pathjoin(root, dp).encode('utf8')
51
item = tarfile.TarInfo(filename)
52
if force_mtime is not None:
53
item.mtime = force_mtime
55
item.mtime = tree.get_file_mtime(ie.file_id, dp)
57
item.type = tarfile.REGTYPE
58
if tree.is_executable(ie.file_id):
63
chunks = tree.get_file_lines(ie.file_id)
64
filters = tree._content_filter_stack(dp)
65
context = ContentFilterContext(dp, tree, ie)
66
contents = filtered_output_bytes(chunks, filters, context)
67
content = ''.join(contents)
68
item.size = len(content)
69
fileobj = StringIO.StringIO(content)
71
item.size = tree.get_file_size(ie.file_id)
72
fileobj = tree.get_file(ie.file_id)
73
elif ie.kind == "directory":
74
item.type = tarfile.DIRTYPE
79
elif ie.kind == "symlink":
80
item.type = tarfile.SYMTYPE
83
item.linkname = tree.get_symlink_target(ie.file_id)
86
raise errors.BzrError("don't know how to export {%s} of kind %r" %
87
(ie.file_id, ie.kind))
88
return (item, fileobj)
79
91
def export_tarball(tree, ball, root, subdir=None, filtered=False,