mercurial/revlog.py
changeset 47294 93a0abe098e7
parent 47285 46b828b85eb7
child 47324 0a3fa41fa719
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: