##// END OF EJS Templates
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
merge: fix crash on criss cross merge with dir move and delete (issue5020) Work around that 'dm' in the data model only can have one operation for the target file, but still can have multiple and conflicting operations on the source file where the other operation is a 'rm'. The move would thus fail with 'abort: No such file or directory'. In this case it is "obvious" that the file should be removed, either before or after moving it. We thus keep the 'rm' of the source file but drop the 'dm'. This is not a pretty fix but quite "obviously" safe (famous last words...) as it only touches a rare code path that used to crash. It is possible that it would be better to swap the files for 'dm' as suggested on https://bz.mercurial-scm.org/show_bug.cgi?id=5020#c13 but it is not entirely obvious that it not just would create conflicts on the other file. That can be revisited later.

File last commit:

r30856:41f6af50 stable
r30856:41f6af50 stable
Show More
test-merge-criss-cross.t
500 lines | 13.8 KiB | text/troff | Tads3Lexer
/ tests / test-merge-criss-cross.t
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 Criss cross merging
$ hg init criss-cross
$ cd criss-cross
$ echo '0 base' > f1
$ echo '0 base' > f2
$ hg ci -Aqm '0 base'
$ echo '1 first change' > f1
$ hg ci -m '1 first change f1'
$ hg up -qr0
$ echo '2 first change' > f2
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 $ mkdir d1
$ echo '0 base' > d1/f3
$ echo '0 base' > d1/f4
$ hg add -q d1
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 $ hg ci -qm '2 first change f2'
$ hg merge -qr 1
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 $ hg rm d1/f3
$ hg mv -q d1 d2
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 $ hg ci -m '3 merge'
$ hg up -qr2
$ hg merge -qr1
$ hg ci -qm '4 merge'
$ echo '5 second change' > f1
$ hg ci -m '5 second change f1'
Mads Kiilerich
context: tell when .ancestor picks one of multiple common ancestors heads...
r21125 $ hg up -r3
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 $ echo '6 second change' > f2
$ hg ci -m '6 second change f2'
$ hg log -G
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 @ changeset: 6:6373bbfdae1d
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 | tag: tip
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 | parent: 3:c202c8af058d
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 | user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: 6 second change f2
|
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 | o changeset: 5:e673248094b1
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 | | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: 5 second change f1
| |
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 | o changeset: 4:177f58377c06
| |\ parent: 2:d1d156401c1b
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 | | | parent: 1:0f6b37dbe527
| | | user: test
| | | date: Thu Jan 01 00:00:00 1970 +0000
| | | summary: 4 merge
| | |
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 o---+ changeset: 3:c202c8af058d
| | | parent: 2:d1d156401c1b
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 |/ / parent: 1:0f6b37dbe527
| | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: 3 merge
| |
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 | o changeset: 2:d1d156401c1b
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 | | parent: 0:40494bf2444c
| | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: 2 first change f2
| |
o | changeset: 1:0f6b37dbe527
|/ user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: 1 first change f1
|
o changeset: 0:40494bf2444c
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 0 base
Mads Kiilerich
merge: use bid merge by default (BC)...
r22672 $ hg merge -v --debug --tool internal:dump 5 --config merge.preferancestor='!'
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 note: using 0f6b37dbe527 as ancestor of 6373bbfdae1d and e673248094b1
alternatively, use --config merge.preferancestor=d1d156401c1b
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 searching for copies back to rev 3
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 unmatched files in local:
d2/f4
unmatched files in other:
d1/f3
d1/f4
all copies found (* = to merge, ! = divergent, % = renamed and deleted):
src: 'd1/f4' -> dst: 'd2/f4'
checking for directory renames
discovered dir src: 'd1/' -> dst: 'd2/'
pending file src: 'd1/f3' -> dst: 'd2/f3'
pending file src: 'd1/f4' -> dst: 'd2/f4'
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 resolving manifests
branchmerge: True, force: False, partial: False
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 ancestor: 0f6b37dbe527, local: 6373bbfdae1d+, remote: e673248094b1
preserving d2/f4 for resolve of d2/f4
Mads Kiilerich
merge: change debug logging - test output changes but no real changes...
r21391 preserving f2 for resolve of f2
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 f1: remote is newer -> g
getting f1
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 d2/f3: local directory rename - get from d1/f3 -> dg
getting d1/f3 to d2/f3
d2/f4: local directory rename, both created -> m (premerge)
Siddharth Agarwal
merge.mergestate: perform all premerges before any merges (BC)...
r26618 f2: versions differ -> m (premerge)
Siddharth Agarwal
filemerge: add debug output for whether this is a change/delete conflict...
r27161 picked tool ':dump' for f2 (binary False symlink False changedelete False)
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 merging f2
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 my f2@6373bbfdae1d+ other f2@e673248094b1 ancestor f2@0f6b37dbe527
Siddharth Agarwal
merge.mergestate: perform all premerges before any merges (BC)...
r26618 f2: versions differ -> m (merge)
Siddharth Agarwal
filemerge: add debug output for whether this is a change/delete conflict...
r27161 picked tool ':dump' for f2 (binary False symlink False changedelete False)
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 my f2@6373bbfdae1d+ other f2@e673248094b1 ancestor f2@0f6b37dbe527
3 files updated, 0 files merged, 0 files removed, 1 files unresolved
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
[1]
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 $ f --dump --recurse *
d2: directory with 2 files
d2/f3:
>>>
0 base
<<<
d2/f4:
>>>
0 base
<<<
Mads Kiilerich
tests: use 'f' in test-merge-criss-cross.t to prepare for recursive dumping...
r30855 f1:
>>>
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 5 second change
Mads Kiilerich
tests: use 'f' in test-merge-criss-cross.t to prepare for recursive dumping...
r30855 <<<
f2:
>>>
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 6 second change
Mads Kiilerich
tests: use 'f' in test-merge-criss-cross.t to prepare for recursive dumping...
r30855 <<<
f2.base:
>>>
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 0 base
Mads Kiilerich
tests: use 'f' in test-merge-criss-cross.t to prepare for recursive dumping...
r30855 <<<
f2.local:
>>>
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 6 second change
Mads Kiilerich
tests: use 'f' in test-merge-criss-cross.t to prepare for recursive dumping...
r30855 <<<
f2.orig:
>>>
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 6 second change
Mads Kiilerich
tests: use 'f' in test-merge-criss-cross.t to prepare for recursive dumping...
r30855 <<<
f2.other:
>>>
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 2 first change
Mads Kiilerich
tests: use 'f' in test-merge-criss-cross.t to prepare for recursive dumping...
r30855 <<<
Mads Kiilerich
tests: add test case for criss cross merge...
r20636
Mads Kiilerich
context: introduce merge.preferancestor for controlling which ancestor to pick...
r21126 $ hg up -qC .
$ hg merge -v --tool internal:dump 5 --config merge.preferancestor="null 40663881 3b08d"
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 note: using 0f6b37dbe527 as ancestor of 6373bbfdae1d and e673248094b1
alternatively, use --config merge.preferancestor=d1d156401c1b
Mads Kiilerich
context: introduce merge.preferancestor for controlling which ancestor to pick...
r21126 resolving manifests
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 getting f1
getting d1/f3 to d2/f3
merging f2
3 files updated, 0 files merged, 0 files removed, 1 files unresolved
Mads Kiilerich
context: introduce merge.preferancestor for controlling which ancestor to pick...
r21126 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
[1]
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 Redo merge with merge.preferancestor="*" to enable bid merge
$ rm f*
$ hg up -qC .
$ hg merge -v --debug --tool internal:dump 5 --config merge.preferancestor="*"
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 note: merging 6373bbfdae1d+ and e673248094b1 using bids from ancestors 0f6b37dbe527 and d1d156401c1b
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128
calculating bids for ancestor 0f6b37dbe527
searching for copies back to rev 3
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 unmatched files in local:
d2/f4
unmatched files in other:
d1/f3
d1/f4
all copies found (* = to merge, ! = divergent, % = renamed and deleted):
src: 'd1/f4' -> dst: 'd2/f4'
checking for directory renames
discovered dir src: 'd1/' -> dst: 'd2/'
pending file src: 'd1/f3' -> dst: 'd2/f3'
pending file src: 'd1/f4' -> dst: 'd2/f4'
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 resolving manifests
branchmerge: True, force: False, partial: False
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 ancestor: 0f6b37dbe527, local: 6373bbfdae1d+, remote: e673248094b1
d2/f3: local directory rename - get from d1/f3 -> dg
d2/f4: local directory rename, both created -> m
Mads Kiilerich
merge: make debug output slightly more helpful by including message for action...
r21269 f1: remote is newer -> g
f2: versions differ -> m
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 calculating bids for ancestor d1d156401c1b
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 searching for copies back to rev 3
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 unmatched files in local:
d2/f4
all copies found (* = to merge, ! = divergent, % = renamed and deleted):
src: 'd1/f4' -> dst: 'd2/f4'
checking for directory renames
discovered dir src: 'd1/' -> dst: 'd2/'
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 resolving manifests
branchmerge: True, force: False, partial: False
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 ancestor: d1d156401c1b, local: 6373bbfdae1d+, remote: e673248094b1
Martin von Zweigbergk
merge: let bid merge work on the file->action dict...
r23638 f1: versions differ -> m
Martin von Zweigbergk
merge: make 'keep' message more descriptive...
r23482 f2: remote unchanged -> k
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128
auction for merging merge bids
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 d2/f3: consensus for dg
d2/f4: consensus for m
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 f1: picking 'get' action
f2: picking 'keep' action
end of auction
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 preserving d2/f4 for resolve of d2/f4
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 f1: remote is newer -> g
getting f1
Martin von Zweigbergk
merge: make 'keep' message more descriptive...
r23482 f2: remote unchanged -> k
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 d2/f3: local directory rename - get from d1/f3 -> dg
getting d1/f3 to d2/f3
d2/f4: local directory rename, both created -> m (premerge)
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 (branch merge, don't forget to commit)
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 $ f --dump --recurse *
d2: directory with 2 files
d2/f3:
>>>
0 base
<<<
d2/f4:
>>>
0 base
<<<
Mads Kiilerich
tests: use 'f' in test-merge-criss-cross.t to prepare for recursive dumping...
r30855 f1:
>>>
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 5 second change
Mads Kiilerich
tests: use 'f' in test-merge-criss-cross.t to prepare for recursive dumping...
r30855 <<<
f2:
>>>
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 6 second change
Mads Kiilerich
tests: use 'f' in test-merge-criss-cross.t to prepare for recursive dumping...
r30855 <<<
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128
The other way around:
$ hg up -C -r5
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 4 files updated, 0 files merged, 1 files removed, 0 files unresolved
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 $ hg merge -v --debug --config merge.preferancestor="*"
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 note: merging e673248094b1+ and 6373bbfdae1d using bids from ancestors 0f6b37dbe527 and d1d156401c1b
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128
calculating bids for ancestor 0f6b37dbe527
searching for copies back to rev 3
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 unmatched files in local:
d1/f3
d1/f4
unmatched files in other:
d2/f4
all copies found (* = to merge, ! = divergent, % = renamed and deleted):
src: 'd1/f4' -> dst: 'd2/f4'
checking for directory renames
discovered dir src: 'd1/' -> dst: 'd2/'
pending file src: 'd1/f3' -> dst: 'd2/f3'
pending file src: 'd1/f4' -> dst: 'd2/f4'
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 resolving manifests
branchmerge: True, force: False, partial: False
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 ancestor: 0f6b37dbe527, local: e673248094b1+, remote: 6373bbfdae1d
d2/f3: remote directory rename - move from d1/f3 -> dm
d2/f4: remote directory rename, both created -> m
Martin von Zweigbergk
merge: make 'keep' message more descriptive...
r23482 f1: remote unchanged -> k
Mads Kiilerich
merge: make debug output slightly more helpful by including message for action...
r21269 f2: versions differ -> m
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 calculating bids for ancestor d1d156401c1b
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 searching for copies back to rev 3
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 unmatched files in other:
d2/f4
all copies found (* = to merge, ! = divergent, % = renamed and deleted):
src: 'd1/f4' -> dst: 'd2/f4'
checking for directory renames
discovered dir src: 'd1/' -> dst: 'd2/'
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 resolving manifests
branchmerge: True, force: False, partial: False
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 ancestor: d1d156401c1b, local: e673248094b1+, remote: 6373bbfdae1d
d1/f3: other deleted -> r
d1/f4: other deleted -> r
d2/f4: remote created -> g
Martin von Zweigbergk
merge: let bid merge work on the file->action dict...
r23638 f1: versions differ -> m
Mads Kiilerich
merge: change debug logging - test output changes but no real changes...
r21391 f2: remote is newer -> g
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128
auction for merging merge bids
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 d1/f3: consensus for r
d1/f4: consensus for r
d2/f3: consensus for dm
d2/f4: picking 'get' action
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 f1: picking 'keep' action
f2: picking 'get' action
end of auction
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 d1/f3: other deleted -> r
removing d1/f3
d1/f4: other deleted -> r
removing d1/f4
d2/f4: remote created -> g
getting d2/f4
Mads Kiilerich
merge: change priority / ordering of merge actions...
r21389 f2: remote is newer -> g
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 getting f2
Martin von Zweigbergk
merge: make 'keep' message more descriptive...
r23482 f1: remote unchanged -> k
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 (branch merge, don't forget to commit)
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 $ f --dump --recurse *
d2: directory with 2 files
d2/f3:
>>>
0 base
<<<
d2/f4:
>>>
0 base
<<<
Mads Kiilerich
tests: use 'f' in test-merge-criss-cross.t to prepare for recursive dumping...
r30855 f1:
>>>
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 5 second change
Mads Kiilerich
tests: use 'f' in test-merge-criss-cross.t to prepare for recursive dumping...
r30855 <<<
f2:
>>>
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 6 second change
Mads Kiilerich
tests: use 'f' in test-merge-criss-cross.t to prepare for recursive dumping...
r30855 <<<
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128
Verify how the output looks and and how verbose it is:
$ hg up -qC
Mads Kiilerich
merge: use bid merge by default (BC)...
r22672 $ hg merge
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 (branch merge, don't forget to commit)
Pierre-Yves David
update: change default destination to tipmost descendant (issue4673) (BC)...
r28065 $ hg up -qC tip
Mads Kiilerich
merge: use bid merge by default (BC)...
r22672 $ hg merge -v
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 note: merging 6373bbfdae1d+ and e673248094b1 using bids from ancestors 0f6b37dbe527 and d1d156401c1b
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128
calculating bids for ancestor 0f6b37dbe527
resolving manifests
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 calculating bids for ancestor d1d156401c1b
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 resolving manifests
auction for merging merge bids
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 d2/f3: consensus for dg
d2/f4: consensus for m
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 f1: picking 'get' action
f2: picking 'keep' action
end of auction
getting f1
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 getting d1/f3 to d2/f3
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 (branch merge, don't forget to commit)
$ hg up -qC
$ hg merge -v --debug --config merge.preferancestor="*"
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 note: merging 6373bbfdae1d+ and e673248094b1 using bids from ancestors 0f6b37dbe527 and d1d156401c1b
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128
calculating bids for ancestor 0f6b37dbe527
searching for copies back to rev 3
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 unmatched files in local:
d2/f4
unmatched files in other:
d1/f3
d1/f4
all copies found (* = to merge, ! = divergent, % = renamed and deleted):
src: 'd1/f4' -> dst: 'd2/f4'
checking for directory renames
discovered dir src: 'd1/' -> dst: 'd2/'
pending file src: 'd1/f3' -> dst: 'd2/f3'
pending file src: 'd1/f4' -> dst: 'd2/f4'
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 resolving manifests
branchmerge: True, force: False, partial: False
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 ancestor: 0f6b37dbe527, local: 6373bbfdae1d+, remote: e673248094b1
d2/f3: local directory rename - get from d1/f3 -> dg
d2/f4: local directory rename, both created -> m
Mads Kiilerich
merge: make debug output slightly more helpful by including message for action...
r21269 f1: remote is newer -> g
f2: versions differ -> m
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 calculating bids for ancestor d1d156401c1b
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 searching for copies back to rev 3
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 unmatched files in local:
d2/f4
all copies found (* = to merge, ! = divergent, % = renamed and deleted):
src: 'd1/f4' -> dst: 'd2/f4'
checking for directory renames
discovered dir src: 'd1/' -> dst: 'd2/'
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 resolving manifests
branchmerge: True, force: False, partial: False
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 ancestor: d1d156401c1b, local: 6373bbfdae1d+, remote: e673248094b1
Martin von Zweigbergk
merge: let bid merge work on the file->action dict...
r23638 f1: versions differ -> m
Martin von Zweigbergk
merge: make 'keep' message more descriptive...
r23482 f2: remote unchanged -> k
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128
auction for merging merge bids
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 d2/f3: consensus for dg
d2/f4: consensus for m
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 f1: picking 'get' action
f2: picking 'keep' action
end of auction
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 preserving d2/f4 for resolve of d2/f4
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 f1: remote is newer -> g
getting f1
Martin von Zweigbergk
merge: make 'keep' message more descriptive...
r23482 f2: remote unchanged -> k
Mads Kiilerich
merge: fix crash on criss cross merge with dir move and delete (issue5020)...
r30856 d2/f3: local directory rename - get from d1/f3 -> dg
getting d1/f3 to d2/f3
d2/f4: local directory rename, both created -> m (premerge)
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
Mads Kiilerich
merge: with merge.preferancestor=*, run an auction with bids from ancestors...
r21128 (branch merge, don't forget to commit)
Mads Kiilerich
tests: add test case for criss cross merge...
r20636 $ cd ..
Mads Kiilerich
tests: better test coverage for bid merge...
r21169
http://stackoverflow.com/questions/9350005/how-do-i-specify-a-merge-base-to-use-in-a-hg-merge/9430810
$ hg init ancestor-merging
$ cd ancestor-merging
$ echo a > x
$ hg commit -A -m a x
$ hg update -q 0
$ echo b >> x
$ hg commit -m b
$ hg update -q 0
$ echo c >> x
$ hg commit -qm c
$ hg update -q 1
$ hg merge -q --tool internal:local 2
$ echo c >> x
$ hg commit -m bc
$ hg update -q 2
$ hg merge -q --tool internal:local 1
$ echo b >> x
$ hg commit -qm cb
Mads Kiilerich
merge: use bid merge by default (BC)...
r22672 $ hg merge --config merge.preferancestor='!'
Mads Kiilerich
tests: better test coverage for bid merge...
r21169 note: using 70008a2163f6 as ancestor of 0d355fdef312 and 4b8b546a3eef
alternatively, use --config merge.preferancestor=b211bbc6eb3c
merging x
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ cat x
a
c
b
c
$ hg up -qC .
$ hg merge --config merge.preferancestor=b211bbc6eb3c
note: using b211bbc6eb3c as ancestor of 0d355fdef312 and 4b8b546a3eef
alternatively, use --config merge.preferancestor=70008a2163f6
merging x
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ cat x
a
b
c
b
$ hg up -qC .
$ hg merge -v --config merge.preferancestor="*"
Mads Kiilerich
merge: tell the user when we are using bid merge...
r21171 note: merging 0d355fdef312+ and 4b8b546a3eef using bids from ancestors 70008a2163f6 and b211bbc6eb3c
Mads Kiilerich
tests: better test coverage for bid merge...
r21169
calculating bids for ancestor 70008a2163f6
resolving manifests
calculating bids for ancestor b211bbc6eb3c
resolving manifests
auction for merging merge bids
Mads Kiilerich
merge: improve notes for listing the bids for ambiguous merges
r21172 x: multiple bids for merge action:
versions differ -> m
versions differ -> m
Mads Kiilerich
merge: fix stray character in bid merge message
r21170 x: ambiguous merge - picked m action
Mads Kiilerich
tests: better test coverage for bid merge...
r21169 end of auction
merging x
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ cat x
a
c
b
c
Mads Kiilerich
changectx: ancestor should only prefer merge.preferancestor if it is a revision...
r22180 Verify that the old context ancestor works with / despite preferancestor:
$ hg log -r 'ancestor(head())' --config merge.preferancestor=1 -T '{rev}\n'
1
$ hg log -r 'ancestor(head())' --config merge.preferancestor=2 -T '{rev}\n'
2
$ hg log -r 'ancestor(head())' --config merge.preferancestor=3 -T '{rev}\n'
1
Mads Kiilerich
changectx: skip all invalid merge.preferancestor values...
r22671 $ hg log -r 'ancestor(head())' --config merge.preferancestor='1337 * - 2' -T '{rev}\n'
2
Mads Kiilerich
changectx: ancestor should only prefer merge.preferancestor if it is a revision...
r22180
Mads Kiilerich
tests: better test coverage for bid merge...
r21169 $ cd ..