We are using Mercurial (+Tortoise Hg) as VCS and Kdiff as diff and merge tool.
Some files are merged automatically and sometimes this auto merge result is wierd:
public static Method()
<<<<<<< local
{
DoSmth();
}
=======
{
DoSmth2();
}
>>>>>>> other
Seems like kdiff has done nothing with unresolved conflict in file but marked it as resolved. Maybe kdiff doesn't understand diff file format sometimes? Some bug in hg and kdiff integration?
Also seems that this problem appeared recently, may be the problem with a new version of hg/tortoise hg/kdiff?
We are using:
From mercurial.ini:
[ui]
merge = kdiff3
[tortoisehg]
editor=VisualStudio
vdiff=meld
[merge-tools]
meld.executable = C:\Program Files (x86)\Meld\meld.exe
meld.priority = 1
meld.premerge = False
meld.args = $local $base $other
[diff]
git = True
Problem appears even with manual merge. Steps:
And here it is! Parent 1 (center column) contains 'dest', 'source' as a part of the file. But there were no such lines in this file.
Seems like HG gives to kdiff file with some diff info that Kdiff can't/mustn't understand.
It's a bug in Mercurial 3.6.0 and 3.6.1. It was fixed in 3.6.2.
Quoting the original report:
Jonathan Little 2015-11-13 17:41:55 UTC
I have encountered the following problem introduced in Mercurial 3.6. I am running version 3.6+20151109 with TortoiseHG 3.6, but the problem appears to be in hg core (see my THG bug report: https://bitbucket.org/tortoisehg/thg/issues/4354) The behavior I'm seeing:
- Set merge tool ([ui] merge in .hgrc/mercurial.ini) to internal:merge
- Create a repository with two separate branches, with a change on each branch such that the changes conflict with each other.
- Merge the two branch heads. internal:merge will leave the conflicting file with conflict markers.
- Run "hg resolve --tool=kdiff3 ".
Expected result: KDiff3 correctly shows the shared ancestor content and the two conflicting revisions (see Expected.jpg).
Actual result: KDiff3 shows the shared ancestor revision and "other" conflicting revision correctly, but the local conflicting revision contains the merge markers from internal:merge (see Actual.jpg).
The problem occurs with THG's built in KDiff3 config, and with the built in KDiff3 config from mercurial/default.d/mergetools.rc. It does not occur with a barebones config consisting just of kdiff3.executable, but starts occurring when you add arguments and use $local. So it appears that the treatment of $local has changed to simply use the current local content of the file rather than the content on the merge parent from the local branch.
This behavior started with 3.6.0.