comparison mercurial/revlog.py @ 3152:d01e4cb2f5f2

cleanups in revlog.lookup - add comments - do a clean separation of the different cases - don't use a list of each possible node when doing the lookup, just keep the previous entry
author Benoit Boissinot <benoit.boissinot@ens-lyon.org>
date Sun, 24 Sep 2006 13:52:25 +0200
parents 1fd1cdcc4200
children 4fe41a9e4591
comparison
equal deleted inserted replaced
3151:6719b3dd7d50 3152:d01e4cb2f5f2
745 elif pn == nullid: 745 elif pn == nullid:
746 continue 746 continue
747 return c 747 return c
748 748
749 def lookup(self, id): 749 def lookup(self, id):
750 """locate a node based on revision number or subset of hex nodeid""" 750 """locate a node based on:
751 - revision number or str(revision number)
752 - nodeid or subset of hex nodeid
753 """
751 if type(id) == type(0): 754 if type(id) == type(0):
755 # rev
752 return self.node(id) 756 return self.node(id)
753 try: 757 try:
758 # str(rev)
754 rev = int(id) 759 rev = int(id)
755 if str(rev) != id: raise ValueError 760 if str(rev) != id: raise ValueError
756 if rev < 0: rev = self.count() + rev 761 if rev < 0: rev = self.count() + rev
757 if rev < 0 or rev >= self.count(): raise ValueError 762 if rev < 0 or rev >= self.count(): raise ValueError
758 return self.node(rev) 763 return self.node(rev)
759 except (ValueError, OverflowError): 764 except (ValueError, OverflowError):
760 c = [] 765 pass
761 for n in self.nodemap: 766 # hex(node)[:...]
762 if hex(n).startswith(id): 767 node = None
763 c.append(n) 768 for n in self.nodemap:
764 if len(c) > 1: raise RevlogError(_("Ambiguous identifier")) 769 if hex(n).startswith(id):
765 if len(c) == 1: return c[0] 770 if node is not None:
771 raise RevlogError(_("Ambiguous identifier"))
772 node = n
773 if node is not None:
774 return node
766 775
767 # might need fixing if we change hash lengths 776 # might need fixing if we change hash lengths
768 if len(id) == 20 and id in self.nodemap: 777 if len(id) == 20 and id in self.nodemap:
778 # node
769 return id 779 return id
770 780
771 raise RevlogError(_("No match found")) 781 raise RevlogError(_("No match found"))
772 782
773 def cmp(self, node, text): 783 def cmp(self, node, text):