/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/knit.py

  • Committer: John Arbash Meinel
  • Date: 2006-08-16 18:38:57 UTC
  • mfrom: (1934 +trunk)
  • mto: This revision was merged to the branch mainline in revision 1937.
  • Revision ID: john@arbash-meinel.com-20060816183857-7307edffa7098bd2
[merge] bzr.dev 1934

Show diffs side-by-side

added added

removed removed

Lines of Context:
74
74
import warnings
75
75
 
76
76
import bzrlib
77
 
import bzrlib.errors as errors
 
77
from bzrlib import (
 
78
    cache_utf8,
 
79
    errors,
 
80
    )
78
81
from bzrlib.errors import FileExists, NoSuchFile, KnitError, \
79
82
        InvalidRevisionId, KnitCorrupt, KnitHeaderError, \
80
83
        RevisionNotPresent, RevisionAlreadyPresent
82
85
from bzrlib.trace import mutter
83
86
from bzrlib.osutils import contains_whitespace, contains_linebreaks, \
84
87
     sha_strings
85
 
from bzrlib.versionedfile import VersionedFile, InterVersionedFile
86
88
from bzrlib.symbol_versioning import DEPRECATED_PARAMETER, deprecated_passed
87
89
from bzrlib.tsort import topo_sort
88
90
import bzrlib.weave
 
91
from bzrlib.versionedfile import VersionedFile, InterVersionedFile
89
92
 
90
93
 
91
94
# TODO: Split out code specific to this format into an associated object.
162
165
        internal representation is of the format:
163
166
        (revid, plaintext)
164
167
        """
 
168
        decode_utf8 = cache_utf8.decode
165
169
        lines = []
166
170
        for line in content:
167
171
            origin, text = line.split(' ', 1)
168
 
            lines.append((origin.decode('utf-8'), text))
 
172
            lines.append((decode_utf8(origin), text))
169
173
        return KnitContent(lines)
170
174
 
171
175
    def parse_line_delta_iter(self, lines):
182
186
        internal representation is
183
187
        (start, end, count, [1..count tuples (revid, newline)])
184
188
        """
 
189
        decode_utf8 = cache_utf8.decode
185
190
        result = []
186
191
        lines = iter(lines)
187
192
        next = lines.next
193
198
            while remaining:
194
199
                origin, text = next().split(' ', 1)
195
200
                remaining -= 1
196
 
                contents.append((origin.decode('utf-8'), text))
 
201
                contents.append((decode_utf8(origin), text))
197
202
            result.append((start, end, count, contents))
198
203
        return result
199
204
 
202
207
 
203
208
        see parse_fulltext which this inverts.
204
209
        """
205
 
        return ['%s %s' % (o.encode('utf-8'), t) for o, t in content._lines]
 
210
        encode_utf8 = cache_utf8.encode
 
211
        return ['%s %s' % (encode_utf8(o), t) for o, t in content._lines]
206
212
 
207
213
    def lower_line_delta(self, delta):
208
214
        """convert a delta into a serializable form.
209
215
 
210
216
        See parse_line_delta which this inverts.
211
217
        """
 
218
        encode_utf8 = cache_utf8.encode
212
219
        out = []
213
220
        for start, end, c, lines in delta:
214
221
            out.append('%d,%d,%d\n' % (start, end, c))
215
 
            for origin, text in lines:
216
 
                out.append('%s %s' % (origin.encode('utf-8'), text))
 
222
            out.extend(encode_utf8(origin) + ' ' + text
 
223
                       for origin, text in lines)
217
224
        return out
218
225
 
219
226
 
1206
1213
        return self._cache[version_id][5]
1207
1214
 
1208
1215
    def _version_list_to_index(self, versions):
 
1216
        encode_utf8 = cache_utf8.encode
1209
1217
        result_list = []
1210
1218
        for version in versions:
1211
1219
            if version in self._cache:
1213
1221
                result_list.append(str(self._cache[version][5]))
1214
1222
                # -- end lookup () --
1215
1223
            else:
1216
 
                result_list.append('.' + version.encode('utf-8'))
 
1224
                result_list.append('.' + encode_utf8(version))
1217
1225
        return ' '.join(result_list)
1218
1226
 
1219
1227
    def add_version(self, version_id, options, pos, size, parents):
1227
1235
                         (version_id, options, pos, size, parents).
1228
1236
        """
1229
1237
        lines = []
 
1238
        encode_utf8 = cache_utf8.encode
1230
1239
        for version_id, options, pos, size, parents in versions:
1231
 
            line = "\n%s %s %s %s %s :" % (version_id.encode('utf-8'),
 
1240
            line = "\n%s %s %s %s %s :" % (encode_utf8(version_id),
1232
1241
                                           ','.join(options),
1233
1242
                                           pos,
1234
1243
                                           size,
1324
1333
        """
1325
1334
        sio = StringIO()
1326
1335
        data_file = GzipFile(None, mode='wb', fileobj=sio)
1327
 
        version_id_utf8 = version_id.encode('utf-8')
1328
 
        # GzipFile.writelines() just iterates and calls self.write() for
1329
 
        # each line in the list. So do the faster thing and write it all out
1330
 
        # at once.
 
1336
        version_id_utf8 = cache_utf8.encode(version_id)
1331
1337
        data_file.writelines(chain(
1332
1338
            ["version %s %d %s\n" % (version_id_utf8,
1333
1339
                                     len(lines),
1368
1374
        rec = df.readline().split()
1369
1375
        if len(rec) != 4:
1370
1376
            raise KnitCorrupt(self._filename, 'unexpected number of elements in record header')
1371
 
        if rec[1].decode('utf-8')!= version_id:
 
1377
        if cache_utf8.decode(rec[1]) != version_id:
1372
1378
            raise KnitCorrupt(self._filename, 
1373
1379
                              'unexpected version, wanted %r, got %r' % (
1374
1380
                                version_id, rec[1]))
1383
1389
        record_contents = df.readlines()
1384
1390
        l = record_contents.pop()
1385
1391
        assert len(record_contents) == int(rec[2])
1386
 
        if l.decode('utf-8') != 'end %s\n' % version_id:
 
1392
        if l != 'end %s\n' % cache_utf8.encode(version_id):
1387
1393
            raise KnitCorrupt(self._filename, 'unexpected version end line %r, wanted %r' 
1388
1394
                        % (l, version_id))
1389
1395
        df.close()