# HG changeset patch # User Matt Mackall # Date 1218409263 18000 # Node ID 8dc21876261e308e88ac4c76710a73bdbb160d56 # Parent 39b4db2ea6edc2b8e42957dff041a69330d31250 commit: simplify file copy logic diff -r 39b4db2ea6ed -r 8dc21876261e mercurial/localrepo.py --- a/mercurial/localrepo.py Sat Aug 09 11:46:20 2008 +0200 +++ b/mercurial/localrepo.py Sun Aug 10 18:01:03 2008 -0500 @@ -687,8 +687,8 @@ fp2 = manifest2.get(fn, nullid) meta = {} - cp = self.dirstate.copied(fn) - if cp and cp != fn: + cf = self.dirstate.copied(fn) + if cf and cf != fn: # Mark the new revision of this file as a copy of another # file. This copy data will effectively act as a parent # of this new revision. If this is a merge, the first @@ -707,22 +707,20 @@ # \ / merging rev3 and rev4 should use bar@rev2 # \- 2 --- 4 as the merge base # - meta["copy"] = cp - if not manifest2: # not a branch merge - meta["copyrev"] = hex(manifest1[cp]) - fp2 = nullid - elif fp2 != nullid: # copied on remote side - meta["copyrev"] = hex(manifest1[cp]) - elif fp1 != nullid: # copied on local side, reversed - meta["copyrev"] = hex(manifest2[cp]) - fp2 = fp1 - elif cp in manifest2: # directory rename on local side - meta["copyrev"] = hex(manifest2[cp]) - else: # directory rename on remote side - meta["copyrev"] = hex(manifest1[cp]) - self.ui.debug(_(" %s: copy %s:%s\n") % - (fn, cp, meta["copyrev"])) - fp1 = nullid + + cr = manifest1.get(cf, nullid) + nfp = fp2 + + if manifest2: # branch merge + if fp2 == nullid: # copied on remote side + if fp1 != nullid or cf in manifest2: + cr = manifest2[cf] + nfp = fp1 + + self.ui.debug(_(" %s: copy %s:%s\n") % (fn, cf, hex(cr))) + meta["copy"] = cf + meta["copyrev"] = hex(cr) + fp1, fp2 = nullid, nfp elif fp2 != nullid: # is one parent an ancestor of the other? fpa = fl.ancestor(fp1, fp2)