Mercurial > hg > mercurial-crew-with-dirclash
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 |