# HG changeset patch # User Matt Mackall # Date 2008-11-13 01:11:34 # Node ID ec3aafa84d448c7dd32f82b9b1ad33335c3fde27 # Parent ad7f736f3214c1f3f2eca54b882b0faad155fa19 lookup: speed up partial lookup diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -873,16 +873,16 @@ class revlog(object): if len(id) < 40: try: # hex(node)[:...] - bin_id = bin(id[:len(id) & ~1]) # grab an even number of digits - node = None - for n in self.nodemap: - if n.startswith(bin_id) and hex(n).startswith(id): - if node is not None: - raise LookupError(id, self.indexfile, - _('ambiguous identifier')) - node = n - if node is not None: - return node + l = len(id) / 2 # grab an even number of digits + bin_id = bin(id[:l*2]) + nl = [n for n in self.nodemap if n[:l] == bin_id] + nl = [n for n in nl if hex(n).startswith(id)] + if len(nl) > 0: + if len(nl) == 1: + return nl[0] + raise LookupError(id, self.indexfile, + _('ambiguous identifier')) + return None except TypeError: pass