Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/revlog.py @ 1214:34706a835d4a
Smarter handling of revlog key errors
Use RevlogError for reporting exceptions
Catch and report RevlogError exceptions at the command parser
author | mpm@selenic.com |
---|---|
date | Wed, 07 Sep 2005 23:38:28 -0700 |
parents | 59bfbdbc38f6 |
children | cde6818e082a |
comparison
equal
deleted
inserted
replaced
1213:db9639b8594c | 1214:34706a835d4a |
---|---|
109 def __init__(self, parser): | 109 def __init__(self, parser): |
110 self.p = parser | 110 self.p = parser |
111 def load(self, key): | 111 def load(self, key): |
112 if self.p.all: return | 112 if self.p.all: return |
113 n = self.p.data.find(key) | 113 n = self.p.data.find(key) |
114 if n < 0: raise KeyError("node " + hex(key)) | 114 if n < 0: |
115 raise KeyError(key) | |
115 pos = n / self.p.s | 116 pos = n / self.p.s |
116 self.p.load(pos) | 117 self.p.load(pos) |
117 def __contains__(self, key): | 118 def __contains__(self, key): |
118 self.p.load() | 119 self.p.load() |
119 return key in self.p.map | 120 return key in self.p.map |
208 def node(self, rev): return (rev < 0) and nullid or self.index[rev][6] | 209 def node(self, rev): return (rev < 0) and nullid or self.index[rev][6] |
209 def rev(self, node): | 210 def rev(self, node): |
210 try: | 211 try: |
211 return self.nodemap[node] | 212 return self.nodemap[node] |
212 except KeyError: | 213 except KeyError: |
213 raise KeyError('%s: no node %s' % (self.indexfile, hex(node))) | 214 raise RevlogError('%s: no node %s' % (self.indexfile, hex(node))) |
214 def linkrev(self, node): return self.index[self.rev(node)][3] | 215 def linkrev(self, node): return self.index[self.rev(node)][3] |
215 def parents(self, node): | 216 def parents(self, node): |
216 if node == nullid: return (nullid, nullid) | 217 if node == nullid: return (nullid, nullid) |
217 return self.index[self.rev(node)][4:6] | 218 return self.index[self.rev(node)][4:6] |
218 | 219 |
288 except (ValueError, OverflowError): | 289 except (ValueError, OverflowError): |
289 c = [] | 290 c = [] |
290 for n in self.nodemap: | 291 for n in self.nodemap: |
291 if hex(n).startswith(id): | 292 if hex(n).startswith(id): |
292 c.append(n) | 293 c.append(n) |
293 if len(c) > 1: raise KeyError("Ambiguous identifier") | 294 if len(c) > 1: raise RevlogError("Ambiguous identifier") |
294 if len(c) < 1: raise KeyError("No match found") | 295 if len(c) < 1: raise RevlogError("No match found") |
295 return c[0] | 296 return c[0] |
296 | 297 |
297 return None | 298 return None |
298 | 299 |
299 def diff(self, a, b): | 300 def diff(self, a, b): |
351 last = last + s | 352 last = last + s |
352 | 353 |
353 text = mdiff.patches(text, bins) | 354 text = mdiff.patches(text, bins) |
354 | 355 |
355 if node != hash(text, p1, p2): | 356 if node != hash(text, p1, p2): |
356 raise IOError("integrity check failed on %s:%d" | 357 raise RevlogError("integrity check failed on %s:%d" |
357 % (self.datafile, rev)) | 358 % (self.datafile, rev)) |
358 | 359 |
359 self.cache = (node, rev, text) | 360 self.cache = (node, rev, text) |
360 return text | 361 return text |
361 | 362 |