comparison mercurial/localrepo.py @ 6874:8dc21876261e

commit: simplify file copy logic
author Matt Mackall <mpm@selenic.com>
date Sun, 10 Aug 2008 18:01:03 -0500
parents deda205a00e1
children 0d714a48ab53
comparison
equal deleted inserted replaced
6873:39b4db2ea6ed 6874:8dc21876261e
685 fl = self.file(fn) 685 fl = self.file(fn)
686 fp1 = manifest1.get(fn, nullid) 686 fp1 = manifest1.get(fn, nullid)
687 fp2 = manifest2.get(fn, nullid) 687 fp2 = manifest2.get(fn, nullid)
688 688
689 meta = {} 689 meta = {}
690 cp = self.dirstate.copied(fn) 690 cf = self.dirstate.copied(fn)
691 if cp and cp != fn: 691 if cf and cf != fn:
692 # Mark the new revision of this file as a copy of another 692 # Mark the new revision of this file as a copy of another
693 # file. This copy data will effectively act as a parent 693 # file. This copy data will effectively act as a parent
694 # of this new revision. If this is a merge, the first 694 # of this new revision. If this is a merge, the first
695 # parent will be the nullid (meaning "look up the copy data") 695 # parent will be the nullid (meaning "look up the copy data")
696 # and the second one will be the other parent. For example: 696 # and the second one will be the other parent. For example:
705 # 705 #
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 meta["copy"] = cp 710
711 if not manifest2: # not a branch merge 711 cr = manifest1.get(cf, nullid)
712 meta["copyrev"] = hex(manifest1[cp]) 712 nfp = fp2
713 fp2 = nullid 713
714 elif fp2 != nullid: # copied on remote side 714 if manifest2: # branch merge
715 meta["copyrev"] = hex(manifest1[cp]) 715 if fp2 == nullid: # copied on remote side
716 elif fp1 != nullid: # copied on local side, reversed 716 if fp1 != nullid or cf in manifest2:
717 meta["copyrev"] = hex(manifest2[cp]) 717 cr = manifest2[cf]
718 fp2 = fp1 718 nfp = fp1
719 elif cp in manifest2: # directory rename on local side 719
720 meta["copyrev"] = hex(manifest2[cp]) 720 self.ui.debug(_(" %s: copy %s:%s\n") % (fn, cf, hex(cr)))
721 else: # directory rename on remote side 721 meta["copy"] = cf
722 meta["copyrev"] = hex(manifest1[cp]) 722 meta["copyrev"] = hex(cr)
723 self.ui.debug(_(" %s: copy %s:%s\n") % 723 fp1, fp2 = nullid, nfp
724 (fn, cp, meta["copyrev"]))
725 fp1 = nullid
726 elif fp2 != nullid: 724 elif fp2 != nullid:
727 # is one parent an ancestor of the other? 725 # is one parent an ancestor of the other?
728 fpa = fl.ancestor(fp1, fp2) 726 fpa = fl.ancestor(fp1, fp2)
729 if fpa == fp1: 727 if fpa == fp1:
730 fp1, fp2 = fp2, nullid 728 fp1, fp2 = fp2, nullid