git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Steffen Prohaska <prohaska@zib.de>
To: git@vger.kernel.org, torgil.svensson@gmail.com,
	Johannes.Schindelin@gmx.de, tytso@mit.edu
Cc: Steffen Prohaska <prohaska@zib.de>
Subject: [PATCH] mergetool: added support for kdiff3 on windows
Date: Sat, 11 Aug 2007 01:56:01 +0200	[thread overview]
Message-ID: <11867901621009-git-send-email-prohaska@zib.de> (raw)
In-Reply-To: <11867901612954-git-send-email-prohaska@zib.de>

kdiff3's homepage is http://kdiff3.sourceforge.net/.

kdiff3 is automatically added to the available
mergetools if its path is found in the Windows
Registry. Be sure to set

    git config core.autocrlf true

kdiff3 seems to follow Windows crlf convention.

Signed-off-by: Steffen Prohaska <prohaska@zib.de>
---
 git-mergetool.sh |   22 ++++++++++++++++++----
 1 files changed, 18 insertions(+), 4 deletions(-)


This patch was developed against msysgit, and is add
functionality specific to Windows. It should also apply
against git.git's master and shouldn't do any harm
to the handling of mergetools on platforms other than
Windows

It was tested on a Windows with german localization. I'd
be interested if the lookup of kdiff3 works on other
localizations, too.

Handling mergetools that needs an absolute path is a bit
hacky. merge_tool is mostly used as an alias but also as
the name of an executable. A level of indirection would
be nice for handling absolute paths.

kdiff3 on Windows doesn't accept '--' on it's commandline.
Is '--' really needed on other platforms? I replaced it by
the variable KDIFF3SEPARATOR.

	Steffen


diff --git a/git-mergetool.sh b/git-mergetool.sh
index 90a69b3..9f64e7c 100755
--- a/git-mergetool.sh
+++ b/git-mergetool.sh
@@ -14,6 +14,7 @@ SUBDIRECTORY_OK=Yes
 require_work_tree
 
 KDIFF3=kdiff3
+KDIFF3SEPARATOR=--
 
 # Returns true if the mode reflects a symlink
 is_symlink () {
@@ -194,10 +195,10 @@ merge_file () {
 	kdiff3)
 	    if base_present ; then
 		("$KDIFF3" --auto --L1 "$path (Base)" -L2 "$path (Local)" --L3 "$path (Remote)" \
-		    -o "$path" -- "$BASE" "$LOCAL" "$REMOTE" > /dev/null 2>&1)
+		    -o "$path" $KDIFF3SEPERATOR "$BASE" "$LOCAL" "$REMOTE" > /dev/null 2>&1)
 	    else
 		("$KDIFF3" --auto -L1 "$path (Local)" --L2 "$path (Remote)" \
-		    -o "$path" -- "$LOCAL" "$REMOTE" > /dev/null 2>&1)
+		    -o "$path" $KDIFF3SEPERATOR "$LOCAL" "$REMOTE" > /dev/null 2>&1)
 	    fi
 	    status=$?
 	    remove_backup
@@ -321,6 +322,11 @@ if test -z "$merge_tool" ; then
             merge_tool_candidates="kdiff3 $merge_tool_candidates"
         fi
     fi
+    regentry="$(REG QUERY 'HKEY_LOCAL_MACHINE\SOFTWARE\KDiff3\diff-ext' 2>/dev/null)" && {
+        KDIFF3=$(echo "$regentry" | grep diffcommand | cut -f 3)
+        KDIFF3SEPARATOR=
+        merge_tool_candidates="$merge_tool_candidates kdiff3"
+    } 
     if echo "${VISUAL:-$EDITOR}" | grep 'emacs' > /dev/null 2>&1; then
         merge_tool_candidates="$merge_tool_candidates emerge"
     fi
@@ -332,10 +338,12 @@ if test -z "$merge_tool" ; then
     for i in $merge_tool_candidates; do
         if test $i = emerge ; then
             cmd=emacs
+        elif test $i = kdiff3 ; then
+            cmd="$KDIFF3"
         else
             cmd=$i
         fi
-        if type $cmd > /dev/null 2>&1; then
+        if type "$cmd" > /dev/null 2>&1; then
             merge_tool=$i
             break
         fi
@@ -347,7 +355,13 @@ if test -z "$merge_tool" ; then
 fi
 
 case "$merge_tool" in
-    kdiff3|tkdiff|meld|xxdiff|vimdiff|gvimdiff|opendiff)
+    kdiff3)
+	if ! type "$KDIFF3" > /dev/null 2>&1; then
+	    echo "The merge tool $merge_tool is not available"
+	    exit 1
+	fi
+	;;
+    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
-- 
1.5.3.rc4.744.g68381

      reply	other threads:[~2007-08-10 23:56 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-10 23:56 [PATCH 1/2] mergetool: refactored kdiff3 -> KDIFF3 Steffen Prohaska
2007-08-10 23:56 ` Steffen Prohaska [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=11867901621009-git-send-email-prohaska@zib.de \
    --to=prohaska@zib.de \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=torgil.svensson@gmail.com \
    --cc=tytso@mit.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).