diff --git a/tests/test-copies-chain-merge.t b/tests/test-copies-chain-merge.t --- a/tests/test-copies-chain-merge.t +++ b/tests/test-copies-chain-merge.t @@ -820,7 +820,98 @@ +Subcase: chaining "merged" information during a merge +`````````````````````````````````````````````````````` +When a non-rename change are merged with a copy overwrite, the merge pick the copy source from (p1) as the reference. We should preserve this information in subsequent merges. + +(extra unrelated changes) + + $ hg up 'desc("f-2")' + 2 files updated, 0 files merged, 2 files removed, 0 files unresolved (no-changeset !) + 1 files updated, 0 files merged, 2 files removed, 0 files unresolved (changeset !) + $ echo n > unrelated-n + $ hg add unrelated-n + $ hg ci -m 'n-1: unrelated changes (based on the "f" series of changes)' + created new head + + $ hg up 'desc("g-1")' + 2 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo o > unrelated-o + $ hg add unrelated-o + $ hg ci -m 'o-1: unrelated changes (based on "g" changes)' + created new head + +(merge variant 1) + + $ hg up 'desc("mFGm")' + 1 files updated, 0 files merged, 2 files removed, 0 files unresolved (no-changeset !) + 0 files updated, 0 files merged, 2 files removed, 0 files unresolved (changeset !) + $ hg merge 'desc("o-1")' + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + $ hg ci -m 'mFG,Om: simple merge' + +(merge variant 2) + + $ hg up 'desc("o-1")' + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !) + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !) + $ hg merge 'desc("FGm")' + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !) + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !) + (branch merge, don't forget to commit) + $ hg ci -m 'mO,FGm: simple merge' + created new head + +(merge variant 3) + + $ hg up 'desc("mGFm")' + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg merge 'desc("n-1")' + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + $ hg ci -m 'mGF,Nm: simple merge' + +(merge variant 4) + + $ hg up 'desc("n-1")' + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg merge 'desc("mGFm")' + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + $ hg ci -m 'mN,GFm: simple merge' + created new head + + $ hg log -G --rev '::(desc("mFG,Om") + desc("mO,FGm") + desc("mGF,Nm") + desc("mN,GFm"))' + @ 53 mN,GFm: simple merge + |\ + +---o 52 mGF,Nm: simple merge + | |/ + | | o 51 mO,FGm: simple merge + | | |\ + | | +---o 50 mFG,Om: simple merge + | | | |/ + | | | o 49 o-1: unrelated changes (based on "g" changes) + | | | | + | o | | 48 n-1: unrelated changes (based on the "f" series of changes) + | | | | + o-----+ 29 mGFm-0 simple merge - the other way + |/ / / + | o / 28 mFGm-0 simple merge - one way + |/|/ + | o 25 g-1: update d + | | + 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 + Summary of all created cases ---------------------------- @@ -869,15 +960,21 @@ mEA,Jm: simple merge mEAm-0 simple merge - the other way mFBm-0 simple merge - the other way + mFG,Om: simple merge mFGm-0 simple merge - one way mGCm-0 mGDm-0 simple merge - the other way + mGF,Nm: simple merge mGFm-0 simple merge - the other way mHC-delete-before-conflict-m-0 mJ,EAm: simple merge mK,AEm: simple merge mL,BC+revertm: simple merge mL,CB+revertm: simple merge + mN,GFm: simple merge + mO,FGm: simple merge + n-1: unrelated changes (based on the "f" series of changes) + o-1: unrelated changes (based on "g" changes) Test that sidedata computations during upgrades are correct @@ -1162,6 +1259,32 @@ 1 sidedata entries entry-0014 size 4 '\x00\x00\x00\x00' + ##### revision 48 ##### + 1 sidedata entries + entry-0014 size 24 + '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-n' + added : unrelated-n, ; + ##### revision 49 ##### + 1 sidedata entries + entry-0014 size 24 + '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-o' + added : unrelated-o, ; + ##### revision 50 ##### + 1 sidedata entries + entry-0014 size 4 + '\x00\x00\x00\x00' + ##### revision 51 ##### + 1 sidedata entries + entry-0014 size 4 + '\x00\x00\x00\x00' + ##### revision 52 ##### + 1 sidedata entries + entry-0014 size 4 + '\x00\x00\x00\x00' + ##### revision 53 ##### + 1 sidedata entries + entry-0014 size 4 + '\x00\x00\x00\x00' #endif @@ -2108,3 +2231,52 @@ A unrelated-l R a +Subcase: chaining "merged" information during a merge +`````````````````````````````````````````````````````` + +When a non-rename change are merged with a copy overwrite, the merge pick the copy source from (p1) as the reference. We should preserve this information in subsequent merges. + + +reference output: + + (for details about the filelog pick, check the mFGm/mGFm case) + + $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFGm")' d + A d + a (filelog !) + h (sidedata !) + h (upgraded !) + $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGFm")' d + A d + a (filelog !) + a (sidedata !) + a (upgraded !) + +Chained output + + $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mO,FGm")' d + A d + a (filelog !) + h (sidedata !) + h (upgraded !) + $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFG,Om")' d + A d + a (filelog !) + h (sidedata !) + h (upgraded !) + + + $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGF,Nm")' d + A d + a (filelog !) + a (missing-correct-output sidedata !) + a (missing-correct-output upgraded !) + h (known-bad-output sidedata !) + h (known-bad-output upgraded !) + $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mN,GFm")' d + A d + a (filelog !) + a (missing-correct-output sidedata !) + a (missing-correct-output upgraded !) + h (known-bad-output sidedata !) + h (known-bad-output upgraded !)