~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/testament.py

Late bind to PatienceSequenceMatcher to allow plugin to override.

Show diffs side-by-side

added added

removed removed

Lines of Context:
87
87
      - compared to a revision
88
88
    """
89
89
 
90
 
    long_header = 'bazaar-ng testament version 1\n'
91
 
    short_header = 'bazaar-ng testament short form 1\n'
92
 
 
93
90
    @classmethod
94
91
    def from_revision(cls, repository, revision_id):
95
92
        """Produce a new testament from a historical revision"""
118
115
        """
119
116
        r = []
120
117
        a = r.append
121
 
        a(self.long_header)
 
118
        a('bazaar-ng testament version 1\n')
122
119
        a('revision-id: %s\n' % self.revision_id)
123
120
        a('committer: %s\n' % self.committer)
124
121
        a('timestamp: %d\n' % self.timestamp)
132
129
        for l in self.message.splitlines():
133
130
            a('  %s\n' % l)
134
131
        a('inventory:\n')
135
 
        entries = self.inventory.iter_entries()
136
 
        entries.next()
137
 
        for path, ie in entries:
 
132
        for path, ie in self.inventory.iter_entries():
138
133
            a(self._entry_to_line(path, ie))
139
134
        r.extend(self._revprops_to_lines())
140
135
        if __debug__:
161
156
            assert ie.symlink_target
162
157
            l += ' ' + self._escape_path(ie.symlink_target)
163
158
        l += '\n'
164
 
        return l.decode('utf-8')
 
159
        return l
165
160
 
166
161
    def as_text(self):
167
162
        return ''.join(self.as_text_lines())
168
163
 
169
164
    def as_short_text(self):
170
165
        """Return short digest-based testament."""
171
 
        return (self.short_header + 
 
166
        s = sha()
 
167
        map(s.update, self.as_text_lines())
 
168
        return ('bazaar-ng testament short form 1\n'
172
169
                'revision-id: %s\n'
173
170
                'sha1: %s\n'
174
 
                % (self.revision_id, self.as_sha1()))
 
171
                % (self.revision_id, s.hexdigest()))
175
172
 
176
173
    def _revprops_to_lines(self):
177
174
        """Pack up revision properties."""
187
184
                    line = line.encode('utf-8')
188
185
                r.append('    %s\n' % line)
189
186
        return r
190
 
 
191
 
    def as_sha1(self):
192
 
        s = sha()
193
 
        map(s.update, self.as_text_lines())
194
 
        return s.hexdigest()
195
 
 
196
 
 
197
 
class StrictTestament(Testament):
198
 
    """This testament format is for use as a checksum in changesets"""
199
 
 
200
 
    long_header = 'bazaar-ng testament version 2.1\n'
201
 
    short_header = 'bazaar-ng testament short form 2.1\n'
202
 
    def _entry_to_line(self, path, ie):
203
 
        l = Testament._entry_to_line(self, path, ie)[:-1]
204
 
        l += ' ' + ie.revision.decode('utf-8')
205
 
        l += {True: ' yes\n', False: ' no\n'}[ie.executable]
206
 
        return l