Please pull mergetool.git
From: "Theodore Ts'o" <tytso@mit.edu>
Date: 2016-06-15 22:43:15
Subsystem:
documentation, the rest · Maintainers:
Jonathan Corbet, Linus Torvalds
Hi Junio,
Please pull from the "mergetool" branch at:
git://repo.or.cz/git/mergetool.git mergetool
It adds support for vimdiff/gvimdiff as a mergetool program, as well
Josh's suggestion of making the default merge-tool selection more
intelligent, although I've rewritten it somewhat take into account the
comments made by you and others on the git mailing list.
(Note that as of this writing, meld is a pretty sad/dificient tool, and
even GNOME users may very well prefer kdiff3 over meld --- which is my
default. Still, it seems reasonable to default to using KDE tools in an
KDE login session, and GNOME tools in a GNOME login session, and people
who care differently should set their own preferences in ~/.gitconfig.)
- Ted
Dan McGee (1):
git-mergetool: Allow gvimdiff to be used as a mergetool
Theodore Ts'o (2):
git-mergetool: Make default selection of merge-tool more intelligent
Add git-applymbox, git-applypatch, and *~ to .gitignore
b/.gitignore | 3 ++
b/Documentation/config.txt | 2 -
b/Documentation/git-mergetool.txt | 2 -
b/git-mergetool.sh | 46 +++++++++++++++++++++++---------------
git-mergetool.sh | 12 ++++++++-
5 files changed, 44 insertions(+), 21 deletions(-)
diff --git a/.gitignore b/.gitignore
index 27e5aeb..70a4a68 100644
--- a/.gitignore
+++ b/.gitignore@@ -7,6 +7,8 @@ git-add--interactive git-am git-annotate git-apply +git-applymbox +git-applypatch git-archimport git-archive git-bisect
@@ -161,6 +163,7 @@ git-core.spec *.exe *.[ao] *.py[co] +*~ config.mak autom4te.cache config.cache
diff --git a/Documentation/config.txt b/Documentation/config.txt
index de408b6..a2057d9 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt@@ -531,7 +531,7 @@ merge.summary:: merge.tool:: Controls which merge resolution program is used by gitlink:git-mergetool[l]. Valid values are: "kdiff3", "tkdiff", - "meld", "xxdiff", "emerge", "vimdiff", and "opendiff" + "meld", "xxdiff", "emerge", "vimdiff", "gvimdiff", and "opendiff". merge.verbosity:: Controls the amount of output shown by the recursive merge
diff --git a/Documentation/git-mergetool.txt b/Documentation/git-mergetool.txt
index b89c51c..6c32c6d 100644
--- a/Documentation/git-mergetool.txt
+++ b/Documentation/git-mergetool.txt@@ -25,7 +25,7 @@ OPTIONS -t or --tool=<tool>:: Use the merge resolution program specified by <tool>. Valid merge tools are: - kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, and opendiff + kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, and opendiff + If a merge resolution program is not specified, 'git mergetool' will use the configuration variable merge.tool. If the
diff --git a/git-mergetool.sh b/git-mergetool.sh
index bb21b03..7b66309 100755
--- a/git-mergetool.sh
+++ b/git-mergetool.sh@@ -215,6 +215,12 @@ merge_file () { check_unchanged save_backup ;; + gvimdiff) + touch "$BACKUP" + gvimdiff -f -- "$LOCAL" "$path" "$REMOTE" + check_unchanged + save_backup + ;; xxdiff) touch "$BACKUP" if base_present ; then
@@ -293,7 +299,7 @@ done if test -z "$merge_tool"; then merge_tool=`git-config merge.tool` case "$merge_tool" in - kdiff3 | tkdiff | xxdiff | meld | opendiff | emerge | vimdiff | "") + kdiff3 | tkdiff | xxdiff | meld | opendiff | emerge | vimdiff | gvimdiff | "") ;; # happy *) echo >&2 "git config option merge.tool set to unknown tool: $merge_tool"
@@ -304,28 +310,42 @@ if test -z "$merge_tool"; then fi if test -z "$merge_tool" ; then - if type kdiff3 >/dev/null 2>&1 && test -n "$DISPLAY"; then - merge_tool="kdiff3"; - elif type tkdiff >/dev/null 2>&1 && test -n "$DISPLAY"; then - merge_tool=tkdiff - elif type xxdiff >/dev/null 2>&1 && test -n "$DISPLAY"; then - merge_tool=xxdiff - elif type meld >/dev/null 2>&1 && test -n "$DISPLAY"; then - merge_tool=meld - elif type opendiff >/dev/null 2>&1; then - merge_tool=opendiff - elif type emacs >/dev/null 2>&1; then - merge_tool=emerge - elif type vimdiff >/dev/null 2>&1; then - merge_tool=vimdiff - else + if test -n "$DISPLAY"; then + merge_tool_candidates="kdiff3 tkdiff xxdiff meld gvimdiff" + if test -n "$GNOME_DESKTOP_SESSION_ID" ; then + merge_tool_candidates="meld $merge_tool_candidates" + fi + if test "$KDE_FULL_SESSION" = "true"; then + merge_tool_candidates="kdiff3 $merge_tool_candidates" + fi + fi + if echo "${VISUAL:-$EDITOR}" | grep 'emacs' > /dev/null 2>&1; then + merge_tool_candidates="$merge_tool_candidates emerge" + fi + if echo "${VISUAL:-$EDITOR}" | grep 'vim' > /dev/null 2>&1; then + merge_tool_candidates="$merge_tool_candidates vimdiff" + fi + merge_tool_candidates="$merge_tool_candidates opendiff emerge vimdiff" + echo "merge tool candidates: $merge_tool_candidates" + for i in $merge_tool_candidates; do + if test $i = emerge ; then + cmd=emacs + else + cmd=$i + fi + if type $cmd > /dev/null 2>&1; then + merge_tool=$i + break + fi + done + if test -z "$merge_tool" ; then echo "No available merge resolution programs available." exit 1 fi fi case "$merge_tool" in - kdiff3|tkdiff|meld|xxdiff|vimdiff|opendiff) + kdiff3|tkdiff|meld|xxdiff|vimdiff|gvimdiff|opendiff) if ! type "$merge_tool" > /dev/null 2>&1; then echo "The merge tool $merge_tool is not available" exit 1