Comments
Patch
@@ -298,21 +298,77 @@
| In this case, on of the merge record bad information and fails to see that
| there is no merge going on.
+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]
+
+
final summary
$ hg update null --quiet
$ hg log -G
- o 20 mEAm-0 simple merge - the other way]
+ o 24 mFBm-0 simple merge - the other way]
|\
- +---o 19 mAEm-0 simple merge - one way]
+ +---o 23 mBFm-0 simple merge - one way]
| |/
- | o 18 e-2 g -move-> f]
+ | o 22 f-2: rename i -> d]
+ | |
+ | o 21 f-1: rename h -> i]
| |
- | o 17 e-1 b -move-> g]
- | |
- | | o 16 mDBm-0 simple merge - the other way]
+ | | o 20 mEAm-0 simple merge - the other way]
| | |\
- | | +---o 15 mBDm-0 simple merge - one way]
+ | | +---o 19 mAEm-0 simple merge - one way]
+ | | | |/
+ | | | o 18 e-2 g -move-> f]
+ | | | |
+ | +---o 17 e-1 b -move-> g]
+ | | |
+ +-----o 16 mDBm-0 simple merge - the other way]
+ | | | |
+ +-------o 15 mBDm-0 simple merge - one way]
| | | |/
| | | o 14 d-2 re-add d]
| | | |
@@ -320,11 +376,11 @@
| | |
| | | o 12 mCBm-1 re-add d]
| | | |
- | | | o 11 mCBm-0 simple merge - the other way]
- | | |/|
+ +-----o 11 mCBm-0 simple merge - the other way]
+ | | | |
| | | | o 10 mBCm-1 re-add d]
| | | | |
- | | +---o 9 mBCm-0 simple merge - one way]
+ +-------o 9 mBCm-0 simple merge - one way]
| | | |/
| +---o 8 c-1 delete d]
| | |
@@ -332,11 +388,11 @@
| | |/
+-----o 6 mBAm-0 simple merge - one way]
| | |/
- | | o 5 b-1: b update]
- | |/
- o | 4 a-2: e -move-> f]
+ o | | 5 b-1: b update]
+ |/ /
+ | o 4 a-2: e -move-> f]
| |
- o | 3 a-1: d -move-> e]
+ | o 3 a-1: d -move-> e]
|/
o 2 i-2: c -move-> d]
|
@@ -494,6 +550,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
(That output if wrong, since no merge actually happened).
@@ -585,3 +643,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]
+
+
+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]
+