--- a/mercurial/localrepo.py Sun Aug 10 18:01:03 2008 -0500
+++ b/mercurial/localrepo.py Sun Aug 10 18:01:03 2008 -0500
@@ -708,7 +708,7 @@
# \- 2 --- 4 as the merge base
#
- cr = manifest1.get(cf, nullid)
+ cr = manifest1.get(cf)
nfp = fp2
if manifest2: # branch merge
@@ -717,6 +717,24 @@
cr = manifest2[cf]
nfp = fp1
+ # find source in nearest ancestor if we've lost track
+ if not cr:
+ self.ui.debug(_(" %s: searching for copy revision for %s\n") %
+ (fn, cf))
+ p1 = self.dirstate.parents()[0]
+ rev = self.changelog.rev(p1)
+ seen = {-1:None}
+ visit = [rev]
+ while visit:
+ for p in self.changelog.parentrevs(visit.pop(0)):
+ if p not in seen:
+ seen[p] = True
+ visit.append(p)
+ ctx = self.changectx(p)
+ if cf in ctx:
+ cr = ctx[cf].filenode()
+ break
+
self.ui.debug(_(" %s: copy %s:%s\n") % (fn, cf, hex(cr)))
meta["copy"] = cf
meta["copyrev"] = hex(cr)