comparison mercurial/revlog.py @ 3930:01d98d68d697

Add revlog.LookupError exception, and use it instead of RevlogError. Remove repo.LookupError, which devolves to the revlog version.
author Brendan Cully <brendan@kublai.com>
date Mon, 18 Dec 2006 12:22:43 -0800
parents 4df475e22248
children 40030c1b6bc6
comparison
equal deleted inserted replaced
3929:33988aaa1652 3930:01d98d68d697
279 self.p.map[key] = val 279 self.p.map[key] = val
280 def __delitem__(self, key): 280 def __delitem__(self, key):
281 del self.p.map[key] 281 del self.p.map[key]
282 282
283 class RevlogError(Exception): pass 283 class RevlogError(Exception): pass
284 class LookupError(RevlogError): pass
284 285
285 class revlog(object): 286 class revlog(object):
286 """ 287 """
287 the underlying revision storage object 288 the underlying revision storage object
288 289
469 return rev == nullrev and nullid or self.index[rev][-1] 470 return rev == nullrev and nullid or self.index[rev][-1]
470 def rev(self, node): 471 def rev(self, node):
471 try: 472 try:
472 return self.nodemap[node] 473 return self.nodemap[node]
473 except KeyError: 474 except KeyError:
474 raise RevlogError(_('%s: no node %s') % (self.indexfile, hex(node))) 475 raise LookupError(_('%s: no node %s') % (self.indexfile, hex(node)))
475 def linkrev(self, node): 476 def linkrev(self, node):
476 return (node == nullid) and nullrev or self.index[self.rev(node)][-4] 477 return (node == nullid) and nullrev or self.index[self.rev(node)][-4]
477 def parents(self, node): 478 def parents(self, node):
478 if node == nullid: return (nullid, nullid) 479 if node == nullid: return (nullid, nullid)
479 r = self.rev(node) 480 r = self.rev(node)
764 # odds of a binary node being all hex in ASCII are 1 in 10**25 765 # odds of a binary node being all hex in ASCII are 1 in 10**25
765 try: 766 try:
766 node = id 767 node = id
767 r = self.rev(node) # quick search the index 768 r = self.rev(node) # quick search the index
768 return node 769 return node
769 except RevlogError: 770 except LookupError:
770 pass # may be partial hex id 771 pass # may be partial hex id
771 try: 772 try:
772 # str(rev) 773 # str(rev)
773 rev = int(id) 774 rev = int(id)
774 if str(rev) != id: raise ValueError 775 if str(rev) != id: raise ValueError
793 bin_id = bin(id[:len(id) & ~1]) # grab an even number of digits 794 bin_id = bin(id[:len(id) & ~1]) # grab an even number of digits
794 node = None 795 node = None
795 for n in self.nodemap: 796 for n in self.nodemap:
796 if n.startswith(bin_id) and hex(n).startswith(id): 797 if n.startswith(bin_id) and hex(n).startswith(id):
797 if node is not None: 798 if node is not None:
798 raise RevlogError(_("Ambiguous identifier")) 799 raise LookupError(_("Ambiguous identifier"))
799 node = n 800 node = n
800 if node is not None: 801 if node is not None:
801 return node 802 return node
802 except TypeError: 803 except TypeError:
803 pass 804 pass
813 return n 814 return n
814 n = self._partialmatch(id) 815 n = self._partialmatch(id)
815 if n: 816 if n:
816 return n 817 return n
817 818
818 raise RevlogError(_("No match found")) 819 raise LookupError(_("No match found"))
819 820
820 def cmp(self, node, text): 821 def cmp(self, node, text):
821 """compare text with a given file revision""" 822 """compare text with a given file revision"""
822 p1, p2 = self.parents(node) 823 p1, p2 = self.parents(node)
823 return hash(text, p1, p2) != node 824 return hash(text, p1, p2) != node
1153 continue 1154 continue
1154 delta = chunk[80:] 1155 delta = chunk[80:]
1155 1156
1156 for p in (p1, p2): 1157 for p in (p1, p2):
1157 if not p in self.nodemap: 1158 if not p in self.nodemap:
1158 raise RevlogError(_("unknown parent %s") % short(p)) 1159 raise LookupError(_("unknown parent %s") % short(p))
1159 1160
1160 if not chain: 1161 if not chain:
1161 # retrieve the parent revision of the delta chain 1162 # retrieve the parent revision of the delta chain
1162 chain = p1 1163 chain = p1
1163 if not chain in self.nodemap: 1164 if not chain in self.nodemap:
1164 raise RevlogError(_("unknown base %s") % short(chain[:4])) 1165 raise LookupError(_("unknown base %s") % short(chain[:4]))
1165 1166
1166 # full versions are inserted when the needed deltas become 1167 # full versions are inserted when the needed deltas become
1167 # comparable to the uncompressed text or when the previous 1168 # comparable to the uncompressed text or when the previous
1168 # version is not the one we have a delta against. We use 1169 # version is not the one we have a delta against. We use
1169 # the size of the previous full rev as a proxy for the 1170 # the size of the previous full rev as a proxy for the