mercurial/revlog.py
changeset 3152 d01e4cb2f5f2
parent 3139 1fd1cdcc4200
child 3153 4fe41a9e4591
equal deleted inserted replaced
3151:6719b3dd7d50 3152:d01e4cb2f5f2
   745                 elif pn == nullid:
   745                 elif pn == nullid:
   746                     continue
   746                     continue
   747         return c
   747         return c
   748 
   748 
   749     def lookup(self, id):
   749     def lookup(self, id):
   750         """locate a node based on revision number or subset of hex nodeid"""
   750         """locate a node based on:
       
   751             - revision number or str(revision number)
       
   752             - nodeid or subset of hex nodeid
       
   753         """
   751         if type(id) == type(0):
   754         if type(id) == type(0):
       
   755             # rev
   752             return self.node(id)
   756             return self.node(id)
   753         try:
   757         try:
       
   758             # str(rev)
   754             rev = int(id)
   759             rev = int(id)
   755             if str(rev) != id: raise ValueError
   760             if str(rev) != id: raise ValueError
   756             if rev < 0: rev = self.count() + rev
   761             if rev < 0: rev = self.count() + rev
   757             if rev < 0 or rev >= self.count(): raise ValueError
   762             if rev < 0 or rev >= self.count(): raise ValueError
   758             return self.node(rev)
   763             return self.node(rev)
   759         except (ValueError, OverflowError):
   764         except (ValueError, OverflowError):
   760             c = []
   765             pass
   761             for n in self.nodemap:
   766         # hex(node)[:...]
   762                 if hex(n).startswith(id):
   767         node = None
   763                     c.append(n)
   768         for n in self.nodemap:
   764             if len(c) > 1: raise RevlogError(_("Ambiguous identifier"))
   769             if hex(n).startswith(id):
   765             if len(c) == 1: return c[0]
   770                 if node is not None:
       
   771                     raise RevlogError(_("Ambiguous identifier"))
       
   772                 node = n
       
   773         if node is not None:
       
   774             return node
   766 
   775 
   767         # might need fixing if we change hash lengths
   776         # might need fixing if we change hash lengths
   768         if len(id) == 20 and id in self.nodemap:
   777         if len(id) == 20 and id in self.nodemap:
       
   778             # node
   769             return id
   779             return id
   770 
   780 
   771         raise RevlogError(_("No match found"))
   781         raise RevlogError(_("No match found"))
   772 
   782 
   773     def cmp(self, node, text):
   783     def cmp(self, node, text):