[PATCH] mergetool--lib: add support for beyond compare
From: Chris Packham <hidden>
Date: 2016-06-15 22:50:35
Add support for Beyond Compare as a diff/merge tool.
Signed-off-by: Chris Packham <redacted>
---
Beyond compare is a non-free file comparison tool for Linux and Windows. A
trial version is available here [1]. People at $dayjob had used beyond compare
v2.0 for Windows a while ago but we hadn't paid attention since the change to
Linux. We noticed the other day that with v3.0 a native Linux version was now
available.
I wasn't sure about whether git should have support for non-free external
tools. Then I saw that support for Araxis had been added in b6f0621a, which
I've used as a guide for this patch.
The actual problem I was trying to solve was that if I configure an external
merge tool beyond compare gets confused when $BASE does not exist (I think this
might be a problem for other tools too). I could work around the problem with
the following messy config
[mergetool "bcompare"]
cmd = test -e \"$BASE\" && bcompare \"$BASE\" \"$LOCAL\" \"$REMOTE\" -mergeoutput=\"$MERGED\" || bcompare \"$LOCAL\" \"$REMOTE\" -mergeoutput=\"$MERGED\"
I've tested this with the Linux version and it works well, it'd be nice to hear
from some windows folks. In particular I think the option flags might change to
use '/' instead of '-'
[1] http://www.scootersoftware.com/download.php
Documentation/git-difftool.txt | 2 +-
Documentation/git-mergetool.txt | 2 +-
Documentation/merge-config.txt | 6 +++---
contrib/completion/git-completion.bash | 2 +-
git-mergetool--lib.sh | 18 ++++++++++++++++--
5 files changed, 22 insertions(+), 8 deletions(-)
diff --git a/Documentation/git-difftool.txt b/Documentation/git-difftool.txt
index db87f1d..35ec927 100644
--- a/Documentation/git-difftool.txt
+++ b/Documentation/git-difftool.txt@@ -32,7 +32,7 @@ OPTIONS Use the diff tool specified by <tool>. Valid merge tools are: kdiff3, kompare, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, - ecmerge, diffuse, opendiff, p4merge and araxis. + ecmerge, diffuse, opendiff, p4merge, araxis and bcompare. + If a diff tool is not specified, 'git difftool' will use the configuration variable `diff.tool`. If the
diff --git a/Documentation/git-mergetool.txt b/Documentation/git-mergetool.txt
index 1f75a84..0239929 100644
--- a/Documentation/git-mergetool.txt
+++ b/Documentation/git-mergetool.txt@@ -27,7 +27,7 @@ OPTIONS Use the merge resolution program specified by <tool>. Valid merge tools are: kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, - diffuse, tortoisemerge, opendiff, p4merge and araxis. + diffuse, tortoisemerge, opendiff, p4merge, araxis and bcompare. + If a merge resolution program is not specified, 'git mergetool' will use the configuration variable `merge.tool`. If the
diff --git a/Documentation/merge-config.txt b/Documentation/merge-config.txt
index 1e5c22c..87c76e5 100644
--- a/Documentation/merge-config.txt
+++ b/Documentation/merge-config.txt@@ -35,9 +35,9 @@ merge.tool:: Controls which merge resolution program is used by linkgit:git-mergetool[1]. Valid built-in values are: "kdiff3", "tkdiff", "meld", "xxdiff", "emerge", "vimdiff", "gvimdiff", - "diffuse", "ecmerge", "tortoisemerge", "p4merge", "araxis" and - "opendiff". Any other value is treated is custom merge tool - and there must be a corresponding mergetool.<tool>.cmd option. + "diffuse", "ecmerge", "tortoisemerge", "p4merge", "araxis", + "opendiff" and "bcompare". Any other value is treated is custom merge + tool and there must be a corresponding mergetool.<tool>.cmd option. merge.verbosity:: Controls the amount of output shown by the recursive merge
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 893b771..59ae12e 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash@@ -1358,7 +1358,7 @@ _git_diff () } __git_mergetools_common="diffuse ecmerge emerge kdiff3 meld opendiff - tkdiff vimdiff gvimdiff xxdiff araxis p4merge + tkdiff vimdiff gvimdiff xxdiff araxis p4merge bcompare " _git_difftool ()
diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
index 77d4aee..c77ac7f 100644
--- a/git-mergetool--lib.sh
+++ b/git-mergetool--lib.sh@@ -48,7 +48,7 @@ valid_tool () { case "$1" in kdiff3 | tkdiff | xxdiff | meld | opendiff | \ vimdiff | gvimdiff | vimdiff2 | gvimdiff2 | \ - emerge | ecmerge | diffuse | araxis | p4merge) + emerge | ecmerge | diffuse | araxis | p4merge | bcompare) ;; # happy tortoisemerge) if ! merge_mode; then
@@ -304,6 +304,20 @@ run_merge_tool () { >/dev/null 2>&1 fi ;; + bcompare) + if merge_mode; then + if $base_present; then + "$merge_tool_path" \ + "$BASE" "$LOCAL" "$REMOTE" -mergeoutput="$MERGED" + else + "$merge_tool_path" \ + "$LOCAL" "$REMOTE" -mergeoutput="$MERGED" + fi + check_unchanged + else + "$merge_tool_path" "$LOCAL" "$REMOTE" + fi + ;; *) merge_tool_cmd="$(get_merge_tool_cmd "$1")" if test -z "$merge_tool_cmd"; then
@@ -343,7 +357,7 @@ guess_merge_tool () { else tools="opendiff kdiff3 tkdiff xxdiff meld $tools" fi - tools="$tools gvimdiff diffuse ecmerge p4merge araxis" + tools="$tools gvimdiff diffuse ecmerge p4merge araxis bcompare" fi case "${VISUAL:-$EDITOR}" in *vim*)
--
1.7.4.1.48.g5673d.dirty