83
84
- produced from a revision
85
86
- loaded from a stream
86
87
- compared to a revision
90
def from_revision(cls, branch, revision_id):
91
def from_revision(cls, repository, revision_id):
91
92
"""Produce a new testament from a historical revision"""
93
rev = branch.get_revision(revision_id)
94
t.revision_id = str(revision_id)
95
t.committer = rev.committer
96
t.timezone = rev.timezone or 0
97
t.timestamp = rev.timestamp
98
t.message = rev.message
99
t.parent_ids = rev.parent_ids[:]
100
t.inventory = branch.get_inventory(revision_id)
101
assert not contains_whitespace(t.revision_id)
102
assert not contains_linebreaks(t.committer)
93
rev = repository.get_revision(revision_id)
94
inventory = repository.get_inventory(revision_id)
95
return cls(rev, inventory)
97
def __init__(self, rev, inventory):
98
"""Create a new testament for rev using inventory."""
99
self.revision_id = str(rev.revision_id)
100
self.committer = rev.committer
101
self.timezone = rev.timezone or 0
102
self.timestamp = rev.timestamp
103
self.message = rev.message
104
self.parent_ids = rev.parent_ids[:]
105
self.inventory = inventory
106
self.revprops = copy(rev.properties)
107
assert not contains_whitespace(self.revision_id)
108
assert not contains_linebreaks(self.committer)
105
110
def as_text_lines(self):
106
111
"""Yield text form as a sequence of lines.
127
132
a('inventory:\n')
128
133
for path, ie in self.inventory.iter_entries():
129
134
a(self._entry_to_line(path, ie))
135
r.extend(self._revprops_to_lines())
132
assert isinstance(l, str), \
138
assert isinstance(l, basestring), \
133
139
'%r of type %s is not a plain string' % (l, type(l))
166
172
% (self.revision_id, s.hexdigest()))
174
def _revprops_to_lines(self):
175
"""Pack up revision properties."""
176
if not self.revprops:
178
r = ['properties:\n']
179
for name, value in sorted(self.revprops.items()):
180
assert isinstance(name, str)
181
assert not contains_whitespace(name)
182
r.append(' %s:\n' % name)
183
for line in value.splitlines():
184
if not isinstance(line, str):
185
line = line.encode('utf-8')
186
r.append(' %s\n' % line)