equal
deleted
inserted
replaced
1500 |
1500 |
1501 raise LookupError(id, self.indexfile, _('no match found')) |
1501 raise LookupError(id, self.indexfile, _('no match found')) |
1502 |
1502 |
1503 def shortest(self, node, minlength=1): |
1503 def shortest(self, node, minlength=1): |
1504 """Find the shortest unambiguous prefix that matches node.""" |
1504 """Find the shortest unambiguous prefix that matches node.""" |
1505 def isrev(prefix): |
|
1506 try: |
|
1507 i = int(prefix) |
|
1508 # if we are a pure int, then starting with zero will not be |
|
1509 # confused as a rev; or, obviously, if the int is larger |
|
1510 # than the value of the tip rev |
|
1511 if prefix[0] == '0' or i > len(self): |
|
1512 return False |
|
1513 return True |
|
1514 except ValueError: |
|
1515 return False |
|
1516 |
|
1517 def isvalid(prefix): |
1505 def isvalid(prefix): |
1518 try: |
1506 try: |
1519 node = self._partialmatch(prefix) |
1507 node = self._partialmatch(prefix) |
1520 except error.RevlogError: |
1508 except error.RevlogError: |
1521 return False |
1509 return False |
1530 return all(c == 'f' for c in prefix) |
1518 return all(c == 'f' for c in prefix) |
1531 |
1519 |
1532 hexnode = hex(node) |
1520 hexnode = hex(node) |
1533 |
1521 |
1534 def disambiguate(hexnode, minlength): |
1522 def disambiguate(hexnode, minlength): |
|
1523 """Disambiguate against wdirid.""" |
1535 for length in range(minlength, 41): |
1524 for length in range(minlength, 41): |
1536 prefix = hexnode[:length] |
1525 prefix = hexnode[:length] |
1537 if not isrev(prefix) and not maybewdir(prefix): |
1526 if not maybewdir(prefix): |
1538 return prefix |
1527 return prefix |
1539 |
1528 |
1540 if not getattr(self, 'filteredrevs', None): |
1529 if not getattr(self, 'filteredrevs', None): |
1541 try: |
1530 try: |
1542 length = max(self.index.shortest(node), minlength) |
1531 length = max(self.index.shortest(node), minlength) |