# HG changeset patch # User Benoit Boissinot # Date 1159098747 -7200 # 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 -r d01e4cb2f5f2 -r 4fe41a9e4591 mercurial/revlog.py --- a/mercurial/revlog.py Sun Sep 24 13:52:25 2006 +0200 +++ b/mercurial/revlog.py Sun Sep 24 13:52:27 2006 +0200 @@ -763,15 +763,22 @@ 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: