1258
1258
encode_utf8 = cache_utf8.encode
1259
for version_id, options, pos, size, parents in versions:
1260
line = "\n%s %s %s %s %s :" % (encode_utf8(version_id),
1264
self._version_list_to_index(parents))
1265
assert isinstance(line, str), \
1266
'content must be utf-8 encoded: %r' % (line,)
1268
if not self._need_to_create:
1269
self._transport.append_bytes(self._filename, ''.join(lines))
1272
sio.write(self.HEADER)
1273
sio.writelines(lines)
1275
self._transport.put_file_non_atomic(self._filename, sio,
1276
create_parent_dir=self._create_parent_dir,
1277
mode=self._file_mode,
1278
dir_mode=self._dir_mode)
1279
self._need_to_create = False
1281
# cache after writing, so that a failed write leads to missing cache
1282
# entries not extra ones. XXX TODO: RBC 20060502 in the event of a
1283
# failure, reload the index or flush it or some such, to prevent
1284
# writing records that did complete twice.
1285
for version_id, options, pos, size, parents in versions:
1286
self._cache_version(version_id, options, pos, size, parents)
1259
orig_history = self._history[:]
1260
orig_cache = self._cache.copy()
1263
for version_id, options, pos, size, parents in versions:
1264
line = "\n%s %s %s %s %s :" % (encode_utf8(version_id),
1268
self._version_list_to_index(parents))
1269
assert isinstance(line, str), \
1270
'content must be utf-8 encoded: %r' % (line,)
1272
self._cache_version(version_id, options, pos, size, parents)
1273
if not self._need_to_create:
1274
self._transport.append_bytes(self._filename, ''.join(lines))
1277
sio.write(self.HEADER)
1278
sio.writelines(lines)
1280
self._transport.put_file_non_atomic(self._filename, sio,
1281
create_parent_dir=self._create_parent_dir,
1282
mode=self._file_mode,
1283
dir_mode=self._dir_mode)
1284
self._need_to_create = False
1286
# If any problems happen, restore the original values and re-raise
1287
self._history = orig_history
1288
self._cache = orig_cache
1288
1291
def has_version(self, version_id):
1289
1292
"""True if the version is in the index."""
1290
1293
return (version_id in self._cache)