706 # 0 --- 1 --- 3 rev4 reverts the content change from rev2 |
706 # 0 --- 1 --- 3 rev4 reverts the content change from rev2 |
707 # \ / merging rev3 and rev4 should use bar@rev2 |
707 # \ / merging rev3 and rev4 should use bar@rev2 |
708 # \- 2 --- 4 as the merge base |
708 # \- 2 --- 4 as the merge base |
709 # |
709 # |
710 |
710 |
711 cr = manifest1.get(cf, nullid) |
711 cr = manifest1.get(cf) |
712 nfp = fp2 |
712 nfp = fp2 |
713 |
713 |
714 if manifest2: # branch merge |
714 if manifest2: # branch merge |
715 if fp2 == nullid: # copied on remote side |
715 if fp2 == nullid: # copied on remote side |
716 if fp1 != nullid or cf in manifest2: |
716 if fp1 != nullid or cf in manifest2: |
717 cr = manifest2[cf] |
717 cr = manifest2[cf] |
718 nfp = fp1 |
718 nfp = fp1 |
|
719 |
|
720 # find source in nearest ancestor if we've lost track |
|
721 if not cr: |
|
722 self.ui.debug(_(" %s: searching for copy revision for %s\n") % |
|
723 (fn, cf)) |
|
724 p1 = self.dirstate.parents()[0] |
|
725 rev = self.changelog.rev(p1) |
|
726 seen = {-1:None} |
|
727 visit = [rev] |
|
728 while visit: |
|
729 for p in self.changelog.parentrevs(visit.pop(0)): |
|
730 if p not in seen: |
|
731 seen[p] = True |
|
732 visit.append(p) |
|
733 ctx = self.changectx(p) |
|
734 if cf in ctx: |
|
735 cr = ctx[cf].filenode() |
|
736 break |
719 |
737 |
720 self.ui.debug(_(" %s: copy %s:%s\n") % (fn, cf, hex(cr))) |
738 self.ui.debug(_(" %s: copy %s:%s\n") % (fn, cf, hex(cr))) |
721 meta["copy"] = cf |
739 meta["copy"] = cf |
722 meta["copyrev"] = hex(cr) |
740 meta["copyrev"] = hex(cr) |
723 fp1, fp2 = nullid, nfp |
741 fp1, fp2 = nullid, nfp |