mercurial/localrepo.py
changeset 6875 0d714a48ab53
parent 6874 8dc21876261e
child 6876 077f1e637cd8
child 6877 1d38f3605b20
--- 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)