/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/archive/tar.py

Merge test-run support.

Show diffs side-by-side

added added

removed removed

Lines of Context:
46
46
    Returns a (tarinfo, fileobj) tuple
47
47
    """
48
48
    file_id = getattr(entry, 'file_id', None)
49
 
    filename = osutils.pathjoin(root, final_path)
 
49
    filename = osutils.pathjoin(root, final_path).encode('utf8')
50
50
    item = tarfile.TarInfo(filename)
51
51
    if force_mtime is not None:
52
52
        item.mtime = force_mtime
53
53
    else:
54
 
        item.mtime = tree.get_file_mtime(tree_path)
 
54
        item.mtime = tree.get_file_mtime(tree_path, file_id)
55
55
    if entry.kind == "file":
56
56
        item.type = tarfile.REGTYPE
57
 
        if tree.is_executable(tree_path):
 
57
        if tree.is_executable(tree_path, file_id):
58
58
            item.mode = 0o755
59
59
        else:
60
60
            item.mode = 0o644
62
62
        # the tarfile contract, which wants the size of the file up front.  We
63
63
        # want to make sure it doesn't change, and we need to read it in one
64
64
        # go for content filtering.
65
 
        content = tree.get_file_text(tree_path)
 
65
        content = tree.get_file_text(tree_path, file_id)
66
66
        item.size = len(content)
67
67
        fileobj = BytesIO(content)
68
68
    elif entry.kind in ("directory", "tree-reference"):
75
75
        item.type = tarfile.SYMTYPE
76
76
        item.size = 0
77
77
        item.mode = 0o755
78
 
        item.linkname = tree.get_symlink_target(tree_path)
 
78
        item.linkname = tree.get_symlink_target(tree_path, file_id)
79
79
        fileobj = None
80
80
    else:
81
81
        raise errors.BzrError("don't know how to export {%s} of kind %r"
124
124
            rev = tree.repository.get_revision(tree.get_revision_id())
125
125
            root_mtime = rev.timestamp
126
126
        elif tree.is_versioned(u''):
127
 
            root_mtime = tree.get_file_mtime('')
 
127
            root_mtime = tree.get_file_mtime('', tree.get_root_id())
128
128
        else:
129
129
            root_mtime = None
130
130
 
137
137
        buf = BytesIO()
138
138
        zipstream = gzip.GzipFile(basename, 'w', fileobj=buf,
139
139
                                  mtime=root_mtime)
140
 
        for chunk in tarball_generator(tree, root, subdir, force_mtime):
 
140
        for chunk in tarball_generator(
 
141
            tree, root, subdir, force_mtime):
141
142
            zipstream.write(chunk)
142
143
            # Yield the data that was written so far, rinse, repeat.
143
144
            yield buf.getvalue()
159
160
 
160
161
 
161
162
def plain_tar_generator(tree, dest, root, subdir,
162
 
                        force_mtime=None):
 
163
    force_mtime=None):
163
164
    """Export this tree to a new tar file.
164
165
 
165
166
    `dest` will be created holding the contents of this tree; if it
187
188
 
188
189
    if sys.version_info[0] == 2:
189
190
        compressor = lzma.LZMACompressor(
190
 
            options={"format": compression_format})
 
191
                options={"format": compression_format})
191
192
    else:
192
 
        compressor = lzma.LZMACompressor(
193
 
            format={
194
 
                'xz': lzma.FORMAT_XZ,
195
 
                'raw': lzma.FORMAT_RAW,
196
 
                'alone': lzma.FORMAT_ALONE,
197
 
                }[compression_format])
 
193
        compressor = lzma.LZMACompressor(format=compression_format)
198
194
 
199
195
    for chunk in tarball_generator(
200
196
            tree, root, subdir, force_mtime=force_mtime):