# HG changeset patch # User Benoit Boissinot # Date 2006-09-24 11:52:27 # Node ID 4fe41a9e4591704ada8b36b02280b25ab9cf9a92 # Parent d01e4cb2f5f2553dfc8733a73ce1df206146662b 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 diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -763,15 +763,22 @@ class revlog(object): return self.node(rev) except (ValueError, OverflowError): pass - # hex(node)[:...] - node = None - for n in self.nodemap: - if hex(n).startswith(id): - if node is not None: - raise RevlogError(_("Ambiguous identifier")) - node = n - if node is not None: - return node + try: + # hex(node)[:...] + if len(id) % 2 == 0: + bin_id = bin(id) + else: + bin_id = bin(id[:-1]) + node = None + for n in self.nodemap: + if n.startswith(bin_id) and hex(n).startswith(id): + if node is not None: + raise RevlogError(_("Ambiguous identifier")) + node = n + if node is not None: + return node + except TypeError: + pass # might need fixing if we change hash lengths if len(id) == 20 and id in self.nodemap: