##// 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:

r42343:380f59da default
r44657:6ca9f45b default
Show More
test-double-merge.t
65 lines | 1.8 KiB | text/troff | Tads3Lexer
/ tests / test-double-merge.t
Pradeepkumar Gayam
tests: unify test-double-merge
r11973 $ hg init repo
$ cd repo
$ echo line 1 > foo
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg ci -qAm 'add foo'
Pradeepkumar Gayam
tests: unify test-double-merge
r11973
copy foo to bar and change both files
$ hg cp foo bar
$ echo line 2-1 >> foo
$ echo line 2-2 >> bar
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg ci -m 'cp foo bar; change both'
Pradeepkumar Gayam
tests: unify test-double-merge
r11973
in another branch, change foo in a way that doesn't conflict with
the other changes
$ hg up -qC 0
$ echo line 0 > foo
$ hg cat foo >> foo
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg ci -m 'change foo'
Pradeepkumar Gayam
tests: unify test-double-merge
r11973 created new head
we get conflicts that shouldn't be there
$ hg merge -P
Martin Geisler
tests: remove unneeded -d flags...
r12156 changeset: 1:484bf6903104
Pradeepkumar Gayam
tests: unify test-double-merge
r11973 user: test
Martin Geisler
tests: remove unneeded -d flags...
r12156 date: Thu Jan 01 00:00:00 1970 +0000
Pradeepkumar Gayam
tests: unify test-double-merge
r11973 summary: cp foo bar; change both
$ hg merge --debug
unmatched files in other:
bar
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: 'foo' -> dst: 'bar' *
Pradeepkumar Gayam
tests: unify test-double-merge
r11973 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: e6dc8efe11cc, local: 6a0df1dad128+, remote: 484bf6903104
Mads Kiilerich
merge: change debug logging - test output changes but no real changes...
r21391 preserving foo for resolve of bar
preserving foo for resolve of foo
Matt Harbison
tests: flag Windows specific lines about background closing as optional
r28318 starting 4 threads for background file closing (?)
Siddharth Agarwal
merge.mergestate: perform all premerges before any merges (BC)...
r26618 bar: remote copied from foo -> m (premerge)
Siddharth Agarwal
filemerge: add debug output for whether this is a change/delete conflict...
r27161 picked tool ':merge' for bar (binary False symlink False changedelete False)
Pradeepkumar Gayam
tests: unify test-double-merge
r11973 merging foo and bar to bar
Martin Geisler
tests: remove unneeded -d flags...
r12156 my bar@6a0df1dad128+ other bar@484bf6903104 ancestor foo@e6dc8efe11cc
Pradeepkumar Gayam
tests: unify test-double-merge
r11973 premerge successful
Siddharth Agarwal
merge.mergestate: perform all premerges before any merges (BC)...
r26618 foo: versions differ -> m (premerge)
Siddharth Agarwal
filemerge: add debug output for whether this is a change/delete conflict...
r27161 picked tool ':merge' for foo (binary False symlink False changedelete False)
Pradeepkumar Gayam
tests: unify test-double-merge
r11973 merging foo
Martin Geisler
tests: remove unneeded -d flags...
r12156 my foo@6a0df1dad128+ other foo@484bf6903104 ancestor foo@e6dc8efe11cc
Pradeepkumar Gayam
tests: unify test-double-merge
r11973 premerge successful
0 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
contents of foo
$ cat foo
line 0
line 1
line 2-1
contents of bar
$ cat bar
line 0
line 1
line 2-2
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913
$ cd ..