threads / patch / 18734

patch, 3 partsgit-mergetool/difftool: TortoiseMerge and (g)vimdiff for Windows

Subject: [PATCH 0/3] git-mergetool/difftool: TortoiseMerge and (g)vimdiff for Windows

## tl;dr

5 messages between Apr 5, 2009 and Apr 5, 2009. Diffs are folded; open one to read it.

replies: 4people: 2as markdown or json

Markus Heidelberg· Apr 5, 2009, 12:40 UTC · lore

Patches 2/3 and 3/3 are already in 'da/difftool' in 'pu'. This series is based on 'master', now they can be applied to 4msysgit.git. 'da/difftool' should be recreated anyway.

Markus Heidelberg (3):
  doc/merge-config: list ecmerge as a valid merge tool
  git-mergetool/difftool: make (g)vimdiff workable under Windows
  git-mergetool: add new merge tool TortoiseMerge
 Documentation/git-mergetool.txt      |    3 ++-
 Documentation/merge-config.txt       |    3 ++-
 contrib/difftool/git-difftool-helper |   10 ++++++++--
 git-mergetool.sh                     |   26 +++++++++++++++++++++-----
 4 files changed, 33 insertions(+), 9 deletions(-)
Markus Heidelberg· Apr 5, 2009, 12:42 UTC · re: Markus Heidelberg · lore

[PATCH 1/3] doc/merge-config: list ecmerge as a built-in merge tool

Signed-off-by: Markus Heidelberg <markus.heidelberg@web.de>
---
 Documentation/merge-config.txt |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)
Show changes to Documentation/merge-config.txt +2 −1
diff --git a/Documentation/merge-config.txt b/Documentation/merge-config.txt
index 1ff08ff..9c44af8 100644
--- a/Documentation/merge-config.txt
+++ b/Documentation/merge-config.txt
@@ -22,7 +22,8 @@ merge.stat::
 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", and
+	"tkdiff", "meld", "xxdiff", "emerge", "vimdiff", "gvimdiff",
+	"ecmerge" and
 	"opendiff".  Any other value is treated is custom merge tool
 	and there must be a corresponding mergetool.<tool>.cmd option.
 
-- 
1.6.2.2.460.g49e5c
Markus Heidelberg· Apr 5, 2009, 12:42 UTC · re: Markus Heidelberg · lore

[PATCH 2/3] git-mergetool/difftool: make (g)vimdiff workable under Windows

Under Windows vimdiff and gvimdiff are not available as symbolic links, but as batch files vimdiff.bat and gvimdiff.bat. These files weren't found by 'type vimdiff' which led to the following error:

    The merge tool vimdiff is not available as 'vimdiff'

Even if they were found, it wouldn't work to invoke these batch files from git-mergetool.

To solve this, use vim and gvim (vim.exe and gvim.exe) and pass the -d command line switch over to them.

Signed-off-by: Markus Heidelberg <markus.heidelberg@web.de>
---
 contrib/difftool/git-difftool-helper |   10 ++++++++--
 git-mergetool.sh                     |   10 ++++++++--
 2 files changed, 16 insertions(+), 4 deletions(-)
Show changes to 2 files +16 −4

contrib/difftool/git-difftool-helper, git-mergetool.sh

diff --git a/contrib/difftool/git-difftool-helper b/contrib/difftool/git-difftool-helper
index 9c0a134..e481913 100755
--- a/contrib/difftool/git-difftool-helper
+++ b/contrib/difftool/git-difftool-helper
@@ -86,11 +86,11 @@ launch_merge_tool () {
 		;;
 
 	vimdiff)
-		"$merge_tool_path" -c "wincmd l" "$LOCAL" "$REMOTE"
+		"$merge_tool_path" -d -c "wincmd l" "$LOCAL" "$REMOTE"
 		;;
 
 	gvimdiff)
-		"$merge_tool_path" -c "wincmd l" -f "$LOCAL" "$REMOTE"
+		"$merge_tool_path" -d -c "wincmd l" -f "$LOCAL" "$REMOTE"
 		;;
 
 	xxdiff)
@@ -160,6 +160,12 @@ init_merge_tool_path() {
 	merge_tool_path=$(git config mergetool."$1".path)
 	if test -z "$merge_tool_path"; then
 		case "$1" in
+		vimdiff)
+			merge_tool_path=vim
+			;;
+		gvimdiff)
+			merge_tool_path=gvim
+			;;
 		emerge)
 			merge_tool_path=emacs
 			;;
diff --git a/git-mergetool.sh b/git-mergetool.sh
index 87fa88a..6e611e9 100755
--- a/git-mergetool.sh
+++ b/git-mergetool.sh
@@ -214,12 +214,12 @@ merge_file () {
 	    ;;
 	vimdiff)
 	    touch "$BACKUP"
-	    "$merge_tool_path" -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"
+	    "$merge_tool_path" -d -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"
 	    check_unchanged
 	    ;;
 	gvimdiff)
 	    touch "$BACKUP"
-	    "$merge_tool_path" -c "wincmd l" -f "$LOCAL" "$MERGED" "$REMOTE"
+	    "$merge_tool_path" -d -c "wincmd l" -f "$LOCAL" "$MERGED" "$REMOTE"
 	    check_unchanged
 	    ;;
 	xxdiff)
@@ -359,6 +359,12 @@ init_merge_tool_path() {
 	merge_tool_path=`git config mergetool.$1.path`
 	if test -z "$merge_tool_path" ; then
 		case "$1" in
+			vimdiff)
+				merge_tool_path=vim
+				;;
+			gvimdiff)
+				merge_tool_path=gvim
+				;;
 			emerge)
 				merge_tool_path=emacs
 				;;
-- 
1.6.2.2.460.g49e5c
Markus Heidelberg· Apr 5, 2009, 12:43 UTC · re: Markus Heidelberg · lore

[PATCH 3/3] git-mergetool: add new merge tool TortoiseMerge

TortoiseMerge comes with TortoiseSVN or TortoiseGit for Windows. It can only be used as a merge tool with an existing base file. It cannot be used without a base nor as a diff tool.

The documentation only mentions the slash '/' as command line option prefix, which refused to work, but the parser also accepts the dash '-'

See http://code.google.com/p/msysgit/issues/detail?id=226
Signed-off-by: Markus Heidelberg <markus.heidelberg@web.de>
---
 Documentation/git-mergetool.txt |    3 ++-
 Documentation/merge-config.txt  |    2 +-
 git-mergetool.sh                |   16 +++++++++++++---
 3 files changed, 16 insertions(+), 5 deletions(-)
Show changes to 3 files +16 −5

Documentation/git-mergetool.txt, Documentation/merge-config.txt, git-mergetool.sh

diff --git a/Documentation/git-mergetool.txt b/Documentation/git-mergetool.txt
index 5d3c632..5edac4d 100644
--- a/Documentation/git-mergetool.txt
+++ b/Documentation/git-mergetool.txt
@@ -26,7 +26,8 @@ OPTIONS
 --tool=<tool>::
 	Use the merge resolution program specified by <tool>.
 	Valid merge tools are:
-	kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, and opendiff
+	kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge,
+	tortoisemerge and opendiff
 +
 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 9c44af8..8c10f66 100644
--- a/Documentation/merge-config.txt
+++ b/Documentation/merge-config.txt
@@ -23,7 +23,7 @@ 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",
-	"ecmerge" and
+	"ecmerge", tortoisemerge and
 	"opendiff".  Any other value is treated is custom merge tool
 	and there must be a corresponding mergetool.<tool>.cmd option.
 
diff --git a/git-mergetool.sh b/git-mergetool.sh
index 6e611e9..be9717a 100755
--- a/git-mergetool.sh
+++ b/git-mergetool.sh
@@ -265,6 +265,16 @@ merge_file () {
 	    fi
 	    status=$?
 	    ;;
+	tortoisemerge)
+	    if base_present ; then
+		touch "$BACKUP"
+		"$merge_tool_path" -base:"$BASE" -mine:"$LOCAL" -theirs:"$REMOTE" -merged:"$MERGED"
+		check_unchanged
+	    else
+		echo "TortoiseMerge cannot be used without a base" 1>&2
+		status=1
+	    fi
+	    ;;
 	*)
 	    if test -n "$merge_tool_cmd"; then
 		if test "$merge_tool_trust_exit_code" = "false"; then
@@ -345,7 +355,7 @@ valid_custom_tool()
 
 valid_tool() {
 	case "$1" in
-		kdiff3 | tkdiff | xxdiff | meld | opendiff | emerge | vimdiff | gvimdiff | ecmerge)
+		kdiff3 | tkdiff | xxdiff | meld | opendiff | emerge | vimdiff | gvimdiff | ecmerge | tortoisemerge)
 			;; # happy
 		*)
 			if ! valid_custom_tool "$1"; then
@@ -404,9 +414,9 @@ fi
 if test -z "$merge_tool" ; then
     if test -n "$DISPLAY"; then
         if test -n "$GNOME_DESKTOP_SESSION_ID" ; then
-            merge_tool_candidates="meld kdiff3 tkdiff xxdiff gvimdiff"
+            merge_tool_candidates="meld kdiff3 tkdiff xxdiff tortoisemerge gvimdiff"
         else
-            merge_tool_candidates="kdiff3 tkdiff xxdiff meld gvimdiff"
+            merge_tool_candidates="kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff"
         fi
     fi
     if echo "${VISUAL:-$EDITOR}" | grep 'emacs' > /dev/null 2>&1; then
-- 
1.6.2.2.460.g49e5c
Johannes Schindelin· Apr 5, 2009, 13:52 UTC · re: Markus Heidelberg · lore

Re: [PATCH 0/3] git-mergetool/difftool: TortoiseMerge and (g)vimdiff for Windows

Hi,
On Sun, 5 Apr 2009, Markus Heidelberg wrote:
> Patches 2/3 and 3/3 are already in 'da/difftool' in 'pu'. This series is
> based on 'master', now they can be applied to 4msysgit.git.
Thanks, they are in, as branch 'tortoisemerge'.

Ciao, Dscho

← back to recent threads