##// END OF EJS Templates
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard -
r9532:989cb39d default
parent child Browse files
Show More
@@ -274,7 +274,7 b' class mercurial_source(converter_source)'
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]
@@ -282,12 +282,12 b' class mercurial_source(converter_source)'
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:
@@ -296,6 +296,14 b' class mercurial_source(converter_source)'
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
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:
306 continue
299 copies[name] = copysource
307 copies[name] = copysource
300 except TypeError:
308 except TypeError:
301 pass
309 pass
General Comments 0
You need to be logged in to leave comments. Login now