Mercurial > hg
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: |