# HG changeset patch # User mpm@selenic.com # Date 1115511096 28800 # Node ID da28286bf6b7d602ef1cf5a7cf4b374f4cd60431 # Parent 9197c26a414becaaf2fec9d2097df99f16441907 Add smart node lookup by substring or by rev number diff -r 9197c26a414b -r da28286bf6b7 mercurial/revlog.py --- a/mercurial/revlog.py Sat May 07 16:10:50 2005 -0800 +++ b/mercurial/revlog.py Sat May 07 16:11:36 2005 -0800 @@ -8,9 +8,12 @@ # This software may be used and distributed according to the terms # of the GNU General Public License, incorporated herein by reference. -import zlib, struct, sha, os, tempfile +import zlib, struct, sha, os, tempfile, binascii from mercurial import mdiff +def hex(node): return binascii.hexlify(node) +def bin(node): return binascii.unhexlify(node) + def compress(text): return zlib.compress(text) @@ -32,7 +35,7 @@ self.index = [] self.opener = opener self.cache = None - self.nodemap = { -1: nullid, nullid: -1 } + self.nodemap = {nullid: -1} # read the whole index for now, handle on-demand later try: n = 0 @@ -60,6 +63,21 @@ def end(self, rev): return self.start(rev) + self.length(rev) def base(self, rev): return self.index[rev][2] + def lookup(self, id): + try: + rev = int(id) + return self.node(rev) + except ValueError: + c = [] + for n in self.nodemap: + if id in hex(n): + c.append(n) + if len(c) > 1: raise KeyError("Ambiguous identifier") + if len(c) < 1: raise KeyError + return c[0] + + return None + def revisions(self, list): # this can be optimized to do spans, etc # be stupid for now @@ -73,7 +91,7 @@ return mdiff.patch(text, patch) def revision(self, node): - if node is nullid: return "" + if node == nullid: return "" if self.cache and self.cache[0] == node: return self.cache[2] text = None