diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -706,8 +706,8 @@ class localrepository(repo.repository): nfp = fp2 if manifest2: # branch merge - if fp2 == nullid: # copied on remote side - if fp1 != nullid or cf in manifest2: + if fp2 == nullid or cr is None: # copied on remote side + if cf in manifest2: cr = manifest2[cf] nfp = fp1 diff --git a/tests/test-rename-after-merge b/tests/test-rename-after-merge --- a/tests/test-rename-after-merge +++ b/tests/test-rename-after-merge @@ -32,3 +32,37 @@ hg st echo % rename back c as b hg mv c b hg st +cd .. + +# Test issue 1476: renaming a first parent file into +# another first parent file while none of them belong to +# the second parent was broken +echo % test issue 1476 +hg init repo1476 +cd repo1476 +echo a > a +hg ci -Am adda +echo b1 > b1 +echo b2 > b2 +hg ci -Am changea +hg up -C 0 +echo c1 > c1 +echo c2 > c2 +hg ci -Am addcandd +echo % merge heads +hg merge +hg mv -Af c1 c2 +echo % commit issue 1476 +hg ci -m merge +hg log -r tip -C -v | grep copies +hg rollback +hg up -C . +echo % merge heads again +hg merge +hg mv -Af b1 b2 +echo % commit issue 1476 with a rename on the other side +hg ci -m merge +hg log -r tip -C -v | grep copies + + + diff --git a/tests/test-rename-after-merge.out b/tests/test-rename-after-merge.out --- a/tests/test-rename-after-merge.out +++ b/tests/test-rename-after-merge.out @@ -21,3 +21,23 @@ A c R b % rename back c as b M b +% test issue 1476 +adding a +adding b1 +adding b2 +0 files updated, 0 files merged, 2 files removed, 0 files unresolved +adding c1 +adding c2 +created new head +% merge heads +2 files updated, 0 files merged, 0 files removed, 0 files unresolved +(branch merge, don't forget to commit) +% commit issue 1476 +copies: c2 (c1) +rolling back last transaction +2 files updated, 0 files merged, 2 files removed, 0 files unresolved +% merge heads again +2 files updated, 0 files merged, 0 files removed, 0 files unresolved +(branch merge, don't forget to commit) +% commit issue 1476 with a rename on the other side +copies: b2 (b1)