comparison mercurial/revlog.py @ 3153:4fe41a9e4591

optimize revlog.lookup when passed hex(node)[:...] Instead of converting each node from the filenode to a hex form, convert the arg to a bin form. For a revlog with 26711 entries, doing 100 lookup: before: ~18s after : ~13s
author Benoit Boissinot <benoit.boissinot@ens-lyon.org>
date Sun, 24 Sep 2006 13:52:27 +0200
parents d01e4cb2f5f2
children 7240f9e47144
comparison
equal deleted inserted replaced
3152:d01e4cb2f5f2 3153:4fe41a9e4591
761 if rev < 0: rev = self.count() + rev 761 if rev < 0: rev = self.count() + rev
762 if rev < 0 or rev >= self.count(): raise ValueError 762 if rev < 0 or rev >= self.count(): raise ValueError
763 return self.node(rev) 763 return self.node(rev)
764 except (ValueError, OverflowError): 764 except (ValueError, OverflowError):
765 pass 765 pass
766 # hex(node)[:...] 766 try:
767 node = None 767 # hex(node)[:...]
768 for n in self.nodemap: 768 if len(id) % 2 == 0:
769 if hex(n).startswith(id): 769 bin_id = bin(id)
770 if node is not None: 770 else:
771 raise RevlogError(_("Ambiguous identifier")) 771 bin_id = bin(id[:-1])
772 node = n 772 node = None
773 if node is not None: 773 for n in self.nodemap:
774 return node 774 if n.startswith(bin_id) and hex(n).startswith(id):
775 if node is not None:
776 raise RevlogError(_("Ambiguous identifier"))
777 node = n
778 if node is not None:
779 return node
780 except TypeError:
781 pass
775 782
776 # might need fixing if we change hash lengths 783 # might need fixing if we change hash lengths
777 if len(id) == 20 and id in self.nodemap: 784 if len(id) == 20 and id in self.nodemap:
778 # node 785 # node
779 return id 786 return id