Mercurial > public > mercurial-scm > hg-stable
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'] = [] |