comparison hgext/convert/hg.py @ 9532:989cb39d1df4

convert/hg: handle bogus copy records (issue1843)
author Patrick Mezard <pmezard@gmail.com>
date Wed, 07 Oct 2009 18:52:01 +0200
parents a2f36a082449
children 4333b9744419
comparison
equal deleted inserted replaced
9531:a2f36a082449 9532:989cb39d1df4
272 if not parents: 272 if not parents:
273 files = sorted(ctx.manifest()) 273 files = sorted(ctx.manifest())
274 if self.ignoreerrors: 274 if self.ignoreerrors:
275 # calling getcopies() is a simple way to detect missing 275 # calling getcopies() is a simple way to detect missing
276 # revlogs and populate self.ignored 276 # revlogs and populate self.ignored
277 self.getcopies(ctx, files) 277 self.getcopies(ctx, parents, files)
278 return [(f, rev) for f in files if f not in self.ignored], {} 278 return [(f, rev) for f in files if f not in self.ignored], {}
279 if self._changescache and self._changescache[0] == rev: 279 if self._changescache and self._changescache[0] == rev:
280 m, a, r = self._changescache[1] 280 m, a, r = self._changescache[1]
281 else: 281 else:
282 m, a, r = self.repo.status(parents[0].node(), ctx.node())[:3] 282 m, a, r = self.repo.status(parents[0].node(), ctx.node())[:3]
283 # getcopies() detects missing revlogs early, run it before 283 # getcopies() detects missing revlogs early, run it before
284 # filtering the changes. 284 # filtering the changes.
285 copies = self.getcopies(ctx, m + a) 285 copies = self.getcopies(ctx, parents, m + a)
286 changes = [(name, rev) for name in m + a + r 286 changes = [(name, rev) for name in m + a + r
287 if name not in self.ignored] 287 if name not in self.ignored]
288 return sorted(changes), copies 288 return sorted(changes), copies
289 289
290 def getcopies(self, ctx, files): 290 def getcopies(self, ctx, parents, files):
291 copies = {} 291 copies = {}
292 for name in files: 292 for name in files:
293 if name in self.ignored: 293 if name in self.ignored:
294 continue 294 continue
295 try: 295 try:
296 copysource, copynode = ctx.filectx(name).renamed() 296 copysource, copynode = ctx.filectx(name).renamed()
297 if copysource in self.ignored or not self.keep(copynode): 297 if copysource in self.ignored or not self.keep(copynode):
298 continue
299 # Ignore copy sources not in parent revisions
300 found = False
301 for p in parents:
302 if copysource in p:
303 found = True
304 break
305 if not found:
298 continue 306 continue
299 copies[name] = copysource 307 copies[name] = copysource
300 except TypeError: 308 except TypeError:
301 pass 309 pass
302 except error.LookupError, e: 310 except error.LookupError, e: