Mercurial > hg > mercurial-crew-with-dirclash
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 |