~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/export/tar_exporter.py

Cleaned up code and removed unnecessary arguments.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
 
"""Export a Tree to a non-versioned directory.
18
 
"""
 
17
"""Export a Tree to a non-versioned directory."""
19
18
 
20
19
import os
21
20
import StringIO
32
31
    filtered_output_bytes,
33
32
    )
34
33
 
35
 
def export_tarball_item(tree, ball, root, dp, ie, subdir=None, filtered=False,
36
 
                   force_mtime=None):
 
34
def export_tarball_item(tree, root, final_path, entry, filtered=False, force_mtime=None):
37
35
    """Export a tarball item
38
36
        
39
37
    :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
 
38
    :param final_path: Final path to place item
 
39
    :param entry: Entry to export
43
40
    :param filtered: Whether to apply filters
44
 
    :param subdir: Sub directory to export
45
 
    :param force_mtime: Option mtime to force, instead of using
46
 
        tree timestamps.
 
41
    :param force_mtime: Option mtime to force, instead of using tree timestamps.
47
42
    """
48
43
    
49
 
    
50
 
    filename = osutils.pathjoin(root, dp).encode('utf8')
 
44
    filename = osutils.pathjoin(root, final_path).encode('utf8')
51
45
    item = tarfile.TarInfo(filename)
52
46
    if force_mtime is not None:
53
47
        item.mtime = force_mtime
54
48
    else:
55
 
        item.mtime = tree.get_file_mtime(ie.file_id, dp)
56
 
    if ie.kind == "file":
 
49
        item.mtime = tree.get_file_mtime(entry.file_id, final_path)
 
50
    if entry.kind == "file":
57
51
        item.type = tarfile.REGTYPE
58
 
        if tree.is_executable(ie.file_id):
 
52
        if tree.is_executable(entry.file_id):
59
53
            item.mode = 0755
60
54
        else:
61
55
            item.mode = 0644
62
56
        if filtered:
63
 
            chunks = tree.get_file_lines(ie.file_id)
64
 
            filters = tree._content_filter_stack(dp)
65
 
            context = ContentFilterContext(dp, tree, ie)
 
57
            chunks = tree.get_file_lines(entry.file_id)
 
58
            filters = tree._content_filter_stack(final_path)
 
59
            context = ContentFilterContext(final_path, tree, entry)
66
60
            contents = filtered_output_bytes(chunks, filters, context)
67
61
            content = ''.join(contents)
68
62
            item.size = len(content)
69
63
            fileobj = StringIO.StringIO(content)
70
64
        else:
71
 
            item.size = tree.get_file_size(ie.file_id)
72
 
            fileobj = tree.get_file(ie.file_id)
73
 
    elif ie.kind == "directory":
 
65
            item.size = tree.get_file_size(entry.file_id)
 
66
            fileobj = tree.get_file(entry.file_id)
 
67
    elif entry.kind == "directory":
74
68
        item.type = tarfile.DIRTYPE
75
69
        item.name += '/'
76
70
        item.size = 0
77
71
        item.mode = 0755
78
72
        fileobj = None
79
 
    elif ie.kind == "symlink":
 
73
    elif entry.kind == "symlink":
80
74
        item.type = tarfile.SYMTYPE
81
75
        item.size = 0
82
76
        item.mode = 0755
83
 
        item.linkname = tree.get_symlink_target(ie.file_id)
 
77
        item.linkname = tree.get_symlink_target(entry.file_id)
84
78
        fileobj = None
85
79
    else:
86
 
        raise errors.BzrError("don't know how to export {%s} of kind %r" %
87
 
                       (ie.file_id, ie.kind))
 
80
        raise errors.BzrError("don't know how to export {%s} of kind %r" % (entry.file_id, entry.kind))
 
81
    
88
82
    return (item, fileobj)
89
83
 
90
 
 
91
 
def export_tarball(tree, ball, root, subdir=None, filtered=False,
92
 
                   force_mtime=None):
 
84
def export_tarball(tree, ball, root, subdir=None, filtered=False, force_mtime=None):
93
85
    """Export tree contents to a tarball. This is a generator.
94
86
 
95
87
    :param tree: Tree to export
99
91
    :param force_mtime: Option mtime to force, instead of using
100
92
        tree timestamps.
101
93
    """
102
 
    for dp, ie in _export_iter_entries(tree, subdir):
 
94
    for final_path, entry in _export_iter_entries(tree, subdir):
103
95
 
104
 
        (item, fileobj) = export_tarball_item(tree, ball, root, dp, ie, subdir, filtered, force_mtime)
 
96
        (item, fileobj) = export_tarball_item(tree, root, final_path, entry, filtered, force_mtime)
105
97
        ball.addfile(item, fileobj)
106
 
        yield
107
 
 
108
 
    
 
98
        
 
99
        yield    
109
100
 
110
101
def tgz_exporter(tree, dest, root, subdir, filtered=False, force_mtime=None,
111
102
                 per_file_timestamps=False, fileobj=None):