Mercurial > hg
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: |