comparison mercurial/revlog.py @ 47294:93a0abe098e7

revlog: avoid raising no-arg RevlogError for internal flow control I'm about to make RevlogError require a `message` argument and this code was failing. This patch refactors it to not raise an exception for intra-function flow control. Differential Revision: https://phab.mercurial-scm.org/D10740
author Martin von Zweigbergk <martinvonz@google.com>
date Tue, 18 May 2021 19:33:09 -0700
parents 46b828b85eb7
children 0a3fa41fa719
comparison
equal deleted inserted replaced
47293:7a769ac49637 47294:93a0abe098e7
1536 pass 1536 pass
1537 1537
1538 def _partialmatch(self, id): 1538 def _partialmatch(self, id):
1539 # we don't care wdirfilenodeids as they should be always full hash 1539 # we don't care wdirfilenodeids as they should be always full hash
1540 maybewdir = self.nodeconstants.wdirhex.startswith(id) 1540 maybewdir = self.nodeconstants.wdirhex.startswith(id)
1541 ambiguous = False
1541 try: 1542 try:
1542 partial = self.index.partialmatch(id) 1543 partial = self.index.partialmatch(id)
1543 if partial and self.hasnode(partial): 1544 if partial and self.hasnode(partial):
1544 if maybewdir: 1545 if maybewdir:
1545 # single 'ff...' match in radix tree, ambiguous with wdir 1546 # single 'ff...' match in radix tree, ambiguous with wdir
1546 raise error.RevlogError 1547 ambiguous = True
1547 return partial 1548 else:
1548 if maybewdir: 1549 return partial
1550 elif maybewdir:
1549 # no 'ff...' match in radix tree, wdir identified 1551 # no 'ff...' match in radix tree, wdir identified
1550 raise error.WdirUnsupported 1552 raise error.WdirUnsupported
1551 return None 1553 else:
1554 return None
1552 except error.RevlogError: 1555 except error.RevlogError:
1553 # parsers.c radix tree lookup gave multiple matches 1556 # parsers.c radix tree lookup gave multiple matches
1554 # fast path: for unfiltered changelog, radix tree is accurate 1557 # fast path: for unfiltered changelog, radix tree is accurate
1555 if not getattr(self, 'filteredrevs', None): 1558 if not getattr(self, 'filteredrevs', None):
1556 raise error.AmbiguousPrefixLookupError( 1559 ambiguous = True
1557 id, self.display_id, _(b'ambiguous identifier')
1558 )
1559 # fall through to slow path that filters hidden revisions 1560 # fall through to slow path that filters hidden revisions
1560 except (AttributeError, ValueError): 1561 except (AttributeError, ValueError):
1561 # we are pure python, or key was too short to search radix tree 1562 # we are pure python, or key was too short to search radix tree
1562 pass 1563 pass
1564 if ambiguous:
1565 raise error.AmbiguousPrefixLookupError(
1566 id, self.display_id, _(b'ambiguous identifier')
1567 )
1563 1568
1564 if id in self._pcache: 1569 if id in self._pcache:
1565 return self._pcache[id] 1570 return self._pcache[id]
1566 1571
1567 if len(id) <= 40: 1572 if len(id) <= 40: