mercurial/revlog.py
changeset 3153 4fe41a9e4591
parent 3152 d01e4cb2f5f2
child 3210 7240f9e47144
equal deleted inserted replaced
3152:d01e4cb2f5f2 3153:4fe41a9e4591
   761             if rev < 0: rev = self.count() + rev
   761             if rev < 0: rev = self.count() + rev
   762             if rev < 0 or rev >= self.count(): raise ValueError
   762             if rev < 0 or rev >= self.count(): raise ValueError
   763             return self.node(rev)
   763             return self.node(rev)
   764         except (ValueError, OverflowError):
   764         except (ValueError, OverflowError):
   765             pass
   765             pass
   766         # hex(node)[:...]
   766         try:
   767         node = None
   767             # hex(node)[:...]
   768         for n in self.nodemap:
   768             if len(id) % 2 == 0:
   769             if hex(n).startswith(id):
   769                 bin_id = bin(id)
   770                 if node is not None:
   770             else:
   771                     raise RevlogError(_("Ambiguous identifier"))
   771                 bin_id = bin(id[:-1])
   772                 node = n
   772             node = None
   773         if node is not None:
   773             for n in self.nodemap:
   774             return node
   774                 if n.startswith(bin_id) and hex(n).startswith(id):
       
   775                     if node is not None:
       
   776                         raise RevlogError(_("Ambiguous identifier"))
       
   777                     node = n
       
   778             if node is not None:
       
   779                 return node
       
   780         except TypeError:
       
   781             pass
   775 
   782 
   776         # might need fixing if we change hash lengths
   783         # might need fixing if we change hash lengths
   777         if len(id) == 20 and id in self.nodemap:
   784         if len(id) == 20 and id in self.nodemap:
   778             # node
   785             # node
   779             return id
   786             return id