Mercurial > public > mercurial-scm > hg
comparison mercurial/revlog.py @ 39773:2cd93a8d4bde
revlog: drop RevlogError alias (API)
error.RevlogError was moved from revlog.py in 08cabecfa8a8 in
2009. revlog.RevlogError has remained as an alias ever since.
Let's drop the alias and use error.RevlogError directly.
Differential Revision: https://phab.mercurial-scm.org/D4651
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Tue, 18 Sep 2018 16:18:37 -0700 |
parents | ba0e0c6b7b61 |
children | 4a2466b2a434 |
comparison
equal
deleted
inserted
replaced
39772:ae531f5e583c | 39773:2cd93a8d4bde |
---|---|
102 | 102 |
103 # max size of revlog with inline data | 103 # max size of revlog with inline data |
104 _maxinline = 131072 | 104 _maxinline = 131072 |
105 _chunksize = 1048576 | 105 _chunksize = 1048576 |
106 | 106 |
107 RevlogError = error.RevlogError | |
108 LookupError = error.LookupError | 107 LookupError = error.LookupError |
109 AmbiguousPrefixLookupError = error.AmbiguousPrefixLookupError | 108 AmbiguousPrefixLookupError = error.AmbiguousPrefixLookupError |
110 CensoredNodeError = error.CensoredNodeError | 109 CensoredNodeError = error.CensoredNodeError |
111 ProgrammingError = error.ProgrammingError | 110 ProgrammingError = error.ProgrammingError |
112 | 111 |
301 | 300 |
302 return revlogoldindex(index), nodemap, None | 301 return revlogoldindex(index), nodemap, None |
303 | 302 |
304 def packentry(self, entry, node, version, rev): | 303 def packentry(self, entry, node, version, rev): |
305 if gettype(entry[0]): | 304 if gettype(entry[0]): |
306 raise RevlogError(_('index entry flags need revlog version 1')) | 305 raise error.RevlogError(_('index entry flags need revlog ' |
306 'version 1')) | |
307 e2 = (getoffset(entry[0]), entry[1], entry[3], entry[4], | 307 e2 = (getoffset(entry[0]), entry[1], entry[3], entry[4], |
308 node(entry[5]), node(entry[6]), entry[7]) | 308 node(entry[5]), node(entry[6]), entry[7]) |
309 return indexformatv0_pack(*e2) | 309 return indexformatv0_pack(*e2) |
310 | 310 |
311 # index ng: | 311 # index ng: |
454 self._srmingapsize = opts['sparse-read-min-gap-size'] | 454 self._srmingapsize = opts['sparse-read-min-gap-size'] |
455 if opts.get('enableellipsis'): | 455 if opts.get('enableellipsis'): |
456 self._flagprocessors[REVIDX_ELLIPSIS] = ellipsisprocessor | 456 self._flagprocessors[REVIDX_ELLIPSIS] = ellipsisprocessor |
457 | 457 |
458 if self._chunkcachesize <= 0: | 458 if self._chunkcachesize <= 0: |
459 raise RevlogError(_('revlog chunk cache size %r is not greater ' | 459 raise error.RevlogError(_('revlog chunk cache size %r is not ' |
460 'than 0') % self._chunkcachesize) | 460 'greater than 0') % self._chunkcachesize) |
461 elif self._chunkcachesize & (self._chunkcachesize - 1): | 461 elif self._chunkcachesize & (self._chunkcachesize - 1): |
462 raise RevlogError(_('revlog chunk cache size %r is not a power ' | 462 raise error.RevlogError(_('revlog chunk cache size %r is not a ' |
463 'of 2') % self._chunkcachesize) | 463 'power of 2') % self._chunkcachesize) |
464 | 464 |
465 indexdata = '' | 465 indexdata = '' |
466 self._initempty = True | 466 self._initempty = True |
467 try: | 467 try: |
468 with self._indexfp() as f: | 468 with self._indexfp() as f: |
483 self._generaldelta = v & FLAG_GENERALDELTA | 483 self._generaldelta = v & FLAG_GENERALDELTA |
484 flags = v & ~0xFFFF | 484 flags = v & ~0xFFFF |
485 fmt = v & 0xFFFF | 485 fmt = v & 0xFFFF |
486 if fmt == REVLOGV0: | 486 if fmt == REVLOGV0: |
487 if flags: | 487 if flags: |
488 raise RevlogError(_('unknown flags (%#04x) in version %d ' | 488 raise error.RevlogError(_('unknown flags (%#04x) in version %d ' |
489 'revlog %s') % | 489 'revlog %s') % |
490 (flags >> 16, fmt, self.indexfile)) | 490 (flags >> 16, fmt, self.indexfile)) |
491 elif fmt == REVLOGV1: | 491 elif fmt == REVLOGV1: |
492 if flags & ~REVLOGV1_FLAGS: | 492 if flags & ~REVLOGV1_FLAGS: |
493 raise RevlogError(_('unknown flags (%#04x) in version %d ' | 493 raise error.RevlogError(_('unknown flags (%#04x) in version %d ' |
494 'revlog %s') % | 494 'revlog %s') % |
495 (flags >> 16, fmt, self.indexfile)) | 495 (flags >> 16, fmt, self.indexfile)) |
496 elif fmt == REVLOGV2: | 496 elif fmt == REVLOGV2: |
497 if flags & ~REVLOGV2_FLAGS: | 497 if flags & ~REVLOGV2_FLAGS: |
498 raise RevlogError(_('unknown flags (%#04x) in version %d ' | 498 raise error.RevlogError(_('unknown flags (%#04x) in version %d ' |
499 'revlog %s') % | 499 'revlog %s') % |
500 (flags >> 16, fmt, self.indexfile)) | 500 (flags >> 16, fmt, self.indexfile)) |
501 else: | 501 else: |
502 raise RevlogError(_('unknown version (%d) in revlog %s') % | 502 raise error.RevlogError(_('unknown version (%d) in revlog %s') % |
503 (fmt, self.indexfile)) | 503 (fmt, self.indexfile)) |
504 | 504 |
505 self._storedeltachains = True | 505 self._storedeltachains = True |
506 | 506 |
507 self._io = revlogio() | 507 self._io = revlogio() |
508 if self.version == REVLOGV0: | 508 if self.version == REVLOGV0: |
509 self._io = revlogoldio() | 509 self._io = revlogoldio() |
510 try: | 510 try: |
511 d = self._io.parseindex(indexdata, self._inline) | 511 d = self._io.parseindex(indexdata, self._inline) |
512 except (ValueError, IndexError): | 512 except (ValueError, IndexError): |
513 raise RevlogError(_("index %s is corrupted") % (self.indexfile)) | 513 raise error.RevlogError(_("index %s is corrupted") % |
514 self.indexfile) | |
514 self.index, nodemap, self._chunkcache = d | 515 self.index, nodemap, self._chunkcache = d |
515 if nodemap is not None: | 516 if nodemap is not None: |
516 self.nodemap = self._nodecache = nodemap | 517 self.nodemap = self._nodecache = nodemap |
517 if not self._chunkcache: | 518 if not self._chunkcache: |
518 self._chunkclear() | 519 self._chunkclear() |
615 def rev(self, node): | 616 def rev(self, node): |
616 try: | 617 try: |
617 return self._nodecache[node] | 618 return self._nodecache[node] |
618 except TypeError: | 619 except TypeError: |
619 raise | 620 raise |
620 except RevlogError: | 621 except error.RevlogError: |
621 # parsers.c radix tree lookup failed | 622 # parsers.c radix tree lookup failed |
622 if node == wdirid or node in wdirfilenodeids: | 623 if node == wdirid or node in wdirfilenodeids: |
623 raise error.WdirUnsupported | 624 raise error.WdirUnsupported |
624 raise LookupError(node, self.indexfile, _('no node')) | 625 raise LookupError(node, self.indexfile, _('no node')) |
625 except KeyError: | 626 except KeyError: |
1266 try: | 1267 try: |
1267 partial = self.index.partialmatch(id) | 1268 partial = self.index.partialmatch(id) |
1268 if partial and self.hasnode(partial): | 1269 if partial and self.hasnode(partial): |
1269 if maybewdir: | 1270 if maybewdir: |
1270 # single 'ff...' match in radix tree, ambiguous with wdir | 1271 # single 'ff...' match in radix tree, ambiguous with wdir |
1271 raise RevlogError | 1272 raise error.RevlogError |
1272 return partial | 1273 return partial |
1273 if maybewdir: | 1274 if maybewdir: |
1274 # no 'ff...' match in radix tree, wdir identified | 1275 # no 'ff...' match in radix tree, wdir identified |
1275 raise error.WdirUnsupported | 1276 raise error.WdirUnsupported |
1276 return None | 1277 return None |
1277 except RevlogError: | 1278 except error.RevlogError: |
1278 # parsers.c radix tree lookup gave multiple matches | 1279 # parsers.c radix tree lookup gave multiple matches |
1279 # fast path: for unfiltered changelog, radix tree is accurate | 1280 # fast path: for unfiltered changelog, radix tree is accurate |
1280 if not getattr(self, 'filteredrevs', None): | 1281 if not getattr(self, 'filteredrevs', None): |
1281 raise AmbiguousPrefixLookupError(id, self.indexfile, | 1282 raise AmbiguousPrefixLookupError(id, self.indexfile, |
1282 _('ambiguous identifier')) | 1283 _('ambiguous identifier')) |
1352 | 1353 |
1353 if not getattr(self, 'filteredrevs', None): | 1354 if not getattr(self, 'filteredrevs', None): |
1354 try: | 1355 try: |
1355 length = max(self.index.shortest(node), minlength) | 1356 length = max(self.index.shortest(node), minlength) |
1356 return disambiguate(hexnode, length) | 1357 return disambiguate(hexnode, length) |
1357 except RevlogError: | 1358 except error.RevlogError: |
1358 if node != wdirid: | 1359 if node != wdirid: |
1359 raise LookupError(node, self.indexfile, _('no node')) | 1360 raise LookupError(node, self.indexfile, _('no node')) |
1360 except AttributeError: | 1361 except AttributeError: |
1361 # Fall through to pure code | 1362 # Fall through to pure code |
1362 pass | 1363 pass |
1696 return text, True | 1697 return text, True |
1697 if not operation in ('read', 'write'): | 1698 if not operation in ('read', 'write'): |
1698 raise ProgrammingError(_("invalid '%s' operation ") % (operation)) | 1699 raise ProgrammingError(_("invalid '%s' operation ") % (operation)) |
1699 # Check all flags are known. | 1700 # Check all flags are known. |
1700 if flags & ~REVIDX_KNOWN_FLAGS: | 1701 if flags & ~REVIDX_KNOWN_FLAGS: |
1701 raise RevlogError(_("incompatible revision flag '%#x'") % | 1702 raise error.RevlogError(_("incompatible revision flag '%#x'") % |
1702 (flags & ~REVIDX_KNOWN_FLAGS)) | 1703 (flags & ~REVIDX_KNOWN_FLAGS)) |
1703 validatehash = True | 1704 validatehash = True |
1704 # Depending on the operation (read or write), the order might be | 1705 # Depending on the operation (read or write), the order might be |
1705 # reversed due to non-commutative transforms. | 1706 # reversed due to non-commutative transforms. |
1706 orderedflags = REVIDX_FLAGS_ORDER | 1707 orderedflags = REVIDX_FLAGS_ORDER |
1707 if operation == 'write': | 1708 if operation == 'write': |
1713 if flag & flags: | 1714 if flag & flags: |
1714 vhash = True | 1715 vhash = True |
1715 | 1716 |
1716 if flag not in self._flagprocessors: | 1717 if flag not in self._flagprocessors: |
1717 message = _("missing processor for flag '%#x'") % (flag) | 1718 message = _("missing processor for flag '%#x'") % (flag) |
1718 raise RevlogError(message) | 1719 raise error.RevlogError(message) |
1719 | 1720 |
1720 processor = self._flagprocessors[flag] | 1721 processor = self._flagprocessors[flag] |
1721 if processor is not None: | 1722 if processor is not None: |
1722 readtransform, writetransform, rawtransform = processor | 1723 readtransform, writetransform, rawtransform = processor |
1723 | 1724 |
1742 p1, p2 = self.parents(node) | 1743 p1, p2 = self.parents(node) |
1743 if node != self.hash(text, p1, p2): | 1744 if node != self.hash(text, p1, p2): |
1744 revornode = rev | 1745 revornode = rev |
1745 if revornode is None: | 1746 if revornode is None: |
1746 revornode = templatefilters.short(hex(node)) | 1747 revornode = templatefilters.short(hex(node)) |
1747 raise RevlogError(_("integrity check failed on %s:%s") | 1748 raise error.RevlogError(_("integrity check failed on %s:%s") |
1748 % (self.indexfile, pycompat.bytestr(revornode))) | 1749 % (self.indexfile, pycompat.bytestr(revornode))) |
1749 except RevlogError: | 1750 except error.RevlogError: |
1750 if self._censorable and _censoredtext(text): | 1751 if self._censorable and _censoredtext(text): |
1751 raise error.CensoredNodeError(self.indexfile, node, text) | 1752 raise error.CensoredNodeError(self.indexfile, node, text) |
1752 raise | 1753 raise |
1753 | 1754 |
1754 def _enforceinlinesize(self, tr, fp=None): | 1755 def _enforceinlinesize(self, tr, fp=None): |
1763 (self.start(tiprev) + self.length(tiprev)) < _maxinline): | 1764 (self.start(tiprev) + self.length(tiprev)) < _maxinline): |
1764 return | 1765 return |
1765 | 1766 |
1766 trinfo = tr.find(self.indexfile) | 1767 trinfo = tr.find(self.indexfile) |
1767 if trinfo is None: | 1768 if trinfo is None: |
1768 raise RevlogError(_("%s not found in the transaction") | 1769 raise error.RevlogError(_("%s not found in the transaction") |
1769 % self.indexfile) | 1770 % self.indexfile) |
1770 | 1771 |
1771 trindex = trinfo[2] | 1772 trindex = trinfo[2] |
1772 if trindex is not None: | 1773 if trindex is not None: |
1773 dataoff = self.start(trindex) | 1774 dataoff = self.start(trindex) |
1774 else: | 1775 else: |
1815 flags - the known flags to set on the revision | 1816 flags - the known flags to set on the revision |
1816 deltacomputer - an optional deltacomputer instance shared between | 1817 deltacomputer - an optional deltacomputer instance shared between |
1817 multiple calls | 1818 multiple calls |
1818 """ | 1819 """ |
1819 if link == nullrev: | 1820 if link == nullrev: |
1820 raise RevlogError(_("attempted to add linkrev -1 to %s") | 1821 raise error.RevlogError(_("attempted to add linkrev -1 to %s") |
1821 % self.indexfile) | 1822 % self.indexfile) |
1822 | 1823 |
1823 if flags: | 1824 if flags: |
1824 node = node or self.hash(text, p1, p2) | 1825 node = node or self.hash(text, p1, p2) |
1825 | 1826 |
1826 rawtext, validatehash = self._processflags(text, flags, 'write') | 1827 rawtext, validatehash = self._processflags(text, flags, 'write') |
1829 # cachedelta. | 1830 # cachedelta. |
1830 if rawtext != text: | 1831 if rawtext != text: |
1831 cachedelta = None | 1832 cachedelta = None |
1832 | 1833 |
1833 if len(rawtext) > _maxentrysize: | 1834 if len(rawtext) > _maxentrysize: |
1834 raise RevlogError( | 1835 raise error.RevlogError( |
1835 _("%s: size of %d bytes exceeds maximum revlog storage of 2GiB") | 1836 _("%s: size of %d bytes exceeds maximum revlog storage of 2GiB") |
1836 % (self.indexfile, len(rawtext))) | 1837 % (self.indexfile, len(rawtext))) |
1837 | 1838 |
1838 node = node or self.hash(rawtext, p1, p2) | 1839 node = node or self.hash(rawtext, p1, p2) |
1839 if node in self.nodemap: | 1840 if node in self.nodemap: |
1914 | 1915 |
1915 if t == 'x': | 1916 if t == 'x': |
1916 try: | 1917 try: |
1917 return _zlibdecompress(data) | 1918 return _zlibdecompress(data) |
1918 except zlib.error as e: | 1919 except zlib.error as e: |
1919 raise RevlogError(_('revlog decompress error: %s') % | 1920 raise error.RevlogError(_('revlog decompress error: %s') % |
1920 stringutil.forcebytestr(e)) | 1921 stringutil.forcebytestr(e)) |
1921 # '\0' is more common than 'u' so it goes first. | 1922 # '\0' is more common than 'u' so it goes first. |
1922 elif t == '\0': | 1923 elif t == '\0': |
1923 return data | 1924 return data |
1924 elif t == 'u': | 1925 elif t == 'u': |
1925 return util.buffer(data, 1) | 1926 return util.buffer(data, 1) |
1930 try: | 1931 try: |
1931 engine = util.compengines.forrevlogheader(t) | 1932 engine = util.compengines.forrevlogheader(t) |
1932 compressor = engine.revlogcompressor() | 1933 compressor = engine.revlogcompressor() |
1933 self._decompressors[t] = compressor | 1934 self._decompressors[t] = compressor |
1934 except KeyError: | 1935 except KeyError: |
1935 raise RevlogError(_('unknown compression type %r') % t) | 1936 raise error.RevlogError(_('unknown compression type %r') % t) |
1936 | 1937 |
1937 return compressor.decompress(data) | 1938 return compressor.decompress(data) |
1938 | 1939 |
1939 def _addrevision(self, node, rawtext, transaction, link, p1, p2, flags, | 1940 def _addrevision(self, node, rawtext, transaction, link, p1, p2, flags, |
1940 cachedelta, ifh, dfh, alwayscache=False, | 1941 cachedelta, ifh, dfh, alwayscache=False, |
1951 invariants: | 1952 invariants: |
1952 - rawtext is optional (can be None); if not set, cachedelta must be set. | 1953 - rawtext is optional (can be None); if not set, cachedelta must be set. |
1953 if both are set, they must correspond to each other. | 1954 if both are set, they must correspond to each other. |
1954 """ | 1955 """ |
1955 if node == nullid: | 1956 if node == nullid: |
1956 raise RevlogError(_("%s: attempt to add null revision") % | 1957 raise error.RevlogError(_("%s: attempt to add null revision") % |
1957 (self.indexfile)) | 1958 self.indexfile) |
1958 if node == wdirid or node in wdirfilenodeids: | 1959 if node == wdirid or node in wdirfilenodeids: |
1959 raise RevlogError(_("%s: attempt to add wdir revision") % | 1960 raise error.RevlogError(_("%s: attempt to add wdir revision") % |
1960 (self.indexfile)) | 1961 self.indexfile) |
1961 | 1962 |
1962 if self._inline: | 1963 if self._inline: |
1963 fh = ifh | 1964 fh = ifh |
1964 else: | 1965 else: |
1965 fh = dfh | 1966 fh = dfh |