1
# Copyright (C) 2005-2010 Canonical Ltd
1
# Copyright (C) 2005 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
19
19
Such as non-controlled directories, tarfiles, zipfiles, etc.
22
from bzrlib.trace import mutter
23
24
import bzrlib.errors as errors
55
56
When requesting a specific type of export, load the respective path.
57
def _loader(tree, dest, root, subdir, filtered, per_file_timestamps):
58
def _loader(tree, dest, root, subdir, filtered):
58
59
mod = __import__(module, globals(), locals(), [funcname])
59
60
func = getattr(mod, funcname)
60
return func(tree, dest, root, subdir, filtered=filtered,
61
per_file_timestamps=per_file_timestamps)
61
return func(tree, dest, root, subdir, filtered=filtered)
62
62
register_exporter(scheme, extensions, _loader)
65
def export(tree, dest, format=None, root=None, subdir=None, filtered=False,
66
per_file_timestamps=False):
65
def export(tree, dest, format=None, root=None, subdir=None, filtered=False):
67
66
"""Export the given Tree to the specific destination.
69
68
:param tree: A Tree (such as RevisionTree) to export
82
81
a directory to start exporting from.
83
82
:param filtered: If True, content filtering is applied to the
85
:param per_file_timestamps: Whether to use the timestamp stored in the
86
tree rather than now(). This will do a revision lookup
87
for every file so will be significantly slower.
89
85
global _exporters, _exporter_extensions
103
99
raise errors.NoSuchExportFormat(format)
106
return _exporters[format](tree, dest, root, subdir, filtered=filtered,
107
per_file_timestamps=per_file_timestamps)
102
return _exporters[format](tree, dest, root, subdir, filtered=filtered)
143
138
"""Iter the entries for tree suitable for exporting.
145
140
:param tree: A tree object.
146
:param subdir: None or the path of an entry to start exporting from.
141
:param subdir: None or the path of a directory to start exporting from.
148
143
inv = tree.inventory
149
144
if subdir is None:
152
147
subdir_id = inv.path2id(subdir)
153
if subdir_id is not None:
154
subdir_object = inv[subdir_id]
155
# XXX: subdir is path not an id, so NoSuchId isn't proper error
157
raise errors.NoSuchId(tree, subdir)
158
if subdir_object is not None and subdir_object.kind != 'directory':
159
yield subdir_object.name, subdir_object
162
entries = inv.iter_entries(subdir_object)
148
entries = inv.iter_entries(subdir_id)
163
149
if subdir is None:
164
150
entries.next() # skip root
165
151
for entry in entries: