~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/export/tar_exporter.py

Cleaned up export_tarball_item.

Show diffs side-by-side

added added

removed removed

Lines of Context:
34
34
 
35
35
def export_tarball_item(tree, ball, root, dp, ie, subdir=None, filtered=False,
36
36
                   force_mtime=None):
37
 
    
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
42
 
        else:
43
 
            item.mtime = tree.get_file_mtime(ie.file_id, dp)
44
 
        if ie.kind == "file":
45
 
            item.type = tarfile.REGTYPE
46
 
            if tree.is_executable(ie.file_id):
47
 
                item.mode = 0755
48
 
            else:
49
 
                item.mode = 0644
50
 
            if filtered:
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)
58
 
            else:
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
63
 
            item.name += '/'
64
 
            item.size = 0
65
 
            item.mode = 0755
66
 
            fileobj = None
67
 
        elif ie.kind == "symlink":
68
 
            item.type = tarfile.SYMTYPE
69
 
            item.size = 0
70
 
            item.mode = 0755
71
 
            item.linkname = tree.get_symlink_target(ie.file_id)
72
 
            fileobj = None
73
 
        else:
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
 
38
        
 
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
 
46
        tree timestamps.
 
47
    """
 
48
    
 
49
    
 
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
 
54
    else:
 
55
        item.mtime = tree.get_file_mtime(ie.file_id, dp)
 
56
    if ie.kind == "file":
 
57
        item.type = tarfile.REGTYPE
 
58
        if tree.is_executable(ie.file_id):
 
59
            item.mode = 0755
 
60
        else:
 
61
            item.mode = 0644
 
62
        if filtered:
 
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)
 
70
        else:
 
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
 
75
        item.name += '/'
 
76
        item.size = 0
 
77
        item.mode = 0755
 
78
        fileobj = None
 
79
    elif ie.kind == "symlink":
 
80
        item.type = tarfile.SYMTYPE
 
81
        item.size = 0
 
82
        item.mode = 0755
 
83
        item.linkname = tree.get_symlink_target(ie.file_id)
 
84
        fileobj = None
 
85
    else:
 
86
        raise errors.BzrError("don't know how to export {%s} of kind %r" %
 
87
                       (ie.file_id, ie.kind))
 
88
    return (item, fileobj)
77
89
 
78
90
 
79
91
def export_tarball(tree, ball, root, subdir=None, filtered=False,