# HG changeset patch # User Pierre-Yves David # Date 1583235324 -3600 # Node ID 890def17d03b855ed2bf0e669732370128b3951a # Parent 902b559202a681c690e7329078363f8912b5d275 copies-tests: add a test with a rename overwriting another file This is a variation of the "BD" case, but this time, the file is not "new", it is overwritten by another file being renamed. Differential Revision: https://phab.mercurial-scm.org/D8240 diff -r 902b559202a6 -r 890def17d03b tests/test-copies-chain-merge.t --- a/tests/test-copies-chain-merge.t Sat Feb 29 19:50:05 2020 +0100 +++ b/tests/test-copies-chain-merge.t Tue Mar 03 12:35:24 2020 +0100 @@ -299,6 +299,55 @@ | This lead to bad copy tracing information to be dug up. +Merge: +- one with change to an unrelated file (b) +- one overwriting a file (d) with a rename (from h to i to d) + + $ hg up 'desc("i-2")' + 2 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg mv h i + $ hg commit -m "f-1: rename h -> i" + created new head + $ hg mv --force i d + $ hg commit -m "f-2: rename i -> d" + $ hg debugindex d + rev linkrev nodeid p1 p2 + 0 2 01c2f5eabdc4 000000000000 000000000000 + 1 10 b004912a8510 000000000000 000000000000 + 2 15 0bb5445dc4d0 01c2f5eabdc4 b004912a8510 + 3 22 c72365ee036f 000000000000 000000000000 + $ hg up 'desc("b-1")' + 3 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg merge 'desc("f-2")' + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + (branch merge, don't forget to commit) + $ hg ci -m 'mBFm-0 simple merge - one way' + $ hg up 'desc("f-2")' + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg merge 'desc("b-1")' + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + $ hg ci -m 'mFBm-0 simple merge - the other way' + created new head + $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))' + @ 24 mFBm-0 simple merge - the other way] + |\ + +---o 23 mBFm-0 simple merge - one way] + | |/ + | o 22 f-2: rename i -> d] + | | + | o 21 f-1: rename h -> i] + | | + o | 5 b-1: b update] + |/ + o 2 i-2: c -move-> d] + | + o 1 i-1: a -move-> c] + | + o 0 i-0 initial commit: a b h] + + + Check results ============= @@ -448,6 +497,8 @@ 0 2 01c2f5eabdc4 000000000000 000000000000 1 10 b004912a8510 000000000000 000000000000 2 15 0bb5445dc4d0 01c2f5eabdc4 b004912a8510 + 3 22 c72365ee036f 000000000000 000000000000 + 4 23 863d9bc49190 01c2f5eabdc4 c72365ee036f (This `hg log` output if wrong, since no merge actually happened). @@ -539,3 +590,68 @@ a R a R b + +Merge: +- one with change to an unrelated file (b) +- one overwriting a file (d) with a rename (from h to i to d) + +The overwriting should take over. However, the behavior is currently buggy + + $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBFm-0")' + M b + A d + a (true !) + h (false !) + R a + R h + $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFBm-0")' + M b + A d + h + R a + R h + $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBFm-0")' + M d + R h + $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mBFm-0")' + M b + M d + $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mBFm-0")' + M b + M d + R i + $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mFBm-0")' + M d + R h + $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFBm-0")' + M b + $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFBm-0")' + M b + M d + R i + +The following graphlog is wrong, the "a -> c -> d" chain was overwritten and should not appear. + + $ hg log -Gfr 'desc("mBFm-0")' d + o 23 mBFm-0 simple merge - one way] + |\ + o : 22 f-2: rename i -> d] + | : + o : 21 f-1: rename h -> i] + :/ + o 2 i-2: c -move-> d] + | + o 1 i-1: a -move-> c] + | + o 0 i-0 initial commit: a b h] + + +The following output is correct. + + $ hg log -Gfr 'desc("mFBm-0")' d + o 22 f-2: rename i -> d] + | + o 21 f-1: rename h -> i] + : + o 0 i-0 initial commit: a b h] +