mercurial/revlog.py
changeset 6228 c0c4c7b1e8d3
parent 6212 e75aab656f46
child 6261 7c8101b5ceb1
equal deleted inserted replaced
6227:4c1aa6affe60 6228:c0c4c7b1e8d3
    31 
    31 
    32 class RevlogError(Exception):
    32 class RevlogError(Exception):
    33     pass
    33     pass
    34 
    34 
    35 class LookupError(RevlogError):
    35 class LookupError(RevlogError):
    36     def __init__(self, name, message=None):
    36     def __init__(self, name, index, message):
    37         if message is None:
       
    38             message = _('not found: %s') % name
       
    39         RevlogError.__init__(self, message)
       
    40         self.name = name
    37         self.name = name
       
    38         if isinstance(name, str) and len(name) == 20:
       
    39             name = short(name)
       
    40         RevlogError.__init__(self, _('%s@%s: %s') % (index, name, message))
    41 
    41 
    42 def getoffset(q):
    42 def getoffset(q):
    43     return int(q >> 16)
    43     return int(q >> 16)
    44 
    44 
    45 def gettype(q):
    45 def gettype(q):
   517 
   517 
   518     def rev(self, node):
   518     def rev(self, node):
   519         try:
   519         try:
   520             return self.nodemap[node]
   520             return self.nodemap[node]
   521         except KeyError:
   521         except KeyError:
   522             raise LookupError(hex(node), _('%s: no node %s') % (self.indexfile, hex(node)))
   522             raise LookupError(node, self.indexfile, _('no node'))
   523     def node(self, rev):
   523     def node(self, rev):
   524         return self.index[rev][7]
   524         return self.index[rev][7]
   525     def linkrev(self, node):
   525     def linkrev(self, node):
   526         return self.index[self.rev(node)][4]
   526         return self.index[self.rev(node)][4]
   527     def parents(self, node):
   527     def parents(self, node):
   837                 bin_id = bin(id[:len(id) & ~1]) # grab an even number of digits
   837                 bin_id = bin(id[:len(id) & ~1]) # grab an even number of digits
   838                 node = None
   838                 node = None
   839                 for n in self.nodemap:
   839                 for n in self.nodemap:
   840                     if n.startswith(bin_id) and hex(n).startswith(id):
   840                     if n.startswith(bin_id) and hex(n).startswith(id):
   841                         if node is not None:
   841                         if node is not None:
   842                             raise LookupError(hex(node),
   842                             raise LookupError(id, self.indexfile,
   843                                               _("Ambiguous identifier"))
   843                                               _('ambiguous identifier'))
   844                         node = n
   844                         node = n
   845                 if node is not None:
   845                 if node is not None:
   846                     return node
   846                     return node
   847             except TypeError:
   847             except TypeError:
   848                 pass
   848                 pass
   857             return n
   857             return n
   858         n = self._partialmatch(id)
   858         n = self._partialmatch(id)
   859         if n:
   859         if n:
   860             return n
   860             return n
   861 
   861 
   862         raise LookupError(id, _("No match found"))
   862         raise LookupError(id, self.indexfile, _('no match found'))
   863 
   863 
   864     def cmp(self, node, text):
   864     def cmp(self, node, text):
   865         """compare text with a given file revision"""
   865         """compare text with a given file revision"""
   866         p1, p2 = self.parents(node)
   866         p1, p2 = self.parents(node)
   867         return hash(text, p1, p2) != node
   867         return hash(text, p1, p2) != node
  1168             delta = buffer(chunk, 80)
  1168             delta = buffer(chunk, 80)
  1169             del chunk
  1169             del chunk
  1170 
  1170 
  1171             for p in (p1, p2):
  1171             for p in (p1, p2):
  1172                 if not p in self.nodemap:
  1172                 if not p in self.nodemap:
  1173                     raise LookupError(hex(p), _("unknown parent %s") % short(p))
  1173                     raise LookupError(p, self.indexfile, _('unknown parent'))
  1174 
  1174 
  1175             if not chain:
  1175             if not chain:
  1176                 # retrieve the parent revision of the delta chain
  1176                 # retrieve the parent revision of the delta chain
  1177                 chain = p1
  1177                 chain = p1
  1178                 if not chain in self.nodemap:
  1178                 if not chain in self.nodemap:
  1179                     raise LookupError(hex(chain), _("unknown base %s") % short(chain[:4]))
  1179                     raise LookupError(chain, self.indexfile, _('unknown base'))
  1180 
  1180 
  1181             # full versions are inserted when the needed deltas become
  1181             # full versions are inserted when the needed deltas become
  1182             # comparable to the uncompressed text or when the previous
  1182             # comparable to the uncompressed text or when the previous
  1183             # version is not the one we have a delta against. We use
  1183             # version is not the one we have a delta against. We use
  1184             # the size of the previous full rev as a proxy for the
  1184             # the size of the previous full rev as a proxy for the