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