[Request] [++++ ] D9611: copies-test: add test chaining multiple merge
marmoute (Pierre-Yves David)
phabricator at mercurial-scm.org
Tue Dec 15 09:07:50 UTC 2020
marmoute created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.
REVISION SUMMARY
Right now, the copy tracing logic take the right decision for merges, but it
does not keep track of the right information about these decision and can fall
into later traps. We start with highlighting this possibility by adding new
tests, and we will fix them later.
Check the inline test documentation for details.
REPOSITORY
rHG Mercurial
BRANCH
default
REVISION DETAIL
https://phab.mercurial-scm.org/D9611
AFFECTED FILES
tests/test-copies-chain-merge.t
CHANGE DETAILS
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 !)
To: marmoute, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mercurial-scm.org/pipermail/mercurial-patches/attachments/20201215/387b07b3/attachment-0001.html>
More information about the Mercurial-patches
mailing list