comparison mercurial/revlog.py @ 2801:81d7db1aa0fb

revlog.lookup optimization
author Matt Mackall <mpm@selenic.com>
date Thu, 03 Aug 2006 21:24:19 -0500
parents f23973ea3107
children 345bac2bc4ec
comparison
equal deleted inserted replaced
2800:557ea210fd9f 2801:81d7db1aa0fb
742 continue 742 continue
743 return c 743 return c
744 744
745 def lookup(self, id): 745 def lookup(self, id):
746 """locate a node based on revision number or subset of hex nodeid""" 746 """locate a node based on revision number or subset of hex nodeid"""
747 if id in self.nodemap:
748 return id
749 if type(id) == type(0): 747 if type(id) == type(0):
750 return self.node(id) 748 return self.node(id)
751 try: 749 try:
752 rev = int(id) 750 rev = int(id)
753 if str(rev) != id: raise ValueError 751 if str(rev) != id: raise ValueError
758 c = [] 756 c = []
759 for n in self.nodemap: 757 for n in self.nodemap:
760 if hex(n).startswith(id): 758 if hex(n).startswith(id):
761 c.append(n) 759 c.append(n)
762 if len(c) > 1: raise RevlogError(_("Ambiguous identifier")) 760 if len(c) > 1: raise RevlogError(_("Ambiguous identifier"))
763 if len(c) < 1: raise RevlogError(_("No match found")) 761 if len(c) == 1: return c[0]
764 return c[0] 762
765 763 # might need fixing if we change hash lengths
766 return None 764 if len(id) == 20 and id in self.nodemap:
765 return id
766
767 raise RevlogError(_("No match found"))
767 768
768 def diff(self, a, b): 769 def diff(self, a, b):
769 """return a delta between two revisions""" 770 """return a delta between two revisions"""
770 return mdiff.textdiff(a, b) 771 return mdiff.textdiff(a, b)
771 772