Comments
Patch
@@ -388,40 +388,80 @@
o 0 i-0 initial commit: a b]
+Merge:
+- one with change to a file (d)
+- one overwriting that file with a rename (from h to i, to d)
+
+ $ hg up 'desc("f-2")'
+ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ hg merge 'desc("g-1")' --tool :union
+ merging d
+ 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+ $ hg ci -m 'mFGm-0 simple merge - one way'
+ created new head
+ $ hg up 'desc("g-1")'
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg merge 'desc("f-2")' --tool :union
+ merging d
+ 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+ $ hg ci -m 'mGFm-0 simple merge - the other way'
+ created new head
+ $ hg log -G --rev '::(desc("mGFm")+desc("mGFm"))'
+ @ 29 mGFm-0 simple merge - the other way]
+ |\
+ | o 25 g-1]
+ | |
+ 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]
+
+
final summary
$ hg update null --quiet
$ hg log -G
- o 27 mGDm-0 simple merge - the other way]
+ o 29 mGFm-0 simple merge - the other way]
|\
- +---o 26 mDGm-0 simple merge - one way]
+ +---o 28 mFGm-0 simple merge - one way]
| |/
- | o 25 g-1]
- | |
- | | o 24 mFBm-0 simple merge - the other way]
- | | |\
- | | +---o 23 mBFm-0 simple merge - one way]
+ | | o 27 mGDm-0 simple merge - the other way]
+ | |/|
+ | +---o 26 mDGm-0 simple merge - one way]
+ | | |/
+ | o | 25 g-1]
+ | | |
+ +-----o 24 mFBm-0 simple merge - the other way]
+ | | | |
+ +-------o 23 mBFm-0 simple merge - one way]
| | | |/
- | | | o 22 f-2: rename i -> d]
+ o | | | 22 f-2: rename i -> d]
| | | |
- | +---o 21 f-1: rename h -> i]
- | | |
+ o | | | 21 f-1: rename h -> i]
+ |/ / /
| | | o 20 mEAm-0 simple merge - the other way]
| | | |\
| | | +---o 19 mAEm-0 simple merge - one way]
| | | | |/
| | | | o 18 e-2 g -move-> f]
| | | | |
- | +-----o 17 e-1 b -move-> g]
+ +-------o 17 e-1 b -move-> g]
| | | |
- +---+---o 16 mDBm-0 simple merge - the other way]
+ | +-+---o 16 mDBm-0 simple merge - the other way]
| | | |
- +---+---o 15 mBDm-0 simple merge - one way]
+ | +-+---o 15 mBDm-0 simple merge - one way]
| | | |
- o | | | 14 d-2 re-add d]
+ | o | | 14 d-2 re-add d]
| | | |
- o | | | 13 d-1 delete d]
+ | o | | 13 d-1 delete d]
|/ / /
| | | o 12 mCBm-1 re-add d]
| | | |
@@ -604,6 +644,7 @@
5 25 7bded9d9da1f 01c2f5eabdc4 000000000000
6 26 f04cac32d703 b004912a8510 7bded9d9da1f
7 27 d7a5eafb9322 7bded9d9da1f b004912a8510
+ 8 28 2ed7a51aed47 c72365ee036f 7bded9d9da1f
(That output if wrong, since no merge actually happened).
@@ -814,3 +855,77 @@
|
o 0 i-0 initial commit: a b]
+
+
+Merge:
+- one with change to a file (d)
+- one overwriting that file with a rename (from h to i, to d)
+
+This case is similar to BF/FB, but an actual merge happens, so both side of the
+history are relevant.
+
+Note:
+| In this case, the merge get conflicting information since on one side we have
+| "a -> c -> d". and one the other one we have "h -> i -> d".
+|
+| The current code arbitrarily pick one side
+
+ $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFGm-0")'
+ A d
+ a
+ R a
+ R h
+ $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGFm-0")'
+ A d
+ a
+ R a
+ R h
+ $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFGm-0")'
+ M d
+ $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mGFm-0")'
+ M d
+ $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFGm-0")'
+ M d
+ R i
+ $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mGFm-0")'
+ M d
+ R i
+ $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mFGm-0")'
+ M d
+ R h
+ $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGFm-0")'
+ M d
+ R h
+
+ $ hg log -Gfr 'desc("mFGm-0")' d
+ o 28 mFGm-0 simple merge - one way]
+ |\
+ | o 25 g-1]
+ | |
+ 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]
+
+
+
+ $ hg log -Gfr 'desc("mGFm-0")' d
+ o 29 mGFm-0 simple merge - the other way]
+ |\
+ | o 25 g-1]
+ | |
+ 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]
+