From 48c74a58b129e7230d74b2fba5c2d29eaa1f11dc Mon Sep 17 00:00:00 2001 From: Alexander Gavrilov Date: Sun, 31 Aug 2008 00:59:47 +0400 Subject: [PATCH] git-gui: Support more merge tools. Add native support for Araxis Merge, WinMerge and Perforce merge. Custom merge tools are not implemented by mergetool.tcl; besides, native support allows constructing the command lines in a more intelligent way. Signed-off-by: Alexander Gavrilov Signed-off-by: Shawn O. Pearce --- lib/mergetool.tcl | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/lib/mergetool.tcl b/lib/mergetool.tcl index ba9e8cee8c..5f3da1f623 100644 --- a/lib/mergetool.tcl +++ b/lib/mergetool.tcl @@ -131,6 +131,7 @@ proc merge_resolve_tool2 {} { if {$merge_tool_path eq {}} { switch -- $tool { emerge { set merge_tool_path "emacs" } + araxis { set merge_tool_path "compare" } default { set merge_tool_path $tool } } } @@ -210,6 +211,31 @@ proc merge_resolve_tool2 {} { "$LOCAL" "$REMOTE" "$basename"] } } + winmerge { + if {$base_stage ne {}} { + # This tool does not support 3-way merges. + # Use the 'conflict file' resolution feature instead. + set cmdline [list "$merge_tool_path" -e -ub "$MERGED"] + } else { + set cmdline [list "$merge_tool_path" -e -ub -wl \ + -dl "Theirs File" -dr "Mine File" "$REMOTE" "$LOCAL" "$MERGED"] + } + } + araxis { + if {$base_stage ne {}} { + set cmdline [list "$merge_tool_path" -wait -merge -3 -a1 \ + -title1:"'$MERGED (Base)'" -title2:"'$MERGED (Local)'" \ + -title3:"'$MERGED (Remote)'" \ + "$BASE" "$LOCAL" "$REMOTE" "$MERGED"] + } else { + set cmdline [list "$merge_tool_path" -wait -2 \ + -title1:"'$MERGED (Local)'" -title2:"'$MERGED (Remote)'" \ + "$LOCAL" "$REMOTE" "$MERGED"] + } + } + p4merge { + set cmdline [list "$merge_tool_path" "$BASE" "$REMOTE" "$LOCAL" "$MERGED"] + } vimdiff { error_popup [mc "Not a GUI merge tool: '%s'" $tool] return @@ -236,6 +262,7 @@ proc merge_tool_get_stages {target stages} { foreach fname $stages { if {$merge_stages($i) eq {}} { file delete $fname + catch { close [open $fname w] } } else { # A hack to support autocrlf properly git checkout-index -f --stage=$i -- $target -- 2.11.4.GIT