86
89
return (item, fileobj)
88
def export_tarball_generator(tree, ball, root, subdir=None, filtered=False,
91
def export_tarball_generator(tree, ball, root, subdir=None, filtered=False,
90
93
"""Export tree contents to a tarball. This is a generator.
92
95
:param tree: Tree to export
93
97
:param ball: Tarball to export to
94
99
:param filtered: Whether to apply filters
95
101
:param subdir: Sub directory to export
96
:param force_mtime: Option mtime to force, instead of using
103
:param force_mtime: Option mtime to force, instead of using tree
99
106
for final_path, entry in _export_iter_entries(tree, subdir):
101
(item, fileobj) = prepare_tarball_item(tree, root, final_path,
108
(item, fileobj) = prepare_tarball_item(tree, root, final_path,
102
109
entry, filtered, force_mtime)
103
110
ball.addfile(item, fileobj)
107
def export_tarball(tree, ball, root, subdir=None, filtered=False, force_mtime=None):
109
for _ in export_tarball_generator(tree, ball, root, subdir, filtered, force_mtime):
115
def export_tarball(tree, ball, root, subdir=None, filtered=False,
118
for _ in export_tarball_generator(tree, ball, root, subdir, filtered,
113
def tgz_exporter_generator(tree, dest, root, subdir, filtered=False, force_mtime=None,
122
def tgz_exporter_generator(tree, dest, root, subdir, filtered=False,
123
force_mtime=None, fileobj=None):
115
124
"""Export this tree to a new tar file.
117
126
`dest` will be created holding the contents of this tree; if it
118
127
already exists, it will be clobbered, like with "tar -c".
122
130
if force_mtime is not None:
123
131
root_mtime = force_mtime
124
132
elif (getattr(tree, "repository", None) and
146
153
# dest. (bug 102234)
147
154
basename = os.path.basename(dest)
149
zipstream = gzip.GzipFile(basename, 'w', fileobj=stream,
156
zipstream = gzip.GzipFile(basename, 'w', fileobj=stream,
150
157
mtime=root_mtime)
151
158
except TypeError:
152
159
# Python < 2.7 doesn't support the mtime argument
153
160
zipstream = gzip.GzipFile(basename, 'w', fileobj=stream)
154
161
ball = tarfile.open(None, 'w|', fileobj=zipstream)
156
for _ in export_tarball_generator(tree, ball, root, subdir, filtered, force_mtime):
163
for _ in export_tarball_generator(tree, ball, root, subdir, filtered,
160
168
zipstream.close()
162
169
if not is_stdout:
165
def tgz_exporter(tree, dest, root, subdir, filtered=False, force_mtime=None, fileobj=None):
167
for _ in tgz_exporter_generator(tree, dest, root, subdir, filtered, force_mtime,
173
def tgz_exporter(tree, dest, root, subdir, filtered=False, force_mtime=None,
176
for _ in tgz_exporter_generator(tree, dest, root, subdir, filtered,
177
force_mtime, fileobj):
173
def tbz_exporter_generator(tree, dest, root, subdir, filtered=False, force_mtime=None,
181
def tbz_exporter_generator(tree, dest, root, subdir, filtered=False,
182
force_mtime=None, fileobj=None):
175
183
"""Export this tree to a new tar file.
177
185
`dest` will be created holding the contents of this tree; if it
189
197
# (fixed in Python 2.6.5 and 2.7b1)
190
198
ball = tarfile.open(dest.encode(osutils._fs_enc), 'w:bz2')
192
for _ in export_tarball_generator(tree, ball, root, subdir, filtered, force_mtime):
200
for _ in export_tarball_generator(tree, ball, root, subdir, filtered,
198
207
def tbz_exporter(tree, dest, root, subdir, filtered=False, force_mtime=None,
201
for _ in tbz_exporter_generator(tree, dest, root, subdir, filtered, force_mtime,
210
for _ in tbz_exporter_generator(tree, dest, root, subdir, filtered,
211
force_mtime, fileobj):
206
def plain_tar_exporter_generator(tree, dest, root, subdir, compression=None, filtered=False,
207
force_mtime=None, fileobj=None):
215
def plain_tar_exporter_generator(tree, dest, root, subdir, compression=None,
216
filtered=False, force_mtime=None,
208
218
"""Export this tree to a new tar file.
210
220
`dest` will be created holding the contents of this tree; if it
211
221
already exists, it will be clobbered, like with "tar -c".
213
223
if fileobj is not None:
215
225
elif dest == '-':
216
226
stream = sys.stdout
218
228
stream = open(dest, 'wb')
219
229
ball = tarfile.open(None, 'w|', stream)
221
for _ in export_tarball_generator(tree, ball, root, subdir, filtered, force_mtime):
231
for _ in export_tarball_generator(tree, ball, root, subdir, filtered,
227
def plain_tar_exporter(tree, dest, root, subdir, compression=None, filtered=False,
228
force_mtime=None, fileobj=None):
230
for _ in plain_tar_exporter_generator(tree, dest, root, subdir, compression,
231
filtered, force_mtime, fileobj):
235
def tar_xz_exporter_generator(tree, dest, root, subdir, filtered=False, force_mtime=None,
238
return tar_lzma_exporter_generator(tree, dest, root, subdir, filtered, force_mtime,
238
def plain_tar_exporter(tree, dest, root, subdir, compression=None,
239
filtered=False, force_mtime=None, fileobj=None):
241
for _ in plain_tar_exporter_generator(
242
tree, dest, root, subdir, compression, filtered, force_mtime, fileobj):
246
def tar_xz_exporter_generator(tree, dest, root, subdir, filtered=False,
247
force_mtime=None, fileobj=None):
249
return tar_lzma_exporter_generator(tree, dest, root, subdir, filtered,
250
force_mtime, fileobj, "xz")
241
253
def tar_xz_exporter(tree, dest, root, subdir, filtered=False, force_mtime=None,
243
for _ in tar_xz_exporter_generator(tree, dest, root, subdir, filtered, force_mtime,
255
for _ in tar_xz_exporter_generator(tree, dest, root, subdir, filtered,
256
force_mtime, fileobj):
248
def tar_lzma_exporter_generator(tree, dest, root, subdir, filtered=False,
249
force_mtime=None, fileobj=None, compression_format="alone"):
260
def tar_lzma_exporter_generator(tree, dest, root, subdir, filtered=False,
261
force_mtime=None, fileobj=None,
262
compression_format="alone"):
250
263
"""Export this tree to a new .tar.lzma file.
252
265
`dest` will be created holding the contents of this tree; if it
253
266
already exists, it will be clobbered, like with "tar -c".
257
269
raise errors.BzrError("Writing to stdout not supported for .tar.lzma")
259
271
if fileobj is not None:
260
raise errors.BzrError("Writing to fileobject not supported for .tar.lzma")
272
raise errors.BzrError(
273
"Writing to fileobject not supported for .tar.lzma")
264
276
except ImportError, e:
268
280
options={"format": compression_format})
269
281
ball = tarfile.open(None, 'w:', fileobj=stream)
271
for _ in export_tarball_generator(tree, ball, root, subdir, filtered=filtered,
272
force_mtime=force_mtime):
283
for _ in export_tarball_generator(
284
tree, ball, root, subdir, filtered=filtered, force_mtime=force_mtime):
278
def tar_lzma_exporter(tree, dest, root, subdir, filtered=False, force_mtime=None,
279
fileobj=None, compression_format="alone"):
281
for _ in tar_lzma_exporter_generator(tree, dest, root, subdir, filtered, force_mtime,
282
fileobj, compression_format):
290
def tar_lzma_exporter(tree, dest, root, subdir, filtered=False,
291
force_mtime=None, fileobj=None,
292
compression_format="alone"):
293
for _ in tar_lzma_exporter_generator(tree, dest, root, subdir, filtered,
294
force_mtime, fileobj,