{"thread":{"id":"25780","subject":"[PATCH 0/3] Improvements to mergetool-lib","startedAt":"2010-11-18T10:40:16Z","lastAt":"2010-11-18T12:22:47Z","messageCount":6,"participants":["Sebastian Schuberth","Charles Bailey"],"isPatch":true,"patchVersion":1,"patchTotal":3},"messages":[{"id":"156087","messageId":"4CE50290.90600@gmail.com","threadId":"25780","inReplyTo":null,"subject":"[PATCH 0/3] Improvements to mergetool-lib","fromName":"Sebastian Schuberth","fromEmail":"sschuberth@gmail.com","sentAt":"2010-11-18T10:40:16Z","receivedAt":"2010-11-18T10:40:16Z","isPatch":true,"sender":{"key":"sschuberth@gmail.com","avatar":"https://avatars.githubusercontent.com/u/349154?v=4"},"body":"This small series adds Beyond Compare 3 as a diff / merge tool\nand performs some minor improvements.\n\nSebastian Schuberth (3):\n  mergetool--lib: Sort tools alphabetically for easier lookup\n  mergetool--lib: Add Beyond Compare 3 as a tool\n  mergetool--lib: Add the proper executable name for ECMerge\n\n Documentation/git-difftool.txt         |    4 +-\n Documentation/git-mergetool.txt        |    4 +-\n Documentation/merge-config.txt         |    8 +-\n contrib/completion/git-completion.bash |    2 +-\n git-gui/lib/mergetool.tcl              |  101 +++++++------\n git-mergetool--lib.sh                  |  243 +++++++++++++++++---------------\n 6 files changed, 195 insertions(+), 167 deletions(-)\n\n-- \n1.7.3.2.msysgit.11\n"},{"id":"156088","messageId":"4CE50349.50803@gmail.com","threadId":"25780","inReplyTo":"4CE50290.90600@gmail.com","subject":"[PATCH 1/3] mergetool--lib: Sort tools alphabetically for easier lookup","fromName":"Sebastian Schuberth","fromEmail":"sschuberth@gmail.com","sentAt":"2010-11-18T10:43:21Z","receivedAt":"2010-11-18T10:43:21Z","isPatch":true,"sender":{"key":"sschuberth@gmail.com","avatar":"https://avatars.githubusercontent.com/u/349154?v=4"},"body":"\n\nSigned-off-by: Sebastian Schuberth <sschuberth@gmail.com>\n---\n Documentation/git-difftool.txt  |    4 +-\n Documentation/git-mergetool.txt |    4 +-\n Documentation/merge-config.txt  |    8 +-\n git-gui/lib/mergetool.tcl       |   94 ++++++++--------\n git-mergetool--lib.sh           |  234 +++++++++++++++++++-------------------\n 5 files changed, 172 insertions(+), 172 deletions(-)\n\ndiff --git a/Documentation/git-difftool.txt b/Documentation/git-difftool.txt\nindex 8250bad..a54fbf1 100644\n--- a/Documentation/git-difftool.txt\n+++ b/Documentation/git-difftool.txt\n@@ -30,8 +30,8 @@ OPTIONS\n --tool=<tool>::\n \tUse the diff tool specified by <tool>.\n \tValid merge tools are:\n-\tkdiff3, kompare, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff,\n-\tecmerge, diffuse, opendiff, p4merge and araxis.\n+\taraxis, diffuse, emerge, ecmerge, gvimdiff, kdiff3,\n+\tkompare, meld, opendiff, p4merge, tkdiff, vimdiff and xxdiff.\n +\n If a diff tool is not specified, 'git difftool'\n will use the configuration variable `diff.tool`.  If the\ndiff --git a/Documentation/git-mergetool.txt b/Documentation/git-mergetool.txt\nindex 1f75a84..4987245 100644\n--- a/Documentation/git-mergetool.txt\n+++ b/Documentation/git-mergetool.txt\n@@ -26,8 +26,8 @@ OPTIONS\n --tool=<tool>::\n \tUse the merge resolution program specified by <tool>.\n \tValid merge tools are:\n-\tkdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge,\n-\tdiffuse, tortoisemerge, opendiff, p4merge and araxis.\n+\taraxis, diffuse, ecmerge, emerge, gvimdiff, kdiff3,\n+\tmeld, opendiff, p4merge, tkdiff, tortoisemerge, vimdiff and xxdiff.\n +\n If a merge resolution program is not specified, 'git mergetool'\n will use the configuration variable `merge.tool`.  If the\ndiff --git a/Documentation/merge-config.txt b/Documentation/merge-config.txt\nindex b72f533..2c4ca09 100644\n--- a/Documentation/merge-config.txt\n+++ b/Documentation/merge-config.txt\n@@ -31,10 +31,10 @@ merge.stat::\n \n merge.tool::\n \tControls which merge resolution program is used by\n-\tlinkgit:git-mergetool[1].  Valid built-in values are: \"kdiff3\",\n-\t\"tkdiff\", \"meld\", \"xxdiff\", \"emerge\", \"vimdiff\", \"gvimdiff\",\n-\t\"diffuse\", \"ecmerge\", \"tortoisemerge\", \"p4merge\", \"araxis\" and\n-\t\"opendiff\".  Any other value is treated is custom merge tool\n+\tlinkgit:git-mergetool[1].  Valid built-in values are: \"araxis\",\n+\t\"diffuse\", \"ecmerge\", \"emerge\", \"gvimdiff\", \"kdiff3\", \"meld\",\n+\t\"opendiff\", \"p4merge\", \"tkdiff\", \"tortoisemerge\", \"vimdiff\"\n+\tand \"xxdiff\".  Any other value is treated is custom merge tool\n \tand there must be a corresponding mergetool.<tool>.cmd option.\n \n merge.verbosity::\ndiff --git a/git-gui/lib/mergetool.tcl b/git-gui/lib/mergetool.tcl\nindex 3fe90e6..249e0cf 100644\n--- a/git-gui/lib/mergetool.tcl\n+++ b/git-gui/lib/mergetool.tcl\n@@ -175,43 +175,49 @@ proc merge_resolve_tool2 {} {\n \n \t# Build the command line\n \tswitch -- $tool {\n-\tkdiff3 {\n+\taraxis {\n \t\tif {$base_stage ne {}} {\n-\t\t\tset cmdline [list \"$merge_tool_path\" --auto --L1 \"$MERGED (Base)\" \\\n-\t\t\t\t--L2 \"$MERGED (Local)\" --L3 \"$MERGED (Remote)\" -o \"$MERGED\" \"$BASE\" \"$LOCAL\" \"$REMOTE\"]\n+\t\t\tset cmdline [list \"$merge_tool_path\" -wait -merge -3 -a1 \\\n+\t\t\t\t-title1:\"'$MERGED (Base)'\" -title2:\"'$MERGED (Local)'\" \\\n+\t\t\t\t-title3:\"'$MERGED (Remote)'\" \\\n+\t\t\t\t\"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"]\n \t\t} else {\n-\t\t\tset cmdline [list \"$merge_tool_path\" --auto --L1 \"$MERGED (Local)\" \\\n-\t\t\t\t--L2 \"$MERGED (Remote)\" -o \"$MERGED\" \"$LOCAL\" \"$REMOTE\"]\n+\t\t\tset cmdline [list \"$merge_tool_path\" -wait -2 \\\n+\t\t\t\t -title1:\"'$MERGED (Local)'\" -title2:\"'$MERGED (Remote)'\" \\\n+\t\t\t\t \"$LOCAL\" \"$REMOTE\" \"$MERGED\"]\n \t\t}\n \t}\n-\ttkdiff {\n+\tecmerge {\n \t\tif {$base_stage ne {}} {\n-\t\t\tset cmdline [list \"$merge_tool_path\" -a \"$BASE\" -o \"$MERGED\" \"$LOCAL\" \"$REMOTE\"]\n+\t\t\tset cmdline [list \"$merge_tool_path\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" --default --mode=merge3 --to=\"$MERGED\"]\n \t\t} else {\n-\t\t\tset cmdline [list \"$merge_tool_path\" -o \"$MERGED\" \"$LOCAL\" \"$REMOTE\"]\n+\t\t\tset cmdline [list \"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" --default --mode=merge2 --to=\"$MERGED\"]\n \t\t}\n \t}\n-\tmeld {\n-\t\tset cmdline [list \"$merge_tool_path\" \"$LOCAL\" \"$MERGED\" \"$REMOTE\"]\n+\temerge {\n+\t\tif {$base_stage ne {}} {\n+\t\t\tset cmdline [list \"$merge_tool_path\" -f emerge-files-with-ancestor-command \\\n+\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$basename\"]\n+\t\t} else {\n+\t\t\tset cmdline [list \"$merge_tool_path\" -f emerge-files-command \\\n+\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \"$basename\"]\n+\t\t}\n \t}\n \tgvimdiff {\n \t\tset cmdline [list \"$merge_tool_path\" -f \"$LOCAL\" \"$MERGED\" \"$REMOTE\"]\n \t}\n-\txxdiff {\n+\tkdiff3 {\n \t\tif {$base_stage ne {}} {\n-\t\t\tset cmdline [list \"$merge_tool_path\" -X --show-merged-pane \\\n-\t\t\t\t\t    -R {Accel.SaveAsMerged: \"Ctrl-S\"} \\\n-\t\t\t\t\t    -R {Accel.Search: \"Ctrl+F\"} \\\n-\t\t\t\t\t    -R {Accel.SearchForward: \"Ctrl-G\"} \\\n-\t\t\t\t\t    --merged-file \"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"]\n+\t\t\tset cmdline [list \"$merge_tool_path\" --auto --L1 \"$MERGED (Base)\" \\\n+\t\t\t\t--L2 \"$MERGED (Local)\" --L3 \"$MERGED (Remote)\" -o \"$MERGED\" \"$BASE\" \"$LOCAL\" \"$REMOTE\"]\n \t\t} else {\n-\t\t\tset cmdline [list \"$merge_tool_path\" -X --show-merged-pane \\\n-\t\t\t\t\t    -R {Accel.SaveAsMerged: \"Ctrl-S\"} \\\n-\t\t\t\t\t    -R {Accel.Search: \"Ctrl+F\"} \\\n-\t\t\t\t\t    -R {Accel.SearchForward: \"Ctrl-G\"} \\\n-\t\t\t\t\t    --merged-file \"$MERGED\" \"$LOCAL\" \"$REMOTE\"]\n+\t\t\tset cmdline [list \"$merge_tool_path\" --auto --L1 \"$MERGED (Local)\" \\\n+\t\t\t\t--L2 \"$MERGED (Remote)\" -o \"$MERGED\" \"$LOCAL\" \"$REMOTE\"]\n \t\t}\n \t}\n+\tmeld {\n+\t\tset cmdline [list \"$merge_tool_path\" \"$LOCAL\" \"$MERGED\" \"$REMOTE\"]\n+\t}\n \topendiff {\n \t\tif {$base_stage ne {}} {\n \t\t\tset cmdline [list \"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"]\n@@ -219,22 +225,20 @@ proc merge_resolve_tool2 {} {\n \t\t\tset cmdline [list \"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" -merge \"$MERGED\"]\n \t\t}\n \t}\n-\tecmerge {\n-\t\tif {$base_stage ne {}} {\n-\t\t\tset cmdline [list \"$merge_tool_path\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" --default --mode=merge3 --to=\"$MERGED\"]\n-\t\t} else {\n-\t\t\tset cmdline [list \"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" --default --mode=merge2 --to=\"$MERGED\"]\n-\t\t}\n+\tp4merge {\n+\t\tset cmdline [list \"$merge_tool_path\" \"$BASE\" \"$REMOTE\" \"$LOCAL\" \"$MERGED\"]\n \t}\n-\temerge {\n+\ttkdiff {\n \t\tif {$base_stage ne {}} {\n-\t\t\tset cmdline [list \"$merge_tool_path\" -f emerge-files-with-ancestor-command \\\n-\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$basename\"]\n+\t\t\tset cmdline [list \"$merge_tool_path\" -a \"$BASE\" -o \"$MERGED\" \"$LOCAL\" \"$REMOTE\"]\n \t\t} else {\n-\t\t\tset cmdline [list \"$merge_tool_path\" -f emerge-files-command \\\n-\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \"$basename\"]\n+\t\t\tset cmdline [list \"$merge_tool_path\" -o \"$MERGED\" \"$LOCAL\" \"$REMOTE\"]\n \t\t}\n \t}\n+\tvimdiff {\n+\t\terror_popup [mc \"Not a GUI merge tool: '%s'\" $tool]\n+\t\treturn\n+\t}\n \twinmerge {\n \t\tif {$base_stage ne {}} {\n \t\t\t# This tool does not support 3-way merges.\n@@ -245,25 +249,21 @@ proc merge_resolve_tool2 {} {\n \t\t\t\t-dl \"Theirs File\" -dr \"Mine File\" \"$REMOTE\" \"$LOCAL\" \"$MERGED\"]\n \t\t}\n \t}\n-\taraxis {\n+\txxdiff {\n \t\tif {$base_stage ne {}} {\n-\t\t\tset cmdline [list \"$merge_tool_path\" -wait -merge -3 -a1 \\\n-\t\t\t\t-title1:\"'$MERGED (Base)'\" -title2:\"'$MERGED (Local)'\" \\\n-\t\t\t\t-title3:\"'$MERGED (Remote)'\" \\\n-\t\t\t\t\"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"]\n+\t\t\tset cmdline [list \"$merge_tool_path\" -X --show-merged-pane \\\n+\t\t\t\t\t    -R {Accel.SaveAsMerged: \"Ctrl-S\"} \\\n+\t\t\t\t\t    -R {Accel.Search: \"Ctrl+F\"} \\\n+\t\t\t\t\t    -R {Accel.SearchForward: \"Ctrl-G\"} \\\n+\t\t\t\t\t    --merged-file \"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"]\n \t\t} else {\n-\t\t\tset cmdline [list \"$merge_tool_path\" -wait -2 \\\n-\t\t\t\t -title1:\"'$MERGED (Local)'\" -title2:\"'$MERGED (Remote)'\" \\\n-\t\t\t\t \"$LOCAL\" \"$REMOTE\" \"$MERGED\"]\n+\t\t\tset cmdline [list \"$merge_tool_path\" -X --show-merged-pane \\\n+\t\t\t\t\t    -R {Accel.SaveAsMerged: \"Ctrl-S\"} \\\n+\t\t\t\t\t    -R {Accel.Search: \"Ctrl+F\"} \\\n+\t\t\t\t\t    -R {Accel.SearchForward: \"Ctrl-G\"} \\\n+\t\t\t\t\t    --merged-file \"$MERGED\" \"$LOCAL\" \"$REMOTE\"]\n \t\t}\n \t}\n-\tp4merge {\n-\t\tset cmdline [list \"$merge_tool_path\" \"$BASE\" \"$REMOTE\" \"$LOCAL\" \"$MERGED\"]\n-\t}\n-\tvimdiff {\n-\t\terror_popup [mc \"Not a GUI merge tool: '%s'\" $tool]\n-\t\treturn\n-\t}\n \tdefault {\n \t\terror_popup [mc \"Unsupported merge tool '%s'\" $tool]\n \t\treturn\ndiff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh\nindex b5e1943..aebb070 100644\n--- a/git-mergetool--lib.sh\n+++ b/git-mergetool--lib.sh\n@@ -10,17 +10,17 @@ merge_mode() {\n \n translate_merge_tool_path () {\n \tcase \"$1\" in\n-\tvimdiff)\n-\t\techo vim\n-\t\t;;\n-\tgvimdiff)\n-\t\techo gvim\n+\taraxis)\n+\t\techo compare\n \t\t;;\n \temerge)\n \t\techo emacs\n \t\t;;\n-\taraxis)\n-\t\techo compare\n+\tgvimdiff)\n+\t\techo gvim\n+\t\t;;\n+\tvimdiff)\n+\t\techo vim\n \t\t;;\n \t*)\n \t\techo \"$1\"\n@@ -46,16 +46,16 @@ check_unchanged () {\n \n valid_tool () {\n \tcase \"$1\" in\n-\tkdiff3 | tkdiff | xxdiff | meld | opendiff | \\\n-\temerge | vimdiff | gvimdiff | ecmerge | diffuse | araxis | p4merge)\n+\taraxis | diffuse | ecmerge | emerge | gvimdiff | \\\n+\tkdiff3 | meld | opendiff | p4merge | tkdiff | vimdiff | xxdiff)\n \t\t;; # happy\n-\ttortoisemerge)\n-\t\tif ! merge_mode; then\n+\tkompare)\n+\t\tif ! diff_mode; then\n \t\t\treturn 1\n \t\tfi\n \t\t;;\n-\tkompare)\n-\t\tif ! diff_mode; then\n+\ttortoisemerge)\n+\t\tif ! merge_mode; then\n \t\t\treturn 1\n \t\tfi\n \t\t;;\n@@ -88,95 +88,72 @@ run_merge_tool () {\n \tstatus=0\n \n \tcase \"$1\" in\n-\tkdiff3)\n+\taraxis)\n \t\tif merge_mode; then\n+\t\t\ttouch \"$BACKUP\"\n \t\t\tif $base_present; then\n-\t\t\t\t(\"$merge_tool_path\" --auto \\\n-\t\t\t\t\t--L1 \"$MERGED (Base)\" \\\n-\t\t\t\t\t--L2 \"$MERGED (Local)\" \\\n-\t\t\t\t\t--L3 \"$MERGED (Remote)\" \\\n-\t\t\t\t\t-o \"$MERGED\" \\\n-\t\t\t\t\t\"$BASE\" \"$LOCAL\" \"$REMOTE\" \\\n-\t\t\t\t> /dev/null 2>&1)\n+\t\t\t\t\"$merge_tool_path\" -wait -merge -3 -a1 \\\n+\t\t\t\t\t\"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\" \\\n+\t\t\t\t\t>/dev/null 2>&1\n \t\t\telse\n-\t\t\t\t(\"$merge_tool_path\" --auto \\\n-\t\t\t\t\t--L1 \"$MERGED (Local)\" \\\n-\t\t\t\t\t--L2 \"$MERGED (Remote)\" \\\n-\t\t\t\t\t-o \"$MERGED\" \\\n-\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \\\n-\t\t\t\t> /dev/null 2>&1)\n+\t\t\t\t\"$merge_tool_path\" -wait -2 \\\n+\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \"$MERGED\" \\\n+\t\t\t\t\t>/dev/null 2>&1\n \t\t\tfi\n-\t\t\tstatus=$?\n+\t\t\tcheck_unchanged\n \t\telse\n-\t\t\t(\"$merge_tool_path\" --auto \\\n-\t\t\t\t--L1 \"$MERGED (A)\" \\\n-\t\t\t\t--L2 \"$MERGED (B)\" \"$LOCAL\" \"$REMOTE\" \\\n-\t\t\t> /dev/null 2>&1)\n+\t\t\t\"$merge_tool_path\" -wait -2 \"$LOCAL\" \"$REMOTE\" \\\n+\t\t\t\t>/dev/null 2>&1\n \t\tfi\n \t\t;;\n-\tkompare)\n-\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\"\n-\t\t;;\n-\ttkdiff)\n+\tdiffuse)\n \t\tif merge_mode; then\n+\t\t\ttouch \"$BACKUP\"\n \t\t\tif $base_present; then\n-\t\t\t\t\"$merge_tool_path\" -a \"$BASE\" \\\n-\t\t\t\t\t-o \"$MERGED\" \"$LOCAL\" \"$REMOTE\"\n+\t\t\t\t\"$merge_tool_path\" \\\n+\t\t\t\t\t\"$LOCAL\" \"$MERGED\" \"$REMOTE\" \\\n+\t\t\t\t\t\"$BASE\" | cat\n \t\t\telse\n \t\t\t\t\"$merge_tool_path\" \\\n-\t\t\t\t\t-o \"$MERGED\" \"$LOCAL\" \"$REMOTE\"\n+\t\t\t\t\t\"$LOCAL\" \"$MERGED\" \"$REMOTE\" | cat\n \t\t\tfi\n-\t\t\tstatus=$?\n+\t\t\tcheck_unchanged\n \t\telse\n-\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\"\n+\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" | cat\n \t\tfi\n \t\t;;\n-\tp4merge)\n+\tecmerge)\n \t\tif merge_mode; then\n-\t\t    touch \"$BACKUP\"\n+\t\t\ttouch \"$BACKUP\"\n \t\t\tif $base_present; then\n-\t\t\t\t\"$merge_tool_path\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"\n+\t\t\t\t\"$merge_tool_path\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" \\\n+\t\t\t\t\t--default --mode=merge3 --to=\"$MERGED\"\n \t\t\telse\n-\t\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"\n+\t\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" \\\n+\t\t\t\t\t--default --mode=merge2 --to=\"$MERGED\"\n \t\t\tfi\n \t\t\tcheck_unchanged\n \t\telse\n-\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\"\n-\t\tfi\n-\t\t;;\n-\tmeld)\n-\t\tif merge_mode; then\n-\t\t\ttouch \"$BACKUP\"\n-\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$MERGED\" \"$REMOTE\"\n-\t\t\tcheck_unchanged\n-\t\telse\n-\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\"\n+\t\t\t\"$merge_tool_path\" --default --mode=diff2 \\\n+\t\t\t\t\"$LOCAL\" \"$REMOTE\"\n \t\tfi\n \t\t;;\n-\tdiffuse)\n+\temerge)\n \t\tif merge_mode; then\n-\t\t\ttouch \"$BACKUP\"\n \t\t\tif $base_present; then\n \t\t\t\t\"$merge_tool_path\" \\\n-\t\t\t\t\t\"$LOCAL\" \"$MERGED\" \"$REMOTE\" \\\n-\t\t\t\t\t\"$BASE\" | cat\n+\t\t\t\t\t-f emerge-files-with-ancestor-command \\\n+\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \"$BASE\" \\\n+\t\t\t\t\t\"$(basename \"$MERGED\")\"\n \t\t\telse\n \t\t\t\t\"$merge_tool_path\" \\\n-\t\t\t\t\t\"$LOCAL\" \"$MERGED\" \"$REMOTE\" | cat\n+\t\t\t\t\t-f emerge-files-command \\\n+\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \\\n+\t\t\t\t\t\"$(basename \"$MERGED\")\"\n \t\t\tfi\n-\t\t\tcheck_unchanged\n-\t\telse\n-\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" | cat\n-\t\tfi\n-\t\t;;\n-\tvimdiff)\n-\t\tif merge_mode; then\n-\t\t\ttouch \"$BACKUP\"\n-\t\t\t\"$merge_tool_path\" -d -c \"wincmd l\" \\\n-\t\t\t\t\"$LOCAL\" \"$MERGED\" \"$REMOTE\"\n-\t\t\tcheck_unchanged\n+\t\t\tstatus=$?\n \t\telse\n-\t\t\t\"$merge_tool_path\" -d -c \"wincmd l\" \\\n+\t\t\t\"$merge_tool_path\" -f emerge-files-command \\\n \t\t\t\t\"$LOCAL\" \"$REMOTE\"\n \t\tfi\n \t\t;;\n@@ -191,30 +168,42 @@ run_merge_tool () {\n \t\t\t\t\"$LOCAL\" \"$REMOTE\"\n \t\tfi\n \t\t;;\n-\txxdiff)\n+\tkdiff3)\n \t\tif merge_mode; then\n-\t\t\ttouch \"$BACKUP\"\n \t\t\tif $base_present; then\n-\t\t\t\t\"$merge_tool_path\" -X --show-merged-pane \\\n-\t\t\t\t\t-R 'Accel.SaveAsMerged: \"Ctrl-S\"' \\\n-\t\t\t\t\t-R 'Accel.Search: \"Ctrl+F\"' \\\n-\t\t\t\t\t-R 'Accel.SearchForward: \"Ctrl-G\"' \\\n-\t\t\t\t\t--merged-file \"$MERGED\" \\\n-\t\t\t\t\t\"$LOCAL\" \"$BASE\" \"$REMOTE\"\n+\t\t\t\t(\"$merge_tool_path\" --auto \\\n+\t\t\t\t\t--L1 \"$MERGED (Base)\" \\\n+\t\t\t\t\t--L2 \"$MERGED (Local)\" \\\n+\t\t\t\t\t--L3 \"$MERGED (Remote)\" \\\n+\t\t\t\t\t-o \"$MERGED\" \\\n+\t\t\t\t\t\"$BASE\" \"$LOCAL\" \"$REMOTE\" \\\n+\t\t\t\t> /dev/null 2>&1)\n \t\t\telse\n-\t\t\t\t\"$merge_tool_path\" -X $extra \\\n-\t\t\t\t\t-R 'Accel.SaveAsMerged: \"Ctrl-S\"' \\\n-\t\t\t\t\t-R 'Accel.Search: \"Ctrl+F\"' \\\n-\t\t\t\t\t-R 'Accel.SearchForward: \"Ctrl-G\"' \\\n-\t\t\t\t\t--merged-file \"$MERGED\" \\\n-\t\t\t\t\t\"$LOCAL\" \"$REMOTE\"\n+\t\t\t\t(\"$merge_tool_path\" --auto \\\n+\t\t\t\t\t--L1 \"$MERGED (Local)\" \\\n+\t\t\t\t\t--L2 \"$MERGED (Remote)\" \\\n+\t\t\t\t\t-o \"$MERGED\" \\\n+\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \\\n+\t\t\t\t> /dev/null 2>&1)\n \t\t\tfi\n+\t\t\tstatus=$?\n+\t\telse\n+\t\t\t(\"$merge_tool_path\" --auto \\\n+\t\t\t\t--L1 \"$MERGED (A)\" \\\n+\t\t\t\t--L2 \"$MERGED (B)\" \"$LOCAL\" \"$REMOTE\" \\\n+\t\t\t> /dev/null 2>&1)\n+\t\tfi\n+\t\t;;\n+\tkompare)\n+\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\"\n+\t\t;;\n+\tmeld)\n+\t\tif merge_mode; then\n+\t\t\ttouch \"$BACKUP\"\n+\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$MERGED\" \"$REMOTE\"\n \t\t\tcheck_unchanged\n \t\telse\n-\t\t\t\"$merge_tool_path\" \\\n-\t\t\t\t-R 'Accel.Search: \"Ctrl+F\"' \\\n-\t\t\t\t-R 'Accel.SearchForward: \"Ctrl-G\"' \\\n-\t\t\t\t\"$LOCAL\" \"$REMOTE\"\n+\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\"\n \t\tfi\n \t\t;;\n \topendiff)\n@@ -233,39 +222,31 @@ run_merge_tool () {\n \t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" | cat\n \t\tfi\n \t\t;;\n-\tecmerge)\n+\tp4merge)\n \t\tif merge_mode; then\n-\t\t\ttouch \"$BACKUP\"\n+\t\t    touch \"$BACKUP\"\n \t\t\tif $base_present; then\n-\t\t\t\t\"$merge_tool_path\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" \\\n-\t\t\t\t\t--default --mode=merge3 --to=\"$MERGED\"\n+\t\t\t\t\"$merge_tool_path\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"\n \t\t\telse\n-\t\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" \\\n-\t\t\t\t\t--default --mode=merge2 --to=\"$MERGED\"\n+\t\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"\n \t\t\tfi\n \t\t\tcheck_unchanged\n \t\telse\n-\t\t\t\"$merge_tool_path\" --default --mode=diff2 \\\n-\t\t\t\t\"$LOCAL\" \"$REMOTE\"\n+\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\"\n \t\tfi\n \t\t;;\n-\temerge)\n+\ttkdiff)\n \t\tif merge_mode; then\n \t\t\tif $base_present; then\n-\t\t\t\t\"$merge_tool_path\" \\\n-\t\t\t\t\t-f emerge-files-with-ancestor-command \\\n-\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \"$BASE\" \\\n-\t\t\t\t\t\"$(basename \"$MERGED\")\"\n+\t\t\t\t\"$merge_tool_path\" -a \"$BASE\" \\\n+\t\t\t\t\t-o \"$MERGED\" \"$LOCAL\" \"$REMOTE\"\n \t\t\telse\n \t\t\t\t\"$merge_tool_path\" \\\n-\t\t\t\t\t-f emerge-files-command \\\n-\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \\\n-\t\t\t\t\t\"$(basename \"$MERGED\")\"\n+\t\t\t\t\t-o \"$MERGED\" \"$LOCAL\" \"$REMOTE\"\n \t\t\tfi\n \t\t\tstatus=$?\n \t\telse\n-\t\t\t\"$merge_tool_path\" -f emerge-files-command \\\n-\t\t\t\t\"$LOCAL\" \"$REMOTE\"\n+\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\"\n \t\tfi\n \t\t;;\n \ttortoisemerge)\n@@ -280,22 +261,41 @@ run_merge_tool () {\n \t\t\tstatus=1\n \t\tfi\n \t\t;;\n-\taraxis)\n+\tvimdiff)\n+\t\tif merge_mode; then\n+\t\t\ttouch \"$BACKUP\"\n+\t\t\t\"$merge_tool_path\" -d -c \"wincmd l\" \\\n+\t\t\t\t\"$LOCAL\" \"$MERGED\" \"$REMOTE\"\n+\t\t\tcheck_unchanged\n+\t\telse\n+\t\t\t\"$merge_tool_path\" -d -c \"wincmd l\" \\\n+\t\t\t\t\"$LOCAL\" \"$REMOTE\"\n+\t\tfi\n+\t\t;;\n+\txxdiff)\n \t\tif merge_mode; then\n \t\t\ttouch \"$BACKUP\"\n \t\t\tif $base_present; then\n-\t\t\t\t\"$merge_tool_path\" -wait -merge -3 -a1 \\\n-\t\t\t\t\t\"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\" \\\n-\t\t\t\t\t>/dev/null 2>&1\n+\t\t\t\t\"$merge_tool_path\" -X --show-merged-pane \\\n+\t\t\t\t\t-R 'Accel.SaveAsMerged: \"Ctrl-S\"' \\\n+\t\t\t\t\t-R 'Accel.Search: \"Ctrl+F\"' \\\n+\t\t\t\t\t-R 'Accel.SearchForward: \"Ctrl-G\"' \\\n+\t\t\t\t\t--merged-file \"$MERGED\" \\\n+\t\t\t\t\t\"$LOCAL\" \"$BASE\" \"$REMOTE\"\n \t\t\telse\n-\t\t\t\t\"$merge_tool_path\" -wait -2 \\\n-\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \"$MERGED\" \\\n-\t\t\t\t\t>/dev/null 2>&1\n+\t\t\t\t\"$merge_tool_path\" -X $extra \\\n+\t\t\t\t\t-R 'Accel.SaveAsMerged: \"Ctrl-S\"' \\\n+\t\t\t\t\t-R 'Accel.Search: \"Ctrl+F\"' \\\n+\t\t\t\t\t-R 'Accel.SearchForward: \"Ctrl-G\"' \\\n+\t\t\t\t\t--merged-file \"$MERGED\" \\\n+\t\t\t\t\t\"$LOCAL\" \"$REMOTE\"\n \t\t\tfi\n \t\t\tcheck_unchanged\n \t\telse\n-\t\t\t\"$merge_tool_path\" -wait -2 \"$LOCAL\" \"$REMOTE\" \\\n-\t\t\t\t>/dev/null 2>&1\n+\t\t\t\"$merge_tool_path\" \\\n+\t\t\t\t-R 'Accel.Search: \"Ctrl+F\"' \\\n+\t\t\t\t-R 'Accel.SearchForward: \"Ctrl-G\"' \\\n+\t\t\t\t\"$LOCAL\" \"$REMOTE\"\n \t\tfi\n \t\t;;\n \t*)\n-- \n1.7.3.2.msysgit.11\n"},{"id":"156089","messageId":"4CE5036D.5040507@gmail.com","threadId":"25780","inReplyTo":"4CE50290.90600@gmail.com","subject":"[PATCH 2/3] mergetool--lib: Add Beyond Compare 3 as a tool","fromName":"Sebastian Schuberth","fromEmail":"sschuberth@gmail.com","sentAt":"2010-11-18T10:43:57Z","receivedAt":"2010-11-18T10:43:57Z","isPatch":true,"sender":{"key":"sschuberth@gmail.com","avatar":"https://avatars.githubusercontent.com/u/349154?v=4"},"body":"\n\nSigned-off-by: Sebastian Schuberth <sschuberth@gmail.com>\n---\n Documentation/git-difftool.txt         |    2 +-\n Documentation/git-mergetool.txt        |    2 +-\n Documentation/merge-config.txt         |    2 +-\n contrib/completion/git-completion.bash |    2 +-\n git-gui/lib/mergetool.tcl              |    7 +++++++\n git-mergetool--lib.sh                  |   22 ++++++++++++++++++++--\n 6 files changed, 31 insertions(+), 6 deletions(-)\n\ndiff --git a/Documentation/git-difftool.txt b/Documentation/git-difftool.txt\nindex a54fbf1..005e481 100644\n--- a/Documentation/git-difftool.txt\n+++ b/Documentation/git-difftool.txt\n@@ -30,7 +30,7 @@ OPTIONS\n --tool=<tool>::\n \tUse the diff tool specified by <tool>.\n \tValid merge tools are:\n-\taraxis, diffuse, emerge, ecmerge, gvimdiff, kdiff3,\n+\taraxis, bc3, diffuse, emerge, ecmerge, gvimdiff, kdiff3,\n \tkompare, meld, opendiff, p4merge, tkdiff, vimdiff and xxdiff.\n +\n If a diff tool is not specified, 'git difftool'\ndiff --git a/Documentation/git-mergetool.txt b/Documentation/git-mergetool.txt\nindex 4987245..740b3f1 100644\n--- a/Documentation/git-mergetool.txt\n+++ b/Documentation/git-mergetool.txt\n@@ -26,7 +26,7 @@ OPTIONS\n --tool=<tool>::\n \tUse the merge resolution program specified by <tool>.\n \tValid merge tools are:\n-\taraxis, diffuse, ecmerge, emerge, gvimdiff, kdiff3,\n+\taraxis, bc3, diffuse, ecmerge, emerge, gvimdiff, kdiff3,\n \tmeld, opendiff, p4merge, tkdiff, tortoisemerge, vimdiff and xxdiff.\n +\n If a merge resolution program is not specified, 'git mergetool'\ndiff --git a/Documentation/merge-config.txt b/Documentation/merge-config.txt\nindex 2c4ca09..ca8fb2c 100644\n--- a/Documentation/merge-config.txt\n+++ b/Documentation/merge-config.txt\n@@ -32,7 +32,7 @@ merge.stat::\n merge.tool::\n \tControls which merge resolution program is used by\n \tlinkgit:git-mergetool[1].  Valid built-in values are: \"araxis\",\n-\t\"diffuse\", \"ecmerge\", \"emerge\", \"gvimdiff\", \"kdiff3\", \"meld\",\n+\t\"bc3\", \"diffuse\", \"ecmerge\", \"emerge\", \"gvimdiff\", \"kdiff3\", \"meld\",\n \t\"opendiff\", \"p4merge\", \"tkdiff\", \"tortoisemerge\", \"vimdiff\"\n \tand \"xxdiff\".  Any other value is treated is custom merge tool\n \tand there must be a corresponding mergetool.<tool>.cmd option.\ndiff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash\nindex f83f019..6507a4c 100755\n--- a/contrib/completion/git-completion.bash\n+++ b/contrib/completion/git-completion.bash\n@@ -1135,7 +1135,7 @@ _git_diff ()\n }\n \n __git_mergetools_common=\"diffuse ecmerge emerge kdiff3 meld opendiff\n-\t\t\ttkdiff vimdiff gvimdiff xxdiff araxis p4merge\n+\t\t\ttkdiff vimdiff gvimdiff xxdiff araxis p4merge bc3\n \"\n \n _git_difftool ()\ndiff --git a/git-gui/lib/mergetool.tcl b/git-gui/lib/mergetool.tcl\nindex 249e0cf..3c8e73b 100644\n--- a/git-gui/lib/mergetool.tcl\n+++ b/git-gui/lib/mergetool.tcl\n@@ -187,6 +187,13 @@ proc merge_resolve_tool2 {} {\n \t\t\t\t \"$LOCAL\" \"$REMOTE\" \"$MERGED\"]\n \t\t}\n \t}\n+\tbc3 {\n+\t\tif {$base_stage ne {}} {\n+\t\t\tset cmdline [list \"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" -mergeoutput=\"$MERGED\"]\n+\t\t} else {\n+\t\t\tset cmdline [list \"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" -mergeoutput=\"$MERGED\"]\n+\t\t}\n+\t}\n \tecmerge {\n \t\tif {$base_stage ne {}} {\n \t\t\tset cmdline [list \"$merge_tool_path\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" --default --mode=merge3 --to=\"$MERGED\"]\ndiff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh\nindex aebb070..47049a6 100644\n--- a/git-mergetool--lib.sh\n+++ b/git-mergetool--lib.sh\n@@ -13,6 +13,9 @@ translate_merge_tool_path () {\n \taraxis)\n \t\techo compare\n \t\t;;\n+\tbc3)\n+\t\techo BCompare\n+\t\t;;\n \temerge)\n \t\techo emacs\n \t\t;;\n@@ -46,7 +49,7 @@ check_unchanged () {\n \n valid_tool () {\n \tcase \"$1\" in\n-\taraxis | diffuse | ecmerge | emerge | gvimdiff | \\\n+\taraxis | bc3 | diffuse | ecmerge | emerge | gvimdiff | \\\n \tkdiff3 | meld | opendiff | p4merge | tkdiff | vimdiff | xxdiff)\n \t\t;; # happy\n \tkompare)\n@@ -106,6 +109,21 @@ run_merge_tool () {\n \t\t\t\t>/dev/null 2>&1\n \t\tfi\n \t\t;;\n+\tbc3)\n+\t\tif merge_mode; then\n+\t\t\ttouch \"$BACKUP\"\n+\t\t\tif $base_present; then\n+\t\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \\\n+\t\t\t\t\t-mergeoutput=\"$MERGED\"\n+\t\t\telse\n+\t\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" \\\n+\t\t\t\t\t-mergeoutput=\"$MERGED\"\n+\t\t\tfi\n+\t\t\tcheck_unchanged\n+\t\telse\n+\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\"\n+\t\tfi\n+\t\t;;\n \tdiffuse)\n \t\tif merge_mode; then\n \t\t\ttouch \"$BACKUP\"\n@@ -337,7 +355,7 @@ guess_merge_tool () {\n \t\telse\n \t\t\ttools=\"opendiff kdiff3 tkdiff xxdiff meld $tools\"\n \t\tfi\n-\t\ttools=\"$tools gvimdiff diffuse ecmerge p4merge araxis\"\n+\t\ttools=\"$tools gvimdiff diffuse ecmerge p4merge araxis bc3\"\n \tfi\n \tcase \"${VISUAL:-$EDITOR}\" in\n \t*vim*)\n-- \n1.7.3.2.msysgit.11\n"},{"id":"156090","messageId":"4CE5038F.2040400@gmail.com","threadId":"25780","inReplyTo":"4CE50290.90600@gmail.com","subject":"[PATCH 3/3] mergetool--lib: Add the proper executable name for ECMerge","fromName":"Sebastian Schuberth","fromEmail":"sschuberth@gmail.com","sentAt":"2010-11-18T10:44:31Z","receivedAt":"2010-11-18T10:44:31Z","isPatch":true,"sender":{"key":"sschuberth@gmail.com","avatar":"https://avatars.githubusercontent.com/u/349154?v=4"},"body":"\n\nSigned-off-by: Sebastian Schuberth <sschuberth@gmail.com>\n---\n git-mergetool--lib.sh |    3 +++\n 1 files changed, 3 insertions(+), 0 deletions(-)\n\ndiff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh\nindex 47049a6..58398bd 100644\n--- a/git-mergetool--lib.sh\n+++ b/git-mergetool--lib.sh\n@@ -16,6 +16,9 @@ translate_merge_tool_path () {\n \tbc3)\n \t\techo BCompare\n \t\t;;\n+\tecmerge)\n+\t\techo guimerge\n+\t\t;;\n \temerge)\n \t\techo emacs\n \t\t;;\n-- \n1.7.3.2.msysgit.11\n"},{"id":"156092","messageId":"4CE50DBC.3090409@hashpling.org","threadId":"25780","inReplyTo":"4CE50290.90600@gmail.com","subject":"Re: [PATCH 0/3] Improvements to mergetool-lib","fromName":"Charles Bailey","fromEmail":"charles@hashpling.org","sentAt":"2010-11-18T11:27:57Z","receivedAt":"2010-11-18T11:27:57Z","isPatch":true,"sender":{"key":"charles@hashpling.org","avatar":"https://avatars.githubusercontent.com/u/1668475?v=4"},"body":"On 18/11/2010 10:40, Sebastian Schuberth wrote:\n> This small series adds Beyond Compare 3 as a diff / merge tool\n> and performs some minor improvements.\n>\n> Sebastian Schuberth (3):\n>    mergetool--lib: Sort tools alphabetically for easier lookup\n>    mergetool--lib: Add Beyond Compare 3 as a tool\n>    mergetool--lib: Add the proper executable name for ECMerge\n>\n>   Documentation/git-difftool.txt         |    4 +-\n>   Documentation/git-mergetool.txt        |    4 +-\n>   Documentation/merge-config.txt         |    8 +-\n>   contrib/completion/git-completion.bash |    2 +-\n>   git-gui/lib/mergetool.tcl              |  101 +++++++------\n>   git-mergetool--lib.sh                  |  243 +++++++++++++++++---------------\n>   6 files changed, 195 insertions(+), 167 deletions(-)\n>\n\nI'm not an ecmerge or Beyond Compare user. The reordering of tools makes \nfor a bit of a messy diff but I think it makes sense.\n\nThis series looks good to me. Has it been well tested?\n\nCharles.\n"},{"id":"156093","messageId":"AANLkTimERiT1k9VqkMuyiWH7Df_LZFA9MC7yOrFbHpk5@mail.gmail.com","threadId":"25780","inReplyTo":"4CE50DBC.3090409@hashpling.org","subject":"Re: [PATCH 0/3] Improvements to mergetool-lib","fromName":"Sebastian Schuberth","fromEmail":"sschuberth@gmail.com","sentAt":"2010-11-18T12:22:47Z","receivedAt":"2010-11-18T12:22:47Z","isPatch":true,"sender":{"key":"sschuberth@gmail.com","avatar":"https://avatars.githubusercontent.com/u/349154?v=4"},"body":"On Thu, Nov 18, 2010 at 12:27, Charles Bailey <charles@hashpling.org> wrote:\n\n> I'm not an ecmerge or Beyond Compare user. The reordering of tools makes for\n> a bit of a messy diff but I think it makes sense.\n>\n> This series looks good to me. Has it been well tested?\n\nNot on all platforms. I'm mainly a Windows user where I'm using bc3 as\na difftool and ecmerge as a mergetool, and it works fine for me. As\nsoon as I boot into Linux again I plan to test the patches there, too.\nHowever, I'd appreciate if someone else could test, too.\n\n-- \nSebastian Schuberth\n"}]}