~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/testament.py

  • Committer: John Arbash Meinel
  • Date: 2006-08-17 13:53:36 UTC
  • mfrom: (1939 +trunk)
  • mto: This revision was merged to the branch mainline in revision 1940.
  • Revision ID: john@arbash-meinel.com-20060817135336-100de82962355d3b
[merge] bzr.dev 1939

Show diffs side-by-side

added added

removed removed

Lines of Context:
70
70
# revisions can be serialized.
71
71
 
72
72
from copy import copy
73
 
from cStringIO import StringIO
74
 
import string
75
73
from sha import sha
76
74
 
77
75
from bzrlib.osutils import contains_whitespace, contains_linebreaks
78
76
 
 
77
 
79
78
class Testament(object):
80
79
    """Reduced summary of a revision.
81
80
 
145
144
 
146
145
    def _escape_path(self, path):
147
146
        assert not contains_linebreaks(path)
148
 
        return unicode(path.replace('\\', '/').replace(' ', '\ ')).encode('utf-8')
 
147
        return unicode(path.replace('\\', '/').replace(' ', '\ '))
149
148
 
150
149
    def _entry_to_line(self, path, ie):
151
150
        """Turn an inventory entry into a testament line"""
152
 
        l = '  ' + str(ie.kind)
153
 
        l += ' ' + self._escape_path(path)
154
151
        assert not contains_whitespace(ie.file_id)
155
 
        l += ' ' + unicode(ie.file_id).encode('utf-8')
 
152
 
 
153
        content = ''
 
154
        content_spacer=''
156
155
        if ie.kind == 'file':
157
156
            # TODO: avoid switching on kind
158
157
            assert ie.text_sha1
159
 
            l += ' ' + ie.text_sha1
 
158
            content = ie.text_sha1
 
159
            content_spacer = ' '
160
160
        elif ie.kind == 'symlink':
161
161
            assert ie.symlink_target
162
 
            l += ' ' + self._escape_path(ie.symlink_target)
163
 
        l += '\n'
164
 
        return l.decode('utf-8')
 
162
            content = self._escape_path(ie.symlink_target)
 
163
            content_spacer = ' '
 
164
 
 
165
        l = u'  %s %s %s%s%s\n' % (ie.kind, self._escape_path(path),
 
166
                                   unicode(ie.file_id),
 
167
                                   content_spacer, content)
 
168
        return l
165
169
 
166
170
    def as_text(self):
167
171
        return ''.join(self.as_text_lines())
183
187
            assert not contains_whitespace(name)
184
188
            r.append('  %s:\n' % name)
185
189
            for line in value.splitlines():
186
 
                if not isinstance(line, str):
187
 
                    line = line.encode('utf-8')
188
 
                r.append('    %s\n' % line)
 
190
                r.append(u'    %s\n' % line)
189
191
        return r
190
192
 
191
193
    def as_sha1(self):
201
203
    short_header = 'bazaar-ng testament short form 2.1\n'
202
204
    def _entry_to_line(self, path, ie):
203
205
        l = Testament._entry_to_line(self, path, ie)[:-1]
204
 
        l += ' ' + ie.revision.decode('utf-8')
 
206
        l += ' ' + ie.revision
205
207
        l += {True: ' yes\n', False: ' no\n'}[ie.executable]
206
208
        return l