Reputation: 3073
Folks, I'm using internal:merge tool since I'm not a big fan of GUI diff tools. I really like it and the only thing I find a bit confusing and not quite convenient is its behavior for binary file conflicts.
It can't merge binary files and exits which is absolutely correct. However in the directory with the conflicting file "foo" it creates only "foo.orig" file.
Can it at least create "foo.other" as well so I can pick which version of file to use(mine or the pulled one)?
P.S. I asked the same question in Mercurial mailing list but noone replied me for several days, maybe I'll have more luck here :)
Upvotes: 3
Views: 2219
Reputation: 73808
You have already gotten some input to your question on the Mercurial mailing list -- I went ahead and tried making the script suggested in the thread. It's been a long while since I've used Subversion, but I think this simple script does the trick:
#!/bin/sh
cp "$1" "$1.mine"
cp "$2" "$1.base"
cp "$3" "$1.other"
false
The final false
command makes the script return a non-zero exit code, signaling to Mercurial that the merge failed. For Windows it looks like this (thanks Pavel):
@copy %1 %1.mine
@copy %2 %1.base
@copy %3 %1.other
exit 1
I saved the Unix version in ~/tmp/m.sh
and tried it with no other merge settings configured than
[ui]
merge = ~/tmp/m.sh
I made a repository with two heads, each with a conflicting change to a JPEG file (mg.jpg
). I also added a non-conflicting change to a text file (a.txt
). Merging gave:
% hg --debug merge
searching for copies back to rev 1
resolving manifests
overwrite None partial False
ancestor 0848c2f8f8f8 local 845b8aa076bd+ remote f611c55aa8ec
mg.jpg: versions differ -> m
a.txt: versions differ -> m
preserving a.txt for resolve of a.txt
preserving mg.jpg for resolve of mg.jpg
picked tool '~/tmp/m.sh' for a.txt (binary False symlink False)
merging a.txt
my a.txt@845b8aa076bd+ other a.txt@f611c55aa8ec ancestor a.txt@0848c2f8f8f8
premerge successful
picked tool '~/tmp/m.sh' for mg.jpg (binary True symlink False)
merging mg.jpg
my mg.jpg@845b8aa076bd+ other mg.jpg@f611c55aa8ec ancestor mg.jpg@0848c2f8f8f8
merging mg.jpg failed!
0 files updated, 1 files merged, 0 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to abandon
The nice thing is that the pre-merge could merge a.txt
by itself and so no a.txt.*
files were created:
% hg stat
M a.txt
M mg.jpg
? mg.jpg.base
? mg.jpg.mine
? mg.jpg.orig
? mg.jpg.other
You can probably fine-tune this script further to suit your needs -- if you do so, then consider adding the information to the Mercurial wiki or at least post your finding on the mailing list.
Upvotes: 4