92
93
long_header = 'bazaar-ng testament version 1\n'
93
94
short_header = 'bazaar-ng testament short form 1\n'
96
98
def from_revision(cls, repository, revision_id):
97
"""Produce a new testament from a historical revision"""
99
"""Produce a new testament from a historical revision."""
98
100
rev = repository.get_revision(revision_id)
99
inventory = repository.get_inventory(revision_id)
100
return cls(rev, inventory)
102
def __init__(self, rev, inventory):
103
"""Create a new testament for rev using inventory."""
101
tree = repository.revision_tree(revision_id)
102
return cls(rev, tree)
105
def from_revision_tree(cls, tree):
106
"""Produce a new testament from a revision tree."""
107
rev = tree._repository.get_revision(tree.get_revision_id())
108
return cls(rev, tree)
110
def __init__(self, rev, tree):
111
"""Create a new testament for rev using tree."""
104
112
self.revision_id = rev.revision_id
105
113
self.committer = rev.committer
106
114
self.timezone = rev.timezone or 0
107
115
self.timestamp = rev.timestamp
108
116
self.message = rev.message
109
117
self.parent_ids = rev.parent_ids[:]
110
self.inventory = inventory
118
if not isinstance(tree, Tree):
119
raise TypeError("As of bzr 2.4 Testament.__init__() takes a "
120
"Revision and a Tree.")
111
122
self.revprops = copy(rev.properties)
112
123
if contains_whitespace(self.revision_id):
113
124
raise ValueError(self.revision_id)
143
154
return [line.encode('utf-8') for line in r]
145
156
def _get_entries(self):
146
entries = self.inventory.iter_entries()
157
return ((path, ie) for (path, versioned, kind, file_id, ie) in
158
self.tree.list_files(include_root=self.include_root))
150
160
def _escape_path(self, path):
151
161
if contains_linebreaks(path):
210
218
long_header = 'bazaar-ng testament version 2.1\n'
211
219
short_header = 'bazaar-ng testament short form 2.1\n'
212
221
def _entry_to_line(self, path, ie):
213
222
l = Testament._entry_to_line(self, path, ie)[:-1]
214
223
l += ' ' + ie.revision
225
234
long_header = 'bazaar testament version 3 strict\n'
226
235
short_header = 'bazaar testament short form 3 strict\n'
227
def _get_entries(self):
228
return self.inventory.iter_entries()
230
238
def _escape_path(self, path):
231
239
if contains_linebreaks(path):