comparison mercurial/revlog.py @ 47162:a07d5cb03a85

revlog: rename `indexfile` to `_indexfile` We want to make the actual location of the indexfile and location more of an implementation details than what is is currently. In that process, we make the attribute private. Differential Revision: https://phab.mercurial-scm.org/D10574
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 03 May 2021 12:22:16 +0200
parents c6b8d5d91e73
children 396442cd7e6a
comparison
equal deleted inserted replaced
47161:8a1a51d31e85 47162:a07d5cb03a85
321 datafile = indexfile[:-2] + b".d" 321 datafile = indexfile[:-2] + b".d"
322 if postfix is not None: 322 if postfix is not None:
323 datafile = b'%s.%s' % (datafile, postfix) 323 datafile = b'%s.%s' % (datafile, postfix)
324 if postfix is not None: 324 if postfix is not None:
325 indexfile = b'%s.%s' % (indexfile, postfix) 325 indexfile = b'%s.%s' % (indexfile, postfix)
326 self.indexfile = indexfile 326 self._indexfile = indexfile
327 self.datafile = datafile 327 self.datafile = datafile
328 self.nodemap_file = None 328 self.nodemap_file = None
329 self.postfix = postfix 329 self.postfix = postfix
330 if persistentnodemap: 330 if persistentnodemap:
331 self.nodemap_file = nodemaputil.get_nodemap_file( 331 self.nodemap_file = nodemaputil.get_nodemap_file(
332 opener, self.indexfile 332 opener, self._indexfile
333 ) 333 )
334 334
335 self.opener = opener 335 self.opener = opener
336 assert target[0] in ALL_KINDS 336 assert target[0] in ALL_KINDS
337 assert len(target) == 2 337 assert len(target) == 2
488 488
489 if fmt == REVLOGV0: 489 if fmt == REVLOGV0:
490 if flags: 490 if flags:
491 raise error.RevlogError( 491 raise error.RevlogError(
492 _(b'unknown flags (%#04x) in version %d revlog %s') 492 _(b'unknown flags (%#04x) in version %d revlog %s')
493 % (flags >> 16, fmt, self.indexfile) 493 % (flags >> 16, fmt, self._indexfile)
494 ) 494 )
495 495
496 self._inline = False 496 self._inline = False
497 self._generaldelta = False 497 self._generaldelta = False
498 498
499 elif fmt == REVLOGV1: 499 elif fmt == REVLOGV1:
500 if flags & ~REVLOGV1_FLAGS: 500 if flags & ~REVLOGV1_FLAGS:
501 raise error.RevlogError( 501 raise error.RevlogError(
502 _(b'unknown flags (%#04x) in version %d revlog %s') 502 _(b'unknown flags (%#04x) in version %d revlog %s')
503 % (flags >> 16, fmt, self.indexfile) 503 % (flags >> 16, fmt, self._indexfile)
504 ) 504 )
505 505
506 self._inline = versionflags & FLAG_INLINE_DATA 506 self._inline = versionflags & FLAG_INLINE_DATA
507 self._generaldelta = versionflags & FLAG_GENERALDELTA 507 self._generaldelta = versionflags & FLAG_GENERALDELTA
508 508
509 elif fmt == REVLOGV2: 509 elif fmt == REVLOGV2:
510 if flags & ~REVLOGV2_FLAGS: 510 if flags & ~REVLOGV2_FLAGS:
511 raise error.RevlogError( 511 raise error.RevlogError(
512 _(b'unknown flags (%#04x) in version %d revlog %s') 512 _(b'unknown flags (%#04x) in version %d revlog %s')
513 % (flags >> 16, fmt, self.indexfile) 513 % (flags >> 16, fmt, self._indexfile)
514 ) 514 )
515 515
516 # There is a bug in the transaction handling when going from an 516 # There is a bug in the transaction handling when going from an
517 # inline revlog to a separate index and data file. Turn it off until 517 # inline revlog to a separate index and data file. Turn it off until
518 # it's fixed, since v2 revlogs sometimes get rewritten on exchange. 518 # it's fixed, since v2 revlogs sometimes get rewritten on exchange.
521 # generaldelta implied by version 2 revlogs. 521 # generaldelta implied by version 2 revlogs.
522 self._generaldelta = True 522 self._generaldelta = True
523 523
524 else: 524 else:
525 raise error.RevlogError( 525 raise error.RevlogError(
526 _(b'unknown version (%d) in revlog %s') % (fmt, self.indexfile) 526 _(b'unknown version (%d) in revlog %s') % (fmt, self._indexfile)
527 ) 527 )
528 528
529 self.nodeconstants = sha1nodeconstants 529 self.nodeconstants = sha1nodeconstants
530 self.nullid = self.nodeconstants.nullid 530 self.nullid = self.nodeconstants.nullid
531 531
576 # no changelog tampering 576 # no changelog tampering
577 self._nodemap_docket = docket 577 self._nodemap_docket = docket
578 index.update_nodemap_data(*nodemap_data) 578 index.update_nodemap_data(*nodemap_data)
579 except (ValueError, IndexError): 579 except (ValueError, IndexError):
580 raise error.RevlogError( 580 raise error.RevlogError(
581 _(b"index %s is corrupted") % self.indexfile 581 _(b"index %s is corrupted") % self._indexfile
582 ) 582 )
583 self.index, self._chunkcache = d 583 self.index, self._chunkcache = d
584 if not self._chunkcache: 584 if not self._chunkcache:
585 self._chunkclear() 585 self._chunkclear()
586 # revnum -> (chain-length, sum-delta-length) 586 # revnum -> (chain-length, sum-delta-length)
602 args = {'mode': mode} 602 args = {'mode': mode}
603 if mode != b'r': 603 if mode != b'r':
604 args['checkambig'] = self._checkambig 604 args['checkambig'] = self._checkambig
605 if mode == b'w': 605 if mode == b'w':
606 args['atomictemp'] = True 606 args['atomictemp'] = True
607 return self.opener(self.indexfile, **args) 607 return self.opener(self._indexfile, **args)
608 608
609 def _datafp(self, mode=b'r'): 609 def _datafp(self, mode=b'r'):
610 """file object for the revlog's data file""" 610 """file object for the revlog's data file"""
611 return self.opener(self.datafile, mode=mode) 611 return self.opener(self.datafile, mode=mode)
612 612
727 if ( 727 if (
728 node == self.nodeconstants.wdirid 728 node == self.nodeconstants.wdirid
729 or node in self.nodeconstants.wdirfilenodeids 729 or node in self.nodeconstants.wdirfilenodeids
730 ): 730 ):
731 raise error.WdirUnsupported 731 raise error.WdirUnsupported
732 raise error.LookupError(node, self.indexfile, _(b'no node')) 732 raise error.LookupError(node, self._indexfile, _(b'no node'))
733 733
734 # Accessors for index entries. 734 # Accessors for index entries.
735 735
736 # First tuple entry is 8 bytes. First 6 bytes are offset. Last 2 bytes 736 # First tuple entry is 8 bytes. First 6 bytes are offset. Last 2 bytes
737 # are flags. 737 # are flags.
1391 except error.RevlogError: 1391 except error.RevlogError:
1392 # parsers.c radix tree lookup gave multiple matches 1392 # parsers.c radix tree lookup gave multiple matches
1393 # fast path: for unfiltered changelog, radix tree is accurate 1393 # fast path: for unfiltered changelog, radix tree is accurate
1394 if not getattr(self, 'filteredrevs', None): 1394 if not getattr(self, 'filteredrevs', None):
1395 raise error.AmbiguousPrefixLookupError( 1395 raise error.AmbiguousPrefixLookupError(
1396 id, self.indexfile, _(b'ambiguous identifier') 1396 id, self._indexfile, _(b'ambiguous identifier')
1397 ) 1397 )
1398 # fall through to slow path that filters hidden revisions 1398 # fall through to slow path that filters hidden revisions
1399 except (AttributeError, ValueError): 1399 except (AttributeError, ValueError):
1400 # we are pure python, or key was too short to search radix tree 1400 # we are pure python, or key was too short to search radix tree
1401 pass 1401 pass
1417 if len(nl) > 0: 1417 if len(nl) > 0:
1418 if len(nl) == 1 and not maybewdir: 1418 if len(nl) == 1 and not maybewdir:
1419 self._pcache[id] = nl[0] 1419 self._pcache[id] = nl[0]
1420 return nl[0] 1420 return nl[0]
1421 raise error.AmbiguousPrefixLookupError( 1421 raise error.AmbiguousPrefixLookupError(
1422 id, self.indexfile, _(b'ambiguous identifier') 1422 id, self._indexfile, _(b'ambiguous identifier')
1423 ) 1423 )
1424 if maybewdir: 1424 if maybewdir:
1425 raise error.WdirUnsupported 1425 raise error.WdirUnsupported
1426 return None 1426 return None
1427 except TypeError: 1427 except TypeError:
1437 return n 1437 return n
1438 n = self._partialmatch(id) 1438 n = self._partialmatch(id)
1439 if n: 1439 if n:
1440 return n 1440 return n
1441 1441
1442 raise error.LookupError(id, self.indexfile, _(b'no match found')) 1442 raise error.LookupError(id, self._indexfile, _(b'no match found'))
1443 1443
1444 def shortest(self, node, minlength=1): 1444 def shortest(self, node, minlength=1):
1445 """Find the shortest unambiguous prefix that matches node.""" 1445 """Find the shortest unambiguous prefix that matches node."""
1446 1446
1447 def isvalid(prefix): 1447 def isvalid(prefix):
1451 return False 1451 return False
1452 except error.WdirUnsupported: 1452 except error.WdirUnsupported:
1453 # single 'ff...' match 1453 # single 'ff...' match
1454 return True 1454 return True
1455 if matchednode is None: 1455 if matchednode is None:
1456 raise error.LookupError(node, self.indexfile, _(b'no node')) 1456 raise error.LookupError(node, self._indexfile, _(b'no node'))
1457 return True 1457 return True
1458 1458
1459 def maybewdir(prefix): 1459 def maybewdir(prefix):
1460 return all(c == b'f' for c in pycompat.iterbytestr(prefix)) 1460 return all(c == b'f' for c in pycompat.iterbytestr(prefix))
1461 1461
1472 try: 1472 try:
1473 length = max(self.index.shortest(node), minlength) 1473 length = max(self.index.shortest(node), minlength)
1474 return disambiguate(hexnode, length) 1474 return disambiguate(hexnode, length)
1475 except error.RevlogError: 1475 except error.RevlogError:
1476 if node != self.nodeconstants.wdirid: 1476 if node != self.nodeconstants.wdirid:
1477 raise error.LookupError(node, self.indexfile, _(b'no node')) 1477 raise error.LookupError(
1478 node, self._indexfile, _(b'no node')
1479 )
1478 except AttributeError: 1480 except AttributeError:
1479 # Fall through to pure code 1481 # Fall through to pure code
1480 pass 1482 pass
1481 1483
1482 if node == self.nodeconstants.wdirid: 1484 if node == self.nodeconstants.wdirid:
1543 _( 1545 _(
1544 b'partial read of revlog %s; expected %d bytes from ' 1546 b'partial read of revlog %s; expected %d bytes from '
1545 b'offset %d, got %d' 1547 b'offset %d, got %d'
1546 ) 1548 )
1547 % ( 1549 % (
1548 self.indexfile if self._inline else self.datafile, 1550 self._indexfile if self._inline else self.datafile,
1549 length, 1551 length,
1550 realoffset, 1552 realoffset,
1551 len(d) - startoffset, 1553 len(d) - startoffset,
1552 ) 1554 )
1553 ) 1555 )
1559 _( 1561 _(
1560 b'partial read of revlog %s; expected %d bytes from offset ' 1562 b'partial read of revlog %s; expected %d bytes from offset '
1561 b'%d, got %d' 1563 b'%d, got %d'
1562 ) 1564 )
1563 % ( 1565 % (
1564 self.indexfile if self._inline else self.datafile, 1566 self._indexfile if self._inline else self.datafile,
1565 length, 1567 length,
1566 offset, 1568 offset,
1567 len(d), 1569 len(d),
1568 ) 1570 )
1569 ) 1571 )
1930 revornode = rev 1932 revornode = rev
1931 if revornode is None: 1933 if revornode is None:
1932 revornode = templatefilters.short(hex(node)) 1934 revornode = templatefilters.short(hex(node))
1933 raise error.RevlogError( 1935 raise error.RevlogError(
1934 _(b"integrity check failed on %s:%s") 1936 _(b"integrity check failed on %s:%s")
1935 % (self.indexfile, pycompat.bytestr(revornode)) 1937 % (self._indexfile, pycompat.bytestr(revornode))
1936 ) 1938 )
1937 except error.RevlogError: 1939 except error.RevlogError:
1938 if self._censorable and storageutil.iscensoredtext(text): 1940 if self._censorable and storageutil.iscensoredtext(text):
1939 raise error.CensoredNodeError(self.indexfile, node, text) 1941 raise error.CensoredNodeError(self._indexfile, node, text)
1940 raise 1942 raise
1941 1943
1942 def _enforceinlinesize(self, tr, fp=None): 1944 def _enforceinlinesize(self, tr, fp=None):
1943 """Check if the revlog is too big for inline and convert if so. 1945 """Check if the revlog is too big for inline and convert if so.
1944 1946
1951 not self._inline 1953 not self._inline
1952 or (self.start(tiprev) + self.length(tiprev)) < _maxinline 1954 or (self.start(tiprev) + self.length(tiprev)) < _maxinline
1953 ): 1955 ):
1954 return 1956 return
1955 1957
1956 troffset = tr.findoffset(self.indexfile) 1958 troffset = tr.findoffset(self._indexfile)
1957 if troffset is None: 1959 if troffset is None:
1958 raise error.RevlogError( 1960 raise error.RevlogError(
1959 _(b"%s not found in the transaction") % self.indexfile 1961 _(b"%s not found in the transaction") % self._indexfile
1960 ) 1962 )
1961 trindex = 0 1963 trindex = 0
1962 tr.add(self.datafile, 0) 1964 tr.add(self.datafile, 0)
1963 1965
1964 if fp: 1966 if fp:
1986 fp.write(e) 1988 fp.write(e)
1987 1989
1988 # the temp file replace the real index when we exit the context 1990 # the temp file replace the real index when we exit the context
1989 # manager 1991 # manager
1990 1992
1991 tr.replace(self.indexfile, trindex * self.index.entry_size) 1993 tr.replace(self._indexfile, trindex * self.index.entry_size)
1992 nodemaputil.setup_persistent_nodemap(tr, self) 1994 nodemaputil.setup_persistent_nodemap(tr, self)
1993 self._chunkclear() 1995 self._chunkclear()
1994 1996
1995 def _nodeduplicatecallback(self, transaction, node): 1997 def _nodeduplicatecallback(self, transaction, node):
1996 """called when trying to add a node already stored.""" 1998 """called when trying to add a node already stored."""
2022 deltacomputer - an optional deltacomputer instance shared between 2024 deltacomputer - an optional deltacomputer instance shared between
2023 multiple calls 2025 multiple calls
2024 """ 2026 """
2025 if link == nullrev: 2027 if link == nullrev:
2026 raise error.RevlogError( 2028 raise error.RevlogError(
2027 _(b"attempted to add linkrev -1 to %s") % self.indexfile 2029 _(b"attempted to add linkrev -1 to %s") % self._indexfile
2028 ) 2030 )
2029 2031
2030 if sidedata is None: 2032 if sidedata is None:
2031 sidedata = {} 2033 sidedata = {}
2032 elif sidedata and not self.hassidedata: 2034 elif sidedata and not self.hassidedata:
2047 if len(rawtext) > _maxentrysize: 2049 if len(rawtext) > _maxentrysize:
2048 raise error.RevlogError( 2050 raise error.RevlogError(
2049 _( 2051 _(
2050 b"%s: size of %d bytes exceeds maximum revlog storage of 2GiB" 2052 b"%s: size of %d bytes exceeds maximum revlog storage of 2GiB"
2051 ) 2053 )
2052 % (self.indexfile, len(rawtext)) 2054 % (self._indexfile, len(rawtext))
2053 ) 2055 )
2054 2056
2055 node = node or self.hash(rawtext, p1, p2) 2057 node = node or self.hash(rawtext, p1, p2)
2056 rev = self.index.get_rev(node) 2058 rev = self.index.get_rev(node)
2057 if rev is not None: 2059 if rev is not None:
2218 - rawtext is optional (can be None); if not set, cachedelta must be set. 2220 - rawtext is optional (can be None); if not set, cachedelta must be set.
2219 if both are set, they must correspond to each other. 2221 if both are set, they must correspond to each other.
2220 """ 2222 """
2221 if node == self.nullid: 2223 if node == self.nullid:
2222 raise error.RevlogError( 2224 raise error.RevlogError(
2223 _(b"%s: attempt to add null revision") % self.indexfile 2225 _(b"%s: attempt to add null revision") % self._indexfile
2224 ) 2226 )
2225 if ( 2227 if (
2226 node == self.nodeconstants.wdirid 2228 node == self.nodeconstants.wdirid
2227 or node in self.nodeconstants.wdirfilenodeids 2229 or node in self.nodeconstants.wdirfilenodeids
2228 ): 2230 ):
2229 raise error.RevlogError( 2231 raise error.RevlogError(
2230 _(b"%s: attempt to add wdir revision") % self.indexfile 2232 _(b"%s: attempt to add wdir revision") % self._indexfile
2231 ) 2233 )
2232 2234
2233 if self._inline: 2235 if self._inline:
2234 fh = ifh 2236 fh = ifh
2235 else: 2237 else:
2245 if self._concurrencychecker: 2247 if self._concurrencychecker:
2246 if self._inline: 2248 if self._inline:
2247 # offset is "as if" it were in the .d file, so we need to add on 2249 # offset is "as if" it were in the .d file, so we need to add on
2248 # the size of the entry metadata. 2250 # the size of the entry metadata.
2249 self._concurrencychecker( 2251 self._concurrencychecker(
2250 ifh, self.indexfile, offset + curr * self.index.entry_size 2252 ifh, self._indexfile, offset + curr * self.index.entry_size
2251 ) 2253 )
2252 else: 2254 else:
2253 # Entries in the .i are a consistent size. 2255 # Entries in the .i are a consistent size.
2254 self._concurrencychecker( 2256 self._concurrencychecker(
2255 ifh, self.indexfile, curr * self.index.entry_size 2257 ifh, self._indexfile, curr * self.index.entry_size
2256 ) 2258 )
2257 self._concurrencychecker(dfh, self.datafile, offset) 2259 self._concurrencychecker(dfh, self.datafile, offset)
2258 2260
2259 p1r, p2r = self.rev(p1), self.rev(p2) 2261 p1r, p2r = self.rev(p1), self.rev(p2)
2260 2262
2367 dfh.seek(0, os.SEEK_END) 2369 dfh.seek(0, os.SEEK_END)
2368 2370
2369 curr = len(self) - 1 2371 curr = len(self) - 1
2370 if not self._inline: 2372 if not self._inline:
2371 transaction.add(self.datafile, offset) 2373 transaction.add(self.datafile, offset)
2372 transaction.add(self.indexfile, curr * len(entry)) 2374 transaction.add(self._indexfile, curr * len(entry))
2373 if data[0]: 2375 if data[0]:
2374 dfh.write(data[0]) 2376 dfh.write(data[0])
2375 dfh.write(data[1]) 2377 dfh.write(data[1])
2376 if sidedata: 2378 if sidedata:
2377 dfh.write(sidedata) 2379 dfh.write(sidedata)
2378 ifh.write(entry) 2380 ifh.write(entry)
2379 else: 2381 else:
2380 offset += curr * self.index.entry_size 2382 offset += curr * self.index.entry_size
2381 transaction.add(self.indexfile, offset) 2383 transaction.add(self._indexfile, offset)
2382 ifh.write(entry) 2384 ifh.write(entry)
2383 ifh.write(data[0]) 2385 ifh.write(data[0])
2384 ifh.write(data[1]) 2386 ifh.write(data[1])
2385 if sidedata: 2387 if sidedata:
2386 ifh.write(sidedata) 2388 ifh.write(sidedata)
2415 if r: 2417 if r:
2416 end = self.end(r - 1) 2418 end = self.end(r - 1)
2417 ifh = self._indexfp(b"a+") 2419 ifh = self._indexfp(b"a+")
2418 isize = r * self.index.entry_size 2420 isize = r * self.index.entry_size
2419 if self._inline: 2421 if self._inline:
2420 transaction.add(self.indexfile, end + isize) 2422 transaction.add(self._indexfile, end + isize)
2421 dfh = None 2423 dfh = None
2422 else: 2424 else:
2423 transaction.add(self.indexfile, isize) 2425 transaction.add(self._indexfile, isize)
2424 transaction.add(self.datafile, end) 2426 transaction.add(self.datafile, end)
2425 dfh = self._datafp(b"a+") 2427 dfh = self._datafp(b"a+")
2426 2428
2427 def flush(): 2429 def flush():
2428 if dfh: 2430 if dfh:
2450 continue 2452 continue
2451 2453
2452 for p in (p1, p2): 2454 for p in (p1, p2):
2453 if not self.index.has_node(p): 2455 if not self.index.has_node(p):
2454 raise error.LookupError( 2456 raise error.LookupError(
2455 p, self.indexfile, _(b'unknown parent') 2457 p, self._indexfile, _(b'unknown parent')
2456 ) 2458 )
2457 2459
2458 if not self.index.has_node(deltabase): 2460 if not self.index.has_node(deltabase):
2459 raise error.LookupError( 2461 raise error.LookupError(
2460 deltabase, self.indexfile, _(b'unknown delta base') 2462 deltabase, self._indexfile, _(b'unknown delta base')
2461 ) 2463 )
2462 2464
2463 baserev = self.rev(deltabase) 2465 baserev = self.rev(deltabase)
2464 2466
2465 if baserev != nullrev and self.iscensored(baserev): 2467 if baserev != nullrev and self.iscensored(baserev):
2468 hlen = struct.calcsize(b">lll") 2470 hlen = struct.calcsize(b">lll")
2469 oldlen = self.rawsize(baserev) 2471 oldlen = self.rawsize(baserev)
2470 newlen = len(delta) - hlen 2472 newlen = len(delta) - hlen
2471 if delta[:hlen] != mdiff.replacediffheader(oldlen, newlen): 2473 if delta[:hlen] != mdiff.replacediffheader(oldlen, newlen):
2472 raise error.CensoredBaseError( 2474 raise error.CensoredBaseError(
2473 self.indexfile, self.node(baserev) 2475 self._indexfile, self.node(baserev)
2474 ) 2476 )
2475 2477
2476 if not flags and self._peek_iscensored(baserev, delta, flush): 2478 if not flags and self._peek_iscensored(baserev, delta, flush):
2477 flags |= REVIDX_ISCENSORED 2479 flags |= REVIDX_ISCENSORED
2478 2480
2573 transaction.add(self.datafile, end) 2575 transaction.add(self.datafile, end)
2574 end = rev * self.index.entry_size 2576 end = rev * self.index.entry_size
2575 else: 2577 else:
2576 end += rev * self.index.entry_size 2578 end += rev * self.index.entry_size
2577 2579
2578 transaction.add(self.indexfile, end) 2580 transaction.add(self._indexfile, end)
2579 2581
2580 # then reset internal state in memory to forget those revisions 2582 # then reset internal state in memory to forget those revisions
2581 self._revisioncache = None 2583 self._revisioncache = None
2582 self._chaininfocache = util.lrucachedict(500) 2584 self._chaininfocache = util.lrucachedict(500)
2583 self._chunkclear() 2585 self._chunkclear()
2606 if inst.errno != errno.ENOENT: 2608 if inst.errno != errno.ENOENT:
2607 raise 2609 raise
2608 dd = 0 2610 dd = 0
2609 2611
2610 try: 2612 try:
2611 f = self.opener(self.indexfile) 2613 f = self.opener(self._indexfile)
2612 f.seek(0, io.SEEK_END) 2614 f.seek(0, io.SEEK_END)
2613 actual = f.tell() 2615 actual = f.tell()
2614 f.close() 2616 f.close()
2615 s = self.index.entry_size 2617 s = self.index.entry_size
2616 i = max(0, actual // s) 2618 i = max(0, actual // s)
2627 di = 0 2629 di = 0
2628 2630
2629 return (dd, di) 2631 return (dd, di)
2630 2632
2631 def files(self): 2633 def files(self):
2632 res = [self.indexfile] 2634 res = [self._indexfile]
2633 if not self._inline: 2635 if not self._inline:
2634 res.append(self.datafile) 2636 res.append(self.datafile)
2635 return res 2637 return res
2636 2638
2637 def emitrevisions( 2639 def emitrevisions(
2845 self, sidedata_helpers, sidedata, rev 2847 self, sidedata_helpers, sidedata, rev
2846 ) 2848 )
2847 flags = flags | new_flags[0] & ~new_flags[1] 2849 flags = flags | new_flags[0] & ~new_flags[1]
2848 2850
2849 ifh = destrevlog.opener( 2851 ifh = destrevlog.opener(
2850 destrevlog.indexfile, b'a+', checkambig=False 2852 destrevlog._indexfile, b'a+', checkambig=False
2851 ) 2853 )
2852 dfh = None 2854 dfh = None
2853 if not destrevlog._inline: 2855 if not destrevlog._inline:
2854 dfh = destrevlog.opener(destrevlog.datafile, b'a+') 2856 dfh = destrevlog.opener(destrevlog.datafile, b'a+')
2855 try: 2857 try:
2897 # This is a bit dangerous. We could easily have a mismatch of state. 2899 # This is a bit dangerous. We could easily have a mismatch of state.
2898 newrl = revlog( 2900 newrl = revlog(
2899 self.opener, 2901 self.opener,
2900 target=self.target, 2902 target=self.target,
2901 postfix=b'tmpcensored', 2903 postfix=b'tmpcensored',
2902 indexfile=self.indexfile, 2904 indexfile=self._indexfile,
2903 censorable=True, 2905 censorable=True,
2904 ) 2906 )
2905 newrl._format_version = self._format_version 2907 newrl._format_version = self._format_version
2906 newrl._format_flags = self._format_flags 2908 newrl._format_flags = self._format_flags
2907 newrl._generaldelta = self._generaldelta 2909 newrl._generaldelta = self._generaldelta
2950 2952
2951 newrl.addrawrevision( 2953 newrl.addrawrevision(
2952 rawtext, tr, self.linkrev(rev), p1, p2, node, self.flags(rev) 2954 rawtext, tr, self.linkrev(rev), p1, p2, node, self.flags(rev)
2953 ) 2955 )
2954 2956
2955 tr.addbackup(self.indexfile, location=b'store') 2957 tr.addbackup(self._indexfile, location=b'store')
2956 if not self._inline: 2958 if not self._inline:
2957 tr.addbackup(self.datafile, location=b'store') 2959 tr.addbackup(self.datafile, location=b'store')
2958 2960
2959 self.opener.rename(newrl.indexfile, self.indexfile) 2961 self.opener.rename(newrl._indexfile, self._indexfile)
2960 if not self._inline: 2962 if not self._inline:
2961 self.opener.rename(newrl.datafile, self.datafile) 2963 self.opener.rename(newrl.datafile, self.datafile)
2962 2964
2963 self.clearcaches() 2965 self.clearcaches()
2964 self._loadindex() 2966 self._loadindex()
2979 2981
2980 # The verifier tells us what version revlog we should be. 2982 # The verifier tells us what version revlog we should be.
2981 if version != state[b'expectedversion']: 2983 if version != state[b'expectedversion']:
2982 yield revlogproblem( 2984 yield revlogproblem(
2983 warning=_(b"warning: '%s' uses revlog format %d; expected %d") 2985 warning=_(b"warning: '%s' uses revlog format %d; expected %d")
2984 % (self.indexfile, version, state[b'expectedversion']) 2986 % (self._indexfile, version, state[b'expectedversion'])
2985 ) 2987 )
2986 2988
2987 state[b'skipread'] = set() 2989 state[b'skipread'] = set()
2988 state[b'safe_renamed'] = set() 2990 state[b'safe_renamed'] = set()
2989 2991
3077 storedsize=False, 3079 storedsize=False,
3078 ): 3080 ):
3079 d = {} 3081 d = {}
3080 3082
3081 if exclusivefiles: 3083 if exclusivefiles:
3082 d[b'exclusivefiles'] = [(self.opener, self.indexfile)] 3084 d[b'exclusivefiles'] = [(self.opener, self._indexfile)]
3083 if not self._inline: 3085 if not self._inline:
3084 d[b'exclusivefiles'].append((self.opener, self.datafile)) 3086 d[b'exclusivefiles'].append((self.opener, self.datafile))
3085 3087
3086 if sharedfiles: 3088 if sharedfiles:
3087 d[b'sharedfiles'] = [] 3089 d[b'sharedfiles'] = []