Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/revlog.py @ 6228:c0c4c7b1e8d3
revlog: report node and file when lookup fails
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Tue, 11 Mar 2008 17:42:29 -0500 |
parents | e75aab656f46 |
children | 7c8101b5ceb1 |
comparison
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 |