Merge lp:~vila/bzr/tarball-generator into lp:~xaav/bzr/tarball-generator

Proposed by xaav
Status: Merged
Approved by: xaav
Approved revision: no longer in the source branch.
Merged at revision: 5975
Proposed branch: lp:~vila/bzr/tarball-generator
Merge into: lp:~xaav/bzr/tarball-generator
Diff against target: 409 lines (+127/-99)
3 files modified
bzrlib/export/__init__.py (+41/-26)
bzrlib/export/dir_exporter.py (+4/-3)
bzrlib/export/tar_exporter.py (+82/-70)
To merge this branch: bzr merge lp:~vila/bzr/tarball-generator
Reviewer Review Type Date Requested Status
xaav Approve
Review via email: mp+63557@code.launchpad.net
To post a comment you must log in.
Revision history for this message
xaav (xaav) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'bzrlib/export/__init__.py'
2--- bzrlib/export/__init__.py 2011-06-06 04:24:34 +0000
3+++ bzrlib/export/__init__.py 2011-06-06 14:48:49 +0000
4@@ -66,30 +66,36 @@
5 register_exporter(scheme, extensions, _loader)
6
7 def get_export_generator(tree, dest=None, format=None, root=None, subdir=None,
8- filtered=False, per_file_timestamps=False, fileobj=None):
9- """Returns a generator that exports the given tree to the specific destination.
10+ filtered=False, per_file_timestamps=False,
11+ fileobj=None):
12+ """Returns a generator that exports the given tree.
13
14- The generator is expected to yield None while exporting the tree
15+ The generator is expected to yield None while exporting the tree while the
16+ actual export is written to ``fileobj``.
17
18 :param tree: A Tree (such as RevisionTree) to export
19- :param dest: The destination where the files,etc should be put
20+
21+ :param dest: The destination where the files, etc should be put
22+
23 :param format: The format (dir, zip, etc), if None, it will check the
24- extension on dest, looking for a match
25- :param root: The root location inside the format.
26- It is common practise to have zipfiles and tarballs
27- extract into a subdirectory, rather than into the
28- current working directory.
29- If root is None, the default root will be
30- selected as the destination without its
31- extension.
32+ extension on dest, looking for a match
33+
34+ :param root: The root location inside the format. It is common practise to
35+ have zipfiles and tarballs extract into a subdirectory, rather than
36+ into the current working directory. If root is None, the default root
37+ will be selected as the destination without its extension.
38+
39 :param subdir: A starting directory within the tree. None means to export
40 the entire tree, and anything else should specify the relative path to
41 a directory to start exporting from.
42- :param filtered: If True, content filtering is applied to the
43- files exported.
44- :param per_file_timestamps: Whether to use the timestamp stored in the
45- tree rather than now(). This will do a revision lookup
46- for every file so will be significantly slower.
47+
48+ :param filtered: If True, content filtering is applied to the exported
49+ files.
50+
51+ :param per_file_timestamps: Whether to use the timestamp stored in the tree
52+ rather than now(). This will do a revision lookup for every file so
53+ will be significantly slower.
54+
55 :param fileobj: Optional file object to use
56 """
57 global _exporters, _exporter_extensions
58@@ -118,7 +124,8 @@
59 try:
60 tree.lock_read()
61
62- for _ in _exporters[format](tree, dest, root, subdir, filtered=filtered,
63+ for _ in _exporters[format](tree, dest, root, subdir,
64+ filtered=filtered,
65 force_mtime=force_mtime, fileobj=fileobj):
66
67 yield
68@@ -206,12 +213,20 @@
69 yield final_path, entry
70
71
72-register_lazy_exporter(None, [], 'bzrlib.export.dir_exporter', 'dir_exporter_generator')
73-register_lazy_exporter('dir', [], 'bzrlib.export.dir_exporter', 'dir_exporter_generator')
74-register_lazy_exporter('tar', ['.tar'], 'bzrlib.export.tar_exporter', 'plain_tar_exporter_generator')
75-register_lazy_exporter('tgz', ['.tar.gz', '.tgz'], 'bzrlib.export.tar_exporter', 'tgz_exporter_generator')
76-register_lazy_exporter('tbz2', ['.tar.bz2', '.tbz2'], 'bzrlib.export.tar_exporter', 'tbz_exporter_generator')
77-register_lazy_exporter('tlzma', ['.tar.lzma'], 'bzrlib.export.tar_exporter', 'tar_lzma_exporter_generator')
78-register_lazy_exporter('txz', ['.tar.xz'], 'bzrlib.export.tar_exporter', 'tar_xz_exporte_generatorr')
79-register_lazy_exporter('zip', ['.zip'], 'bzrlib.export.zip_exporter', 'zip_exporter_generator')
80+register_lazy_exporter(None, [], 'bzrlib.export.dir_exporter',
81+ 'dir_exporter_generator')
82+register_lazy_exporter('dir', [], 'bzrlib.export.dir_exporter',
83+ 'dir_exporter_generator')
84+register_lazy_exporter('tar', ['.tar'], 'bzrlib.export.tar_exporter',
85+ 'plain_tar_exporter_generator')
86+register_lazy_exporter('tgz', ['.tar.gz', '.tgz'], 'bzrlib.export.tar_exporter',
87+ 'tgz_exporter_generator')
88+register_lazy_exporter('tbz2', ['.tar.bz2', '.tbz2'],
89+ 'bzrlib.export.tar_exporter', 'tbz_exporter_generator')
90+register_lazy_exporter('tlzma', ['.tar.lzma'], 'bzrlib.export.tar_exporter',
91+ 'tar_lzma_exporter_generator')
92+register_lazy_exporter('txz', ['.tar.xz'], 'bzrlib.export.tar_exporter',
93+ 'tar_xz_exporte_generatorr')
94+register_lazy_exporter('zip', ['.zip'], 'bzrlib.export.zip_exporter',
95+ 'zip_exporter_generator')
96
97
98=== modified file 'bzrlib/export/dir_exporter.py'
99--- bzrlib/export/dir_exporter.py 2011-06-03 17:37:56 +0000
100+++ bzrlib/export/dir_exporter.py 2011-06-06 14:48:49 +0000
101@@ -27,7 +27,7 @@
102 )
103
104
105-def dir_exporter_generator(tree, dest, root, subdir=None, filtered=False,
106+def dir_exporter_generator(tree, dest, root, subdir=None, filtered=False,
107 force_mtime=None, fileobj=None):
108 """Return a generator that exports this tree to a new directory.
109
110@@ -45,7 +45,8 @@
111 if e.errno == errno.EEXIST:
112 # check if directory empty
113 if os.listdir(dest) != []:
114- raise errors.BzrError("Can't export tree to non-empty directory.")
115+ raise errors.BzrError(
116+ "Can't export tree to non-empty directory.")
117 else:
118 raise
119 # Iterate everything, building up the files we will want to export, and
120@@ -105,4 +106,4 @@
121
122 for _ in dir_exporter_generator(tree, dest, root, subdir, filtered,
123 force_mtime, fileobj):
124- pass
125\ No newline at end of file
126+ pass
127
128=== modified file 'bzrlib/export/tar_exporter.py'
129--- bzrlib/export/tar_exporter.py 2011-06-03 17:33:02 +0000
130+++ bzrlib/export/tar_exporter.py 2011-06-06 14:48:49 +0000
131@@ -31,19 +31,22 @@
132 filtered_output_bytes,
133 )
134
135-def prepare_tarball_item(tree, root, final_path, entry, filtered=False,
136+def prepare_tarball_item(tree, root, final_path, entry, filtered=False,
137 force_mtime=None):
138 """Prepare a tarball item for exporting
139
140 :param tree: Tree to export
141+
142 :param final_path: Final path to place item
143+
144 :param entry: Entry to export
145+
146 :param filtered: Whether to apply filters
147+
148 :param force_mtime: Option mtime to force, instead of using tree timestamps.
149
150 Returns a (tarinfo, fileobj) tuple
151 """
152-
153 filename = osutils.pathjoin(root, final_path).encode('utf8')
154 item = tarfile.TarInfo(filename)
155 if force_mtime is not None:
156@@ -85,40 +88,45 @@
157
158 return (item, fileobj)
159
160-def export_tarball_generator(tree, ball, root, subdir=None, filtered=False,
161+def export_tarball_generator(tree, ball, root, subdir=None, filtered=False,
162 force_mtime=None):
163 """Export tree contents to a tarball. This is a generator.
164
165 :param tree: Tree to export
166+
167 :param ball: Tarball to export to
168+
169 :param filtered: Whether to apply filters
170+
171 :param subdir: Sub directory to export
172- :param force_mtime: Option mtime to force, instead of using
173- tree timestamps.
174+
175+ :param force_mtime: Option mtime to force, instead of using tree
176+ timestamps.
177 """
178 for final_path, entry in _export_iter_entries(tree, subdir):
179
180- (item, fileobj) = prepare_tarball_item(tree, root, final_path,
181+ (item, fileobj) = prepare_tarball_item(tree, root, final_path,
182 entry, filtered, force_mtime)
183 ball.addfile(item, fileobj)
184-
185- yield
186-
187-def export_tarball(tree, ball, root, subdir=None, filtered=False, force_mtime=None):
188-
189- for _ in export_tarball_generator(tree, ball, root, subdir, filtered, force_mtime):
190-
191+
192+ yield
193+
194+
195+def export_tarball(tree, ball, root, subdir=None, filtered=False,
196+ force_mtime=None):
197+
198+ for _ in export_tarball_generator(tree, ball, root, subdir, filtered,
199+ force_mtime):
200 pass
201
202-def tgz_exporter_generator(tree, dest, root, subdir, filtered=False, force_mtime=None,
203- fileobj=None):
204+def tgz_exporter_generator(tree, dest, root, subdir, filtered=False,
205+ force_mtime=None, fileobj=None):
206 """Export this tree to a new tar file.
207
208 `dest` will be created holding the contents of this tree; if it
209 already exists, it will be clobbered, like with "tar -c".
210 """
211 import gzip
212-
213 if force_mtime is not None:
214 root_mtime = force_mtime
215 elif (getattr(tree, "repository", None) and
216@@ -132,7 +140,6 @@
217 root_mtime = None
218
219 is_stdout = False
220-
221 if fileobj is not None:
222 stream = fileobj
223 elif dest == '-':
224@@ -146,32 +153,33 @@
225 # dest. (bug 102234)
226 basename = os.path.basename(dest)
227 try:
228- zipstream = gzip.GzipFile(basename, 'w', fileobj=stream,
229+ zipstream = gzip.GzipFile(basename, 'w', fileobj=stream,
230 mtime=root_mtime)
231 except TypeError:
232 # Python < 2.7 doesn't support the mtime argument
233 zipstream = gzip.GzipFile(basename, 'w', fileobj=stream)
234 ball = tarfile.open(None, 'w|', fileobj=zipstream)
235
236- for _ in export_tarball_generator(tree, ball, root, subdir, filtered, force_mtime):
237-
238+ for _ in export_tarball_generator(tree, ball, root, subdir, filtered,
239+ force_mtime):
240+
241 yield
242
243 zipstream.close()
244-
245 if not is_stdout:
246 stream.close()
247-
248-def tgz_exporter(tree, dest, root, subdir, filtered=False, force_mtime=None, fileobj=None):
249-
250- for _ in tgz_exporter_generator(tree, dest, root, subdir, filtered, force_mtime,
251- fileobj):
252-
253+
254+
255+def tgz_exporter(tree, dest, root, subdir, filtered=False, force_mtime=None,
256+ fileobj=None):
257+
258+ for _ in tgz_exporter_generator(tree, dest, root, subdir, filtered,
259+ force_mtime, fileobj):
260 pass
261
262
263-def tbz_exporter_generator(tree, dest, root, subdir, filtered=False, force_mtime=None,
264- fileobj=None):
265+def tbz_exporter_generator(tree, dest, root, subdir, filtered=False,
266+ force_mtime=None, fileobj=None):
267 """Export this tree to a new tar file.
268
269 `dest` will be created holding the contents of this tree; if it
270@@ -189,76 +197,80 @@
271 # (fixed in Python 2.6.5 and 2.7b1)
272 ball = tarfile.open(dest.encode(osutils._fs_enc), 'w:bz2')
273
274- for _ in export_tarball_generator(tree, ball, root, subdir, filtered, force_mtime):
275-
276+ for _ in export_tarball_generator(tree, ball, root, subdir, filtered,
277+ force_mtime):
278 yield
279
280 ball.close()
281-
282+
283+
284 def tbz_exporter(tree, dest, root, subdir, filtered=False, force_mtime=None,
285 fileobj=None):
286-
287- for _ in tbz_exporter_generator(tree, dest, root, subdir, filtered, force_mtime,
288- fileobj):
289+
290+ for _ in tbz_exporter_generator(tree, dest, root, subdir, filtered,
291+ force_mtime, fileobj):
292 pass
293
294
295-def plain_tar_exporter_generator(tree, dest, root, subdir, compression=None, filtered=False,
296- force_mtime=None, fileobj=None):
297+def plain_tar_exporter_generator(tree, dest, root, subdir, compression=None,
298+ filtered=False, force_mtime=None,
299+ fileobj=None):
300 """Export this tree to a new tar file.
301
302 `dest` will be created holding the contents of this tree; if it
303 already exists, it will be clobbered, like with "tar -c".
304 """
305 if fileobj is not None:
306- stream = fileobj
307+ stream = fileobj
308 elif dest == '-':
309 stream = sys.stdout
310 else:
311 stream = open(dest, 'wb')
312 ball = tarfile.open(None, 'w|', stream)
313
314- for _ in export_tarball_generator(tree, ball, root, subdir, filtered, force_mtime):
315+ for _ in export_tarball_generator(tree, ball, root, subdir, filtered,
316+ force_mtime):
317
318 yield
319
320 ball.close()
321-
322-def plain_tar_exporter(tree, dest, root, subdir, compression=None, filtered=False,
323- force_mtime=None, fileobj=None):
324-
325- for _ in plain_tar_exporter_generator(tree, dest, root, subdir, compression,
326- filtered, force_mtime, fileobj):
327- pass
328-
329-
330-def tar_xz_exporter_generator(tree, dest, root, subdir, filtered=False, force_mtime=None,
331- fileobj=None):
332-
333- return tar_lzma_exporter_generator(tree, dest, root, subdir, filtered, force_mtime,
334- fileobj, "xz")
335-
336+
337+def plain_tar_exporter(tree, dest, root, subdir, compression=None,
338+ filtered=False, force_mtime=None, fileobj=None):
339+
340+ for _ in plain_tar_exporter_generator(
341+ tree, dest, root, subdir, compression, filtered, force_mtime, fileobj):
342+ pass
343+
344+
345+def tar_xz_exporter_generator(tree, dest, root, subdir, filtered=False,
346+ force_mtime=None, fileobj=None):
347+
348+ return tar_lzma_exporter_generator(tree, dest, root, subdir, filtered,
349+ force_mtime, fileobj, "xz")
350+
351+
352 def tar_xz_exporter(tree, dest, root, subdir, filtered=False, force_mtime=None,
353 fileobj=None):
354- for _ in tar_xz_exporter_generator(tree, dest, root, subdir, filtered, force_mtime,
355- fileobj):
356+ for _ in tar_xz_exporter_generator(tree, dest, root, subdir, filtered,
357+ force_mtime, fileobj):
358 pass
359
360
361-def tar_lzma_exporter_generator(tree, dest, root, subdir, filtered=False,
362- force_mtime=None, fileobj=None, compression_format="alone"):
363+def tar_lzma_exporter_generator(tree, dest, root, subdir, filtered=False,
364+ force_mtime=None, fileobj=None,
365+ compression_format="alone"):
366 """Export this tree to a new .tar.lzma file.
367
368 `dest` will be created holding the contents of this tree; if it
369 already exists, it will be clobbered, like with "tar -c".
370 """
371-
372 if dest == '-':
373 raise errors.BzrError("Writing to stdout not supported for .tar.lzma")
374
375 if fileobj is not None:
376- raise errors.BzrError("Writing to fileobject not supported for .tar.lzma")
377-
378+ raise errors.BzrError(
379+ "Writing to fileobject not supported for .tar.lzma")
380 try:
381 import lzma
382 except ImportError, e:
383@@ -268,17 +280,17 @@
384 options={"format": compression_format})
385 ball = tarfile.open(None, 'w:', fileobj=stream)
386
387- for _ in export_tarball_generator(tree, ball, root, subdir, filtered=filtered,
388- force_mtime=force_mtime):
389-
390+ for _ in export_tarball_generator(
391+ tree, ball, root, subdir, filtered=filtered, force_mtime=force_mtime):
392 yield
393
394 ball.close()
395
396-def tar_lzma_exporter(tree, dest, root, subdir, filtered=False, force_mtime=None,
397- fileobj=None, compression_format="alone"):
398-
399- for _ in tar_lzma_exporter_generator(tree, dest, root, subdir, filtered, force_mtime,
400- fileobj, compression_format):
401-
402+
403+def tar_lzma_exporter(tree, dest, root, subdir, filtered=False,
404+ force_mtime=None, fileobj=None,
405+ compression_format="alone"):
406+ for _ in tar_lzma_exporter_generator(tree, dest, root, subdir, filtered,
407+ force_mtime, fileobj,
408+ compression_format):
409 pass

Subscribers

People subscribed via source and target branches

to all changes: