~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/export/tar_exporter.py

Major code cleanup.

Show diffs side-by-side

added added

removed removed

Lines of Context:
98
98
        
99
99
        yield    
100
100
 
101
 
def tgz_exporter(tree, dest, root, subdir, filtered=False, force_mtime=None,
102
 
                 per_file_timestamps=False, fileobj=None):
 
101
def tgz_exporter(tree, dest, root, subdir, filtered=False, force_mtime=None, per_file_timestamps=False, fileobj=None):
103
102
    """Export this tree to a new tar file.
104
103
 
105
104
    `dest` will be created holding the contents of this tree; if it
106
105
    already exists, it will be clobbered, like with "tar -c".
107
106
    """
108
107
    import gzip
 
108
    
109
109
    if force_mtime is not None:
110
110
        root_mtime = force_mtime
111
111
    elif (getattr(tree, "repository", None) and
119
119
        root_mtime = None
120
120
 
121
121
    is_stdout = False
 
122
    
122
123
    if fileobj is not None:
123
124
        stream = fileobj
124
125
    elif dest == '-':
137
138
        # Python < 2.7 doesn't support the mtime argument
138
139
        zipstream = gzip.GzipFile(basename, 'w', fileobj=stream)
139
140
    ball = tarfile.open(None, 'w|', fileobj=zipstream)
140
 
    try:
141
 
        return export_tarball(tree, ball, root, subdir, filtered=filtered, force_mtime=force_mtime)
142
 
    finally:
143
 
        zipstream.close()
144
 
        if not is_stdout:
145
 
            stream.close()
 
141
 
 
142
    for _ in export_tarball(tree, ball, root, subdir, filtered, force_mtime):
 
143
        
 
144
        yield
 
145
 
 
146
    zipstream.close()
 
147
    
 
148
    if not is_stdout:
 
149
        stream.close()
146
150
 
147
151
 
148
152
def tbz_exporter(tree, dest, root, subdir, filtered=False, force_mtime=None,
163
167
        # upstream python bug http://bugs.python.org/issue8396
164
168
        # (fixed in Python 2.6.5 and 2.7b1)
165
169
        ball = tarfile.open(dest.encode(osutils._fs_enc), 'w:bz2')
166
 
    try:
167
 
        return export_tarball(tree, ball, root, subdir, filtered=filtered, force_mtime=force_mtime)
168
 
    finally:
169
 
        ball.close()
 
170
 
 
171
    for _ in export_tarball(tree, ball, root, subdir, filtered, force_mtime):
 
172
        
 
173
        yield
 
174
 
 
175
    ball.close()
170
176
 
171
177
 
172
178
def plain_tar_exporter(tree, dest, root, subdir, compression=None, filtered=False, force_mtime=None,
183
189
    else:
184
190
        stream = open(dest, 'wb')
185
191
    ball = tarfile.open(None, 'w|', stream)
186
 
    try:
187
 
        export_tarball(tree, ball, root, subdir, filtered=filtered, force_mtime=force_mtime)
188
 
    finally:               
189
 
        ball.close()
190
 
 
191
 
 
192
 
def tar_xz_exporter(tree, dest, root, subdir, filtered=False, force_mtime=None,
193
 
                    per_file_timestamps=False, fileobj=None):
194
 
    return tar_lzma_exporter(tree, dest, root, subdir, filtered=filtered,
195
 
        force_mtime=force_mtime,per_file_timestamps=per_file_timestamps, fileobj=fileobj, compression_format="xz")
196
 
 
197
 
 
198
 
def tar_lzma_exporter(tree, dest, root, subdir, filtered=False, force_mtime=None,
199
 
                      per_file_timestamps=False, fileobj=None, compression_format="alone"):
 
192
 
 
193
    for _ in export_tarball(tree, ball, root, subdir, filtered, force_mtime):
 
194
 
 
195
        yield
 
196
 
 
197
    ball.close()
 
198
 
 
199
 
 
200
def tar_xz_exporter(tree, dest, root, subdir, filtered=False, force_mtime=None, per_file_timestamps=False, fileobj=None):
 
201
    
 
202
    return tar_lzma_exporter(tree, dest, root, subdir, filtered, force_mtime,per_file_timestamps, fileobj, "xz")
 
203
 
 
204
 
 
205
def tar_lzma_exporter(tree, dest, root, subdir, filtered=False, force_mtime=None, per_file_timestamps=False, fileobj=None, compression_format="alone"):
200
206
    """Export this tree to a new .tar.lzma file.
201
207
 
202
208
    `dest` will be created holding the contents of this tree; if it
203
209
    already exists, it will be clobbered, like with "tar -c".
204
210
    """
 
211
    
205
212
    if dest == '-':
206
213
        raise errors.BzrError("Writing to stdout not supported for .tar.lzma")
207
214
 
216
223
    stream = lzma.LZMAFile(dest.encode(osutils._fs_enc), 'w',
217
224
            options={"format": compression_format})
218
225
    ball = tarfile.open(None, 'w:', fileobj=stream)
219
 
    try:
220
 
        return export_tarball(tree, ball, root, subdir, filtered=filtered, force_mtime=force_mtime)
221
 
    finally:
222
 
        ball.close()
 
226
 
 
227
    for _ in export_tarball(tree, ball, root, subdir, filtered=filtered, force_mtime=force_mtime):
 
228
        
 
229
        yield
 
230
 
 
231
    ball.close()
223
232