##// END OF EJS Templates
copies: make mergecopies() distinguish between copies on each side...
copies: make mergecopies() distinguish between copies on each side I find it confusing that most of the dicts returned from `mergecopies()` have entries specific to one branch of the merge, but they're still combined into dict. For example, you can't tell if `copy = {"bar": "foo"}` means that "foo" was copied to "bar" on the first branch or the second. It also feels like there are bugs lurking here because we may mistake which side the copy happened on. However, for most of the dicts, it's not possible that there is disagreement. For example, `renamedelete` keeps track of renames that happened on one side of the merge where the other side deleted the file. There can't be a disagreement there (because we record that in the `diverge` dict instead). For regular copies/renames, there can be a disagreement. Let's say file "foo" was copied to "bar" on one branch and file "baz" was copied to "bar" on the other. Beacause we only return one `copy` dict, we end up replacing the `{"bar": "foo"}` entry by `{"bar": "baz"}`. The merge code (`manifestmerge()`) will then decide that that means "both renamed from 'baz'". We should probably treat it as a conflict instead. The next few patches will make `mergecopies()` return two instances of most of the returned copies. That will lead to a bit more code (~40 lines), but I think it makes both `copies.mergecopies()` and `merge.manifestmerge()` clearer. Differential Revision: https://phab.mercurial-scm.org/D7986

File last commit:

r44651:5de70f79 default
r44657:6ca9f45b default
Show More
test-rename-merge1.t
256 lines | 6.7 KiB | text/troff | Tads3Lexer
/ tests / test-rename-merge1.t
Adrian Buehlmann
tests: unify test-rename-merge1
r12298 $ hg init
$ echo "[merge]" >> .hg/hgrc
$ echo "followcopies = 1" >> .hg/hgrc
$ echo foo > a
$ echo foo > a2
$ hg add a a2
$ hg ci -m "start"
$ hg mv a b
$ hg mv a2 b2
$ hg ci -m "rename"
$ hg co 0
2 files updated, 0 files merged, 2 files removed, 0 files unresolved
$ echo blahblah > a
$ echo blahblah > a2
$ hg mv a2 c2
$ hg ci -m "modify"
created new head
$ hg merge -y --debug
unmatched files in local:
c2
unmatched files in other:
b
b2
Thomas Arendsen Hein
merge: show renamed on one and deleted on the other side in debug output
r16795 all copies found (* = to merge, ! = divergent, % = renamed and deleted):
Siddharth Agarwal
copies: make debug messages more sensible...
r18135 src: 'a' -> dst: 'b' *
src: 'a2' -> dst: 'b2' !
Mads Kiilerich
copies: report found copies sorted
r18362 src: 'a2' -> dst: 'c2' !
Adrian Buehlmann
tests: unify test-rename-merge1
r12298 checking for directory renames
resolving manifests
Siddharth Agarwal
manifestmerge: pass in branchmerge and force separately...
r18605 branchmerge: True, force: False, partial: False
Martin Geisler
merge: make debug output easier to read...
r15625 ancestor: af1939970a1c, local: 044f8520aeeb+, remote: 85c198ef2f6c
Martin von Zweigbergk
merge: move messages about possible conflicts a litte earlier...
r26957 note: possible conflict - a2 was renamed multiple times to:
Martin von Zweigbergk
copies: print list of divergent renames in sorted order...
r42279 b2
Martin von Zweigbergk
merge: move messages about possible conflicts a litte earlier...
r26957 c2
Mads Kiilerich
merge: change debug logging - test output changes but no real changes...
r21391 preserving a for resolve of b
removing a
Mads Kiilerich
merge: change priority / ordering of merge actions...
r21389 b2: remote created -> g
Bryan O'Sullivan
tests: update test output (will be folded into parent)
r18631 getting b2
Siddharth Agarwal
merge.mergestate: perform all premerges before any merges (BC)...
r26618 b: remote moved from a -> m (premerge)
Siddharth Agarwal
filemerge: add debug output for whether this is a change/delete conflict...
r27161 picked tool ':merge' for b (binary False symlink False changedelete False)
Adrian Buehlmann
tests: unify test-rename-merge1
r12298 merging a and b to b
my b@044f8520aeeb+ other b@85c198ef2f6c ancestor a@af1939970a1c
premerge successful
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg status -AC
M b
a
M b2
R a
C c2
$ cat b
blahblah
$ hg ci -m "merge"
Sune Foldager
tests: fix deprecated use of hg debugdata/debugindex...
r14182 $ hg debugindex b
Gregory Szorc
debugcommands: drop offset and length from debugindex by default...
r37301 rev linkrev nodeid p1 p2
0 1 57eacc201a7f 000000000000 000000000000
1 3 4727ba907962 000000000000 57eacc201a7f
Adrian Buehlmann
tests: unify test-rename-merge1
r12298
$ hg debugrename b
b renamed from a:dd03b83622e78778b403775d0d074b9ac7387a66
Dan Villiom Podlaski Christiansen
copies: don't detect copies as "divergent renames"...
r12683 This used to trigger a "divergent renames" warning, despite no renames
$ hg cp b b3
$ hg cp b b4
$ hg ci -A -m 'copy b twice'
Martin von Zweigbergk
tests: avoid cryptic nodeids in tests/test-rename-merge1.t...
r42359 $ hg up '.^'
Dan Villiom Podlaski Christiansen
copies: don't detect copies as "divergent renames"...
r12683 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
$ hg up
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg rm b3 b4
$ hg ci -m 'clean up a bit of our mess'
We'd rather not warn on divergent renames done in the same changeset (issue2113)
$ hg cp b b3
$ hg mv b b4
$ hg ci -A -m 'divergent renames in same changeset'
Martin von Zweigbergk
tests: avoid cryptic nodeids in tests/test-rename-merge1.t...
r42359 $ hg up '.^'
Dan Villiom Podlaski Christiansen
copies: don't detect copies as "divergent renames"...
r12683 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
$ hg up
2 files updated, 0 files merged, 1 files removed, 0 files unresolved
Matt Mackall
context: generate file ancestors in reverse revision order (issue2642)...
r13468
Check for issue2642
$ hg init t
$ cd t
$ echo c0 > f1
$ hg ci -Aqm0
$ hg up null -q
$ echo c1 > f1 # backport
$ hg ci -Aqm1
$ hg mv f1 f2
$ hg ci -qm2
$ hg up 0 -q
$ hg merge 1 -q --tool internal:local
$ hg ci -qm3
$ hg merge 2
merging f1 and f2 to f2
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ cat f2
c0
Wagner Bruna
tests: test renaming a file added on two branches (issue2089)...
r13492
Thomas Arendsen Hein
tests: do not create repos inside repos in test-rename-merge1.t...
r16793 $ cd ..
Wagner Bruna
tests: test renaming a file added on two branches (issue2089)...
r13492 Check for issue2089
$ hg init repo2089
$ cd repo2089
Patrick Mezard
test-rename-merge1: make it easier to review, windows friendly...
r13537 $ echo c0 > f1
$ hg ci -Aqm0
Wagner Bruna
tests: test renaming a file added on two branches (issue2089)...
r13492
Patrick Mezard
test-rename-merge1: make it easier to review, windows friendly...
r13537 $ hg up null -q
$ echo c1 > f1
$ hg ci -Aqm1
Wagner Bruna
tests: test renaming a file added on two branches (issue2089)...
r13492
Patrick Mezard
test-rename-merge1: make it easier to review, windows friendly...
r13537 $ hg up 0 -q
Wagner Bruna
tests: test renaming a file added on two branches (issue2089)...
r13492 $ hg merge 1 -q --tool internal:local
Patrick Mezard
test-rename-merge1: make it easier to review, windows friendly...
r13537 $ echo c2 > f1
$ hg ci -qm2
Wagner Bruna
tests: test renaming a file added on two branches (issue2089)...
r13492
Patrick Mezard
test-rename-merge1: make it easier to review, windows friendly...
r13537 $ hg up 1 -q
$ hg mv f1 f2
$ hg ci -Aqm3
Wagner Bruna
tests: test renaming a file added on two branches (issue2089)...
r13492
Patrick Mezard
test-rename-merge1: make it easier to review, windows friendly...
r13537 $ hg up 2 -q
Wagner Bruna
tests: test renaming a file added on two branches (issue2089)...
r13492 $ hg merge 3
Patrick Mezard
test-rename-merge1: make it easier to review, windows friendly...
r13537 merging f1 and f2 to f2
Wagner Bruna
tests: test renaming a file added on two branches (issue2089)...
r13492 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
Patrick Mezard
test-rename-merge1: make it easier to review, windows friendly...
r13537 $ cat f2
c2
Thomas Arendsen Hein
tests: do not create repos inside repos in test-rename-merge1.t...
r16793
$ cd ..
Thomas Arendsen Hein
merge: warn about file deleted in one branch and renamed in other (issue3074)...
r16794
Check for issue3074
$ hg init repo3074
$ cd repo3074
$ echo foo > file
$ hg add file
$ hg commit -m "added file"
$ hg mv file newfile
$ hg commit -m "renamed file"
$ hg update 0
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg rm file
$ hg commit -m "deleted file"
created new head
Thomas Arendsen Hein
merge: show renamed on one and deleted on the other side in debug output
r16795 $ hg merge --debug
unmatched files in other:
newfile
all copies found (* = to merge, ! = divergent, % = renamed and deleted):
Siddharth Agarwal
copies: make debug messages more sensible...
r18135 src: 'file' -> dst: 'newfile' %
Thomas Arendsen Hein
merge: show renamed on one and deleted on the other side in debug output
r16795 checking for directory renames
resolving manifests
Siddharth Agarwal
manifestmerge: pass in branchmerge and force separately...
r18605 branchmerge: True, force: False, partial: False
Thomas Arendsen Hein
merge: show renamed on one and deleted on the other side in debug output
r16795 ancestor: 19d7f95df299, local: 0084274f6b67+, remote: 5d32493049f0
Martin von Zweigbergk
merge: move messages about possible conflicts a litte earlier...
r26957 note: possible conflict - file was deleted and renamed to:
newfile
Mads Kiilerich
merge: change priority / ordering of merge actions...
r21389 newfile: remote created -> g
Bryan O'Sullivan
tests: update test output (will be folded into parent)
r18631 getting newfile
Thomas Arendsen Hein
merge: warn about file deleted in one branch and renamed in other (issue3074)...
r16794 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg status
M newfile
$ cd ..
Martin von Zweigbergk
tests: test merge of renames of different sources to same target...
r44621
Create x and y, then modify y and rename x to z on one side of merge, and
modify x and rename y to z on the other side.
$ hg init conflicting-target
$ cd conflicting-target
$ echo x > x
$ echo y > y
$ hg ci -Aqm 'add x and y'
$ hg mv x z
$ echo foo >> y
$ hg ci -qm 'modify y, rename x to z'
$ hg co -q 0
$ hg mv y z
$ echo foo >> x
$ hg ci -qm 'modify x, rename y to z'
# We should probably tell the user about the conflicting rename sources.
# Depending on which side they pick, we should take that rename and get
# the changes to the source from the other side. The unchanged file should
# remain.
# we should not get the prompts about modify/delete conflicts
$ hg merge --debug 1 -t :merge3
all copies found (* = to merge, ! = divergent, % = renamed and deleted):
src: 'x' -> dst: 'z'
checking for directory renames
resolving manifests
branchmerge: True, force: False, partial: False
ancestor: 5151c134577e, local: 07fcbc9a74ed+, remote: f21419739508
preserving x for resolve of x
preserving z for resolve of z
Matt Harbison
tests: stablize test-rename-merge1.t on Windows...
r44651 starting 4 threads for background file closing (?)
Martin von Zweigbergk
tests: test merge of renames of different sources to same target...
r44621 x: prompt changed/deleted -> m (premerge)
picked tool ':prompt' for x (binary False symlink False changedelete True)
file 'x' was deleted in other [merge rev] but was modified in local [working copy].
You can use (c)hanged version, (d)elete, or leave (u)nresolved.
What do you want to do? u
y: prompt deleted/changed -> m (premerge)
picked tool ':prompt' for y (binary False symlink False changedelete True)
file 'y' was deleted in local [working copy] but was modified in other [merge rev].
You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved.
What do you want to do? u
z: both created -> m (premerge)
picked tool ':merge3' for z (binary False symlink False changedelete False)
merging z
my z@07fcbc9a74ed+ other z@f21419739508 ancestor z@000000000000
z: both created -> m (merge)
picked tool ':merge3' for z (binary False symlink False changedelete False)
my z@07fcbc9a74ed+ other z@f21419739508 ancestor z@000000000000
warning: conflicts while merging z! (edit, then use 'hg resolve --mark')
0 files updated, 0 files merged, 0 files removed, 3 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
[1]
$ ls
x
y
z
z.orig
$ cat x
x
foo
$ cat y
y
foo
# 'z' should have had the added 'foo' line
$ cat z
<<<<<<< working copy: 07fcbc9a74ed - test: modify x, rename y to z
y
||||||| base
=======
x
>>>>>>> merge rev: f21419739508 - test: modify y, rename x to z