##// END OF EJS Templates
revlog: remove the revlogio class...
marmoute -
r47810:5e64c93d default
parent child Browse files
Show More
@@ -2598,11 +2598,14 b' def perfrevlogindex(ui, repo, file_=None'
2598 header = struct.unpack(b'>I', data[0:4])[0]
2598 header = struct.unpack(b'>I', data[0:4])[0]
2599 version = header & 0xFFFF
2599 version = header & 0xFFFF
2600 if version == 1:
2600 if version == 1:
2601 revlogio = revlog.revlogio()
2602 inline = header & (1 << 16)
2601 inline = header & (1 << 16)
2603 else:
2602 else:
2604 raise error.Abort(b'unsupported revlog version: %d' % version)
2603 raise error.Abort(b'unsupported revlog version: %d' % version)
2605
2604
2605 parse_index_v1 = getattr(revlog, 'parse_index_v1', None)
2606 if parse_index_v1 is None:
2607 parse_index_v1 = revlog.revlogio().parseindex
2608
2606 rllen = len(rl)
2609 rllen = len(rl)
2607
2610
2608 node0 = rl.node(0)
2611 node0 = rl.node(0)
@@ -2624,26 +2627,24 b' def perfrevlogindex(ui, repo, file_=None'
2624 fh.read()
2627 fh.read()
2625
2628
2626 def parseindex():
2629 def parseindex():
2627 revlogio.parseindex(data, inline)
2630 parse_index_v1(data, inline)
2628
2631
2629 def getentry(revornode):
2632 def getentry(revornode):
2630 index = revlogio.parseindex(data, inline)[0]
2633 index = parse_index_v1(data, inline)[0]
2631 index[revornode]
2634 index[revornode]
2632
2635
2633 def getentries(revs, count=1):
2636 def getentries(revs, count=1):
2634 index = revlogio.parseindex(data, inline)[0]
2637 index = parse_index_v1(data, inline)[0]
2635
2638
2636 for i in range(count):
2639 for i in range(count):
2637 for rev in revs:
2640 for rev in revs:
2638 index[rev]
2641 index[rev]
2639
2642
2640 def resolvenode(node):
2643 def resolvenode(node):
2641 index = revlogio.parseindex(data, inline)[0]
2644 index = parse_index_v1(data, inline)[0]
2642 rev = getattr(index, 'rev', None)
2645 rev = getattr(index, 'rev', None)
2643 if rev is None:
2646 if rev is None:
2644 nodemap = getattr(
2647 nodemap = getattr(parse_index_v1(data, inline)[0], 'nodemap', None)
2645 revlogio.parseindex(data, inline)[0], 'nodemap', None
2646 )
2647 # This only works for the C code.
2648 # This only works for the C code.
2648 if nodemap is None:
2649 if nodemap is None:
2649 return
2650 return
@@ -2655,12 +2656,10 b' def perfrevlogindex(ui, repo, file_=None'
2655 pass
2656 pass
2656
2657
2657 def resolvenodes(nodes, count=1):
2658 def resolvenodes(nodes, count=1):
2658 index = revlogio.parseindex(data, inline)[0]
2659 index = parse_index_v1(data, inline)[0]
2659 rev = getattr(index, 'rev', None)
2660 rev = getattr(index, 'rev', None)
2660 if rev is None:
2661 if rev is None:
2661 nodemap = getattr(
2662 nodemap = getattr(parse_index_v1(data, inline)[0], 'nodemap', None)
2662 revlogio.parseindex(data, inline)[0], 'nodemap', None
2663 )
2664 # This only works for the C code.
2663 # This only works for the C code.
2665 if nodemap is None:
2664 if nodemap is None:
2666 return
2665 return
@@ -37,8 +37,6 b' from .revlogutils.constants import ('
37 FLAG_GENERALDELTA,
37 FLAG_GENERALDELTA,
38 FLAG_INLINE_DATA,
38 FLAG_INLINE_DATA,
39 INDEX_ENTRY_V0,
39 INDEX_ENTRY_V0,
40 INDEX_ENTRY_V1,
41 INDEX_ENTRY_V2,
42 INDEX_HEADER,
40 INDEX_HEADER,
43 REVLOGV0,
41 REVLOGV0,
44 REVLOGV1,
42 REVLOGV1,
@@ -287,34 +285,61 b' class revlogoldindex(list):'
287 return INDEX_ENTRY_V0.pack(*e2)
285 return INDEX_ENTRY_V0.pack(*e2)
288
286
289
287
290 class revlogoldio(object):
288 def parse_index_v0(data, inline):
291 def parseindex(self, data, inline):
289 s = INDEX_ENTRY_V0.size
292 s = INDEX_ENTRY_V0.size
290 index = []
293 index = []
291 nodemap = nodemaputil.NodeMap({sha1nodeconstants.nullid: nullrev})
294 nodemap = nodemaputil.NodeMap({sha1nodeconstants.nullid: nullrev})
292 n = off = 0
295 n = off = 0
293 l = len(data)
296 l = len(data)
294 while off + s <= l:
297 while off + s <= l:
295 cur = data[off : off + s]
298 cur = data[off : off + s]
296 off += s
299 off += s
297 e = INDEX_ENTRY_V0.unpack(cur)
300 e = INDEX_ENTRY_V0.unpack(cur)
298 # transform to revlogv1 format
301 # transform to revlogv1 format
299 e2 = (
302 e2 = (
300 offset_type(e[0], 0),
303 offset_type(e[0], 0),
301 e[1],
304 e[1],
302 -1,
305 -1,
303 e[2],
306 e[2],
304 e[3],
307 e[3],
305 nodemap.get(e[4], nullrev),
308 nodemap.get(e[4], nullrev),
306 nodemap.get(e[5], nullrev),
309 nodemap.get(e[5], nullrev),
307 e[6],
310 e[6],
308 )
311 )
309 index.append(e2)
312 index.append(e2)
310 nodemap[e[6]] = n
313 nodemap[e[6]] = n
311 n += 1
314 n += 1
312
315
313 index = revlogoldindex(index)
316 index = revlogoldindex(index)
314 return index, None
317 return index, None
315
316
317 def parse_index_v1(data, inline):
318 # call the C implementation to parse the index data
319 index, cache = parsers.parse_index2(data, inline)
320 return index, cache
321
322
323 def parse_index_v2(data, inline):
324 # call the C implementation to parse the index data
325 index, cache = parsers.parse_index2(data, inline, revlogv2=True)
326 return index, cache
327
328
329 if util.safehasattr(parsers, 'parse_index_devel_nodemap'):
330
331 def parse_index_v1_nodemap(data, inline):
332 index, cache = parsers.parse_index_devel_nodemap(data, inline)
333 return index, cache
334
335
336 else:
337 parse_index_v1_nodemap = None
338
339
340 def parse_index_v1_mixed(data, inline):
341 index, cache = parse_index_v1(data, inline)
342 return rustrevlog.MixedIndex(index), cache
318
343
319
344
320 # corresponds to uncompressed length of indexformatng (2 gigs, 4-byte
345 # corresponds to uncompressed length of indexformatng (2 gigs, 4-byte
@@ -322,40 +347,6 b' class revlogoldio(object):'
322 _maxentrysize = 0x7FFFFFFF
347 _maxentrysize = 0x7FFFFFFF
323
348
324
349
325 class revlogio(object):
326 def parseindex(self, data, inline):
327 # call the C implementation to parse the index data
328 index, cache = parsers.parse_index2(data, inline)
329 return index, cache
330
331
332 class revlogv2io(object):
333 def parseindex(self, data, inline):
334 index, cache = parsers.parse_index2(data, inline, revlogv2=True)
335 return index, cache
336
337
338 NodemapRevlogIO = None
339
340 if util.safehasattr(parsers, 'parse_index_devel_nodemap'):
341
342 class NodemapRevlogIO(revlogio):
343 """A debug oriented IO class that return a PersistentNodeMapIndexObject
344
345 The PersistentNodeMapIndexObject object is meant to test the persistent nodemap feature.
346 """
347
348 def parseindex(self, data, inline):
349 index, cache = parsers.parse_index_devel_nodemap(data, inline)
350 return index, cache
351
352
353 class rustrevlogio(revlogio):
354 def parseindex(self, data, inline):
355 index, cache = super(rustrevlogio, self).parseindex(data, inline)
356 return rustrevlog.MixedIndex(index), cache
357
358
359 class revlog(object):
350 class revlog(object):
360 """
351 """
361 the underlying revision storage object
352 the underlying revision storage object
@@ -614,7 +605,7 b' class revlog(object):'
614 devel_nodemap = (
605 devel_nodemap = (
615 self.nodemap_file
606 self.nodemap_file
616 and opts.get(b'devel-force-nodemap', False)
607 and opts.get(b'devel-force-nodemap', False)
617 and NodemapRevlogIO is not None
608 and parse_index_v1_nodemap is not None
618 )
609 )
619
610
620 use_rust_index = False
611 use_rust_index = False
@@ -624,17 +615,17 b' class revlog(object):'
624 else:
615 else:
625 use_rust_index = self.opener.options.get(b'rust.index')
616 use_rust_index = self.opener.options.get(b'rust.index')
626
617
627 self._io = revlogio()
618 self._parse_index = parse_index_v1
628 if self.version == REVLOGV0:
619 if self.version == REVLOGV0:
629 self._io = revlogoldio()
620 self._parse_index = parse_index_v0
630 elif fmt == REVLOGV2:
621 elif fmt == REVLOGV2:
631 self._io = revlogv2io()
622 self._parse_index = parse_index_v2
632 elif devel_nodemap:
623 elif devel_nodemap:
633 self._io = NodemapRevlogIO()
624 self._parse_index = parse_index_v1_nodemap
634 elif use_rust_index:
625 elif use_rust_index:
635 self._io = rustrevlogio()
626 self._parse_index = parse_index_v1_mixed
636 try:
627 try:
637 d = self._io.parseindex(indexdata, self._inline)
628 d = self._parse_index(indexdata, self._inline)
638 index, _chunkcache = d
629 index, _chunkcache = d
639 use_nodemap = (
630 use_nodemap = (
640 not self._inline
631 not self._inline
@@ -2049,7 +2040,6 b' class revlog(object):'
2049 with self._indexfp(b'w') as fp:
2040 with self._indexfp(b'w') as fp:
2050 self.version &= ~FLAG_INLINE_DATA
2041 self.version &= ~FLAG_INLINE_DATA
2051 self._inline = False
2042 self._inline = False
2052 io = self._io
2053 for i in self:
2043 for i in self:
2054 e = self.index.entry_binary(i, self.version)
2044 e = self.index.entry_binary(i, self.version)
2055 fp.write(e)
2045 fp.write(e)
@@ -2984,7 +2974,7 b' class revlog(object):'
2984 newrl = revlog(self.opener, newindexfile, newdatafile, censorable=True)
2974 newrl = revlog(self.opener, newindexfile, newdatafile, censorable=True)
2985 newrl.version = self.version
2975 newrl.version = self.version
2986 newrl._generaldelta = self._generaldelta
2976 newrl._generaldelta = self._generaldelta
2987 newrl._io = self._io
2977 newrl._parse_index = self._parse_index
2988
2978
2989 for rev in self.revs():
2979 for rev in self.revs():
2990 node = self.node(rev)
2980 node = self.node(rev)
General Comments 0
You need to be logged in to leave comments. Login now