# HG changeset patch # User Benoit Boissinot # Date 1159098745 -7200 # Node ID d01e4cb2f5f2553dfc8733a73ce1df206146662b # Parent 6719b3dd7d504606725ae172afccce93864aca68 cleanups in revlog.lookup - add comments - do a clean separation of the different cases - don't use a list of each possible node when doing the lookup, just keep the previous entry diff -r 6719b3dd7d50 -r d01e4cb2f5f2 mercurial/revlog.py --- a/mercurial/revlog.py Fri Sep 22 16:12:39 2006 -0500 +++ b/mercurial/revlog.py Sun Sep 24 13:52:25 2006 +0200 @@ -747,25 +747,35 @@ return c def lookup(self, id): - """locate a node based on revision number or subset of hex nodeid""" + """locate a node based on: + - revision number or str(revision number) + - nodeid or subset of hex nodeid + """ if type(id) == type(0): + # rev return self.node(id) try: + # str(rev) rev = int(id) if str(rev) != id: raise ValueError if rev < 0: rev = self.count() + rev if rev < 0 or rev >= self.count(): raise ValueError return self.node(rev) except (ValueError, OverflowError): - c = [] - for n in self.nodemap: - if hex(n).startswith(id): - c.append(n) - if len(c) > 1: raise RevlogError(_("Ambiguous identifier")) - if len(c) == 1: return c[0] + 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 # might need fixing if we change hash lengths if len(id) == 20 and id in self.nodemap: + # node return id raise RevlogError(_("No match found"))