{"thread":{"id":"10221","subject":"[PATCH v2] mergetool: support setting path to tool as config var mergetool.<tool>.path","startedAt":"2007-10-09T20:54:21Z","lastAt":"2007-10-14T13:02:40Z","messageCount":7,"participants":["Steffen Prohaska","Johannes Schindelin","Theodore Tso"],"isPatch":true,"patchVersion":2,"patchTotal":null},"messages":[{"id":"55304","messageId":"11919632613176-git-send-email-prohaska@zib.de","threadId":"10221","inReplyTo":null,"subject":"[PATCH v2] mergetool: support setting path to tool as config var mergetool.<tool>.path","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2007-10-09T20:54:21Z","receivedAt":"2007-10-09T20:54:21Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"This commit adds a mechanism to provide absolute paths to the\nexternal programs called by 'git mergetool'. A path can be\nspecified in the configuation variable mergetool.<tool>.path.\nThe configuration variable is similar to how we name branches\nand remotes. It is extensible if we need to specify more details\nabout a tool.\n\nThe mechanism added by this patch is orthogonal to the existing\nmerge.tool configuration variable:\n1) merge.tool selects a tool from a list of known programs for which\ncommand line arguments and the mechanism for returning merge results is know.\n2) mergetool.<tool>.path provides details on how to locate the selected\ntool in the filesystem. Paths for several tools can be configured simultaneously.\n\nThe mechanism is especially useful on Windows, where external\nprograms are unlikely to be in PATH.\n\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n Documentation/git-mergetool.txt |    6 ++\n git-mergetool.sh                |   97 +++++++++++++++++++++-----------------\n 2 files changed, 60 insertions(+), 43 deletions(-)\n\nThis updated patch is based on the the comments and suggestions by\nTheodor, Frank, and Johannes.\n\n    Steffen\n\ndiff --git a/Documentation/git-mergetool.txt b/Documentation/git-mergetool.txt\nindex 6c32c6d..17a33e7 100644\n--- a/Documentation/git-mergetool.txt\n+++ b/Documentation/git-mergetool.txt\n@@ -31,6 +31,12 @@ If a merge resolution program is not specified, 'git mergetool'\n will use the configuration variable merge.tool.  If the\n configuration variable merge.tool is not set, 'git mergetool'\n will pick a suitable default.\n++\n+You can explicitly provide a full path to the tool by setting the\n+configuration variable mergetool.<tool>.path. For example, you\n+can configure the absolute path to kdiff3 by setting\n+mergetool.kdiff3.path. Otherise, 'git mergetool' assumes the tool\n+is available in PATH.\n \n Author\n ------\ndiff --git a/git-mergetool.sh b/git-mergetool.sh\nindex 9f4f313..1e4583f 100755\n--- a/git-mergetool.sh\n+++ b/git-mergetool.sh\n@@ -192,10 +192,10 @@ merge_file () {\n     case \"$merge_tool\" in\n \tkdiff3)\n \t    if base_present ; then\n-\t\t(kdiff3 --auto --L1 \"$path (Base)\" --L2 \"$path (Local)\" --L3 \"$path (Remote)\" \\\n+\t\t(\"$merge_tool_path\" --auto --L1 \"$path (Base)\" --L2 \"$path (Local)\" --L3 \"$path (Remote)\" \\\n \t\t    -o \"$path\" -- \"$BASE\" \"$LOCAL\" \"$REMOTE\" > /dev/null 2>&1)\n \t    else\n-\t\t(kdiff3 --auto --L1 \"$path (Local)\" --L2 \"$path (Remote)\" \\\n+\t\t(\"$merge_tool_path\" --auto --L1 \"$path (Local)\" --L2 \"$path (Remote)\" \\\n \t\t    -o \"$path\" -- \"$LOCAL\" \"$REMOTE\" > /dev/null 2>&1)\n \t    fi\n \t    status=$?\n@@ -203,35 +203,35 @@ merge_file () {\n \t    ;;\n \ttkdiff)\n \t    if base_present ; then\n-\t\ttkdiff -a \"$BASE\" -o \"$path\" -- \"$LOCAL\" \"$REMOTE\"\n+\t\t\"$merge_tool_path\" -a \"$BASE\" -o \"$path\" -- \"$LOCAL\" \"$REMOTE\"\n \t    else\n-\t\ttkdiff -o \"$path\" -- \"$LOCAL\" \"$REMOTE\"\n+\t\t\"$merge_tool_path\" -o \"$path\" -- \"$LOCAL\" \"$REMOTE\"\n \t    fi\n \t    status=$?\n \t    save_backup\n \t    ;;\n \tmeld|vimdiff)\n \t    touch \"$BACKUP\"\n-\t    $merge_tool -- \"$LOCAL\" \"$path\" \"$REMOTE\"\n+\t    \"$merge_tool_path\" -- \"$LOCAL\" \"$path\" \"$REMOTE\"\n \t    check_unchanged\n \t    save_backup\n \t    ;;\n \tgvimdiff)\n \t\ttouch \"$BACKUP\"\n-\t\tgvimdiff -f -- \"$LOCAL\" \"$path\" \"$REMOTE\"\n+\t\t\"$merge_tool_path\" -f -- \"$LOCAL\" \"$path\" \"$REMOTE\"\n \t\tcheck_unchanged\n \t\tsave_backup\n \t\t;;\n \txxdiff)\n \t    touch \"$BACKUP\"\n \t    if base_present ; then\n-\t\txxdiff -X --show-merged-pane \\\n+\t\t\"$merge_tool_path\" -X --show-merged-pane \\\n \t\t    -R 'Accel.SaveAsMerged: \"Ctrl-S\"' \\\n \t\t    -R 'Accel.Search: \"Ctrl+F\"' \\\n \t\t    -R 'Accel.SearchForward: \"Ctrl-G\"' \\\n \t\t    --merged-file \"$path\" -- \"$LOCAL\" \"$BASE\" \"$REMOTE\"\n \t    else\n-\t\txxdiff -X --show-merged-pane \\\n+\t\t\"$merge_tool_path\" -X --show-merged-pane \\\n \t\t    -R 'Accel.SaveAsMerged: \"Ctrl-S\"' \\\n \t\t    -R 'Accel.Search: \"Ctrl+F\"' \\\n \t\t    -R 'Accel.SearchForward: \"Ctrl-G\"' \\\n@@ -243,18 +243,18 @@ merge_file () {\n \topendiff)\n \t    touch \"$BACKUP\"\n \t    if base_present; then\n-\t\topendiff \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$path\" | cat\n+\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$path\" | cat\n \t    else\n-\t\topendiff \"$LOCAL\" \"$REMOTE\" -merge \"$path\" | cat\n+\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" -merge \"$path\" | cat\n \t    fi\n \t    check_unchanged\n \t    save_backup\n \t    ;;\n \temerge)\n \t    if base_present ; then\n-\t\temacs -f emerge-files-with-ancestor-command \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$(basename \"$path\")\"\n+\t\t\"$merge_tool_path\" -f emerge-files-with-ancestor-command \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$(basename \"$path\")\"\n \t    else\n-\t\temacs -f emerge-files-command \"$LOCAL\" \"$REMOTE\" \"$(basename \"$path\")\"\n+\t\t\"$merge_tool_path\" -f emerge-files-command \"$LOCAL\" \"$REMOTE\" \"$(basename \"$path\")\"\n \t    fi\n \t    status=$?\n \t    save_backup\n@@ -297,17 +297,38 @@ do\n     shift\n done\n \n+valid_tool() {\n+\tcase \"$1\" in\n+\t\tkdiff3 | tkdiff | xxdiff | meld | opendiff | emerge | vimdiff | gvimdiff)\n+\t\t\t;; # happy\n+\t\t*)\n+\t\t\treturn 1\n+\t\t\t;;\n+\tesac\n+}\n+\n+init_merge_tool_path() {\n+\tmerge_tool_path=`git config mergetool.$1.path`\n+\tif test -z \"$merge_tool_path\" ; then\n+\t\tcase \"$merge_tool\" in\n+\t\t\temerge)\n+\t\t\t\tmerge_tool_path=emacs\n+\t\t\t\t;;\n+\t\t\t*)\n+\t\t\t\tmerge_tool_path=$merge_tool\n+\t\t\t\t;;\n+\t\tesac\n+\tfi\n+}\n+\n+\n if test -z \"$merge_tool\"; then\n     merge_tool=`git config merge.tool`\n-    case \"$merge_tool\" in\n-\tkdiff3 | tkdiff | xxdiff | meld | opendiff | emerge | vimdiff | gvimdiff | \"\")\n-\t    ;; # happy\n-\t*)\n+    test -n \"$merge_tool\" || valid_tool \"$merge_tool\" || {\n \t    echo >&2 \"git config option merge.tool set to unknown tool: $merge_tool\"\n \t    echo >&2 \"Resetting to default...\"\n \t    unset merge_tool\n-\t    ;;\n-    esac\n+    }\n fi\n \n if test -z \"$merge_tool\" ; then\n@@ -329,40 +350,30 @@ if test -z \"$merge_tool\" ; then\n     merge_tool_candidates=\"$merge_tool_candidates opendiff emerge vimdiff\"\n     echo \"merge tool candidates: $merge_tool_candidates\"\n     for i in $merge_tool_candidates; do\n-        if test $i = emerge ; then\n-            cmd=emacs\n-        else\n-            cmd=$i\n-        fi\n-        if type $cmd > /dev/null 2>&1; then\n+        init_merge_tool_path $i\n+        if type \"$merge_tool_path\" > /dev/null 2>&1; then\n             merge_tool=$i\n             break\n         fi\n     done\n     if test -z \"$merge_tool\" ; then\n-\techo \"No available merge resolution programs available.\"\n+\techo \"No known merge resolution program available.\"\n \texit 1\n     fi\n+else\n+    valid_tool \"$merge_tool\" || {\n+        echo >&2 \"Unknown merge_tool $merge_tool\"\n+        exit 1\n+    }\n+\n+    init_merge_tool_path \"$merge_tool\"\n+\n+    if ! type \"$merge_tool_path\" > /dev/null 2>&1; then\n+        echo \"The merge tool $merge_tool is not available as '$merge_tool_path'\"\n+        exit 1\n+    fi\n fi\n \n-case \"$merge_tool\" in\n-    kdiff3|tkdiff|meld|xxdiff|vimdiff|gvimdiff|opendiff)\n-\tif ! type \"$merge_tool\" > /dev/null 2>&1; then\n-\t    echo \"The merge tool $merge_tool is not available\"\n-\t    exit 1\n-\tfi\n-\t;;\n-    emerge)\n-\tif ! type \"emacs\" > /dev/null 2>&1; then\n-\t    echo \"Emacs is not available\"\n-\t    exit 1\n-\tfi\n-\t;;\n-    *)\n-\techo \"Unknown merge tool: $merge_tool\"\n-\texit 1\n-\t;;\n-esac\n \n if test $# -eq 0 ; then\n \tfiles=`git ls-files -u | sed -e 's/^[^\t]*\t//' | sort -u`\n-- \n1.5.3.3.127.g40d17\n"},{"id":"55373","messageId":"Pine.LNX.4.64.0710101526060.4174@racer.site","threadId":"10221","inReplyTo":"11919632613176-git-send-email-prohaska@zib.de","subject":"Re: [PATCH v2] mergetool: support setting path to tool as config var mergetool.<tool>.path","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2007-10-10T14:33:00Z","receivedAt":"2007-10-10T14:33:00Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Tue, 9 Oct 2007, Steffen Prohaska wrote:\n\n> This commit adds a mechanism to provide absolute paths to the external \n> programs called by 'git mergetool'. A path can be specified in the \n> configuation variable mergetool.<tool>.path. The configuration variable \n> is similar to how we name branches and remotes. It is extensible if we \n> need to specify more details about a tool.\n\nOkay, let's step back a bit.\n\nWhat does mergetool do?  It calls different merge helpers, each with its \nown convention how to call it.  For example, tkdiff is called either as\n\n\t\ttkdiff -a \"$BASE\" -o \"$path\" -- \"$LOCAL\" \"$REMOTE\"\n\nor as\n\n\t\ttkdiff -o \"$path\" -- \"$LOCAL\" \"$REMOTE\"\n\ndepending if there is a base or not.  Another example is gvimdiff:\n\n\t\tgvimdiff -f -- \"$LOCAL\" \"$path\" \"$REMOTE\"\n\nwhich seems not to care if there is a base.\n\nNow, would it not be much better if we had a way to specify the tool and \nthe convention indepentently?  Like\n\nmerge.tkdiff.path = C:\\bla\\blub\\wish.exe C:\\blub\\bleh\\tkdiff.tcl\nmerge.tkdiff.options = -o %p -- %l %r\nmerge.tkdiff.optionsWithBase = -a %b -o %p -- %l %r\n\nand have defaults for the tools we have in git-mergetool.sh _already_?\n\nCiao,\nDscho\n"},{"id":"55379","messageId":"FBE79360-4B3A-4C92-B8AA-76989D933009@zib.de","threadId":"10221","inReplyTo":"Pine.LNX.4.64.0710101526060.4174@racer.site","subject":"Re: [PATCH v2] mergetool: support setting path to tool as config var mergetool.<tool>.path","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2007-10-10T15:44:22Z","receivedAt":"2007-10-10T15:44:22Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nOn Oct 10, 2007, at 4:33 PM, Johannes Schindelin wrote:\n\n> Hi,\n>\n> On Tue, 9 Oct 2007, Steffen Prohaska wrote:\n>\n>> This commit adds a mechanism to provide absolute paths to the  \n>> external\n>> programs called by 'git mergetool'. A path can be specified in the\n>> configuation variable mergetool.<tool>.path. The configuration  \n>> variable\n>> is similar to how we name branches and remotes. It is extensible  \n>> if we\n>> need to specify more details about a tool.\n>\n> Okay, let's step back a bit.\n>\n> What does mergetool do?  It calls different merge helpers, each  \n> with its\n> own convention how to call it.  For example, tkdiff is called  \n> either as\n>\n> \t\ttkdiff -a \"$BASE\" -o \"$path\" -- \"$LOCAL\" \"$REMOTE\"\n>\n> or as\n>\n> \t\ttkdiff -o \"$path\" -- \"$LOCAL\" \"$REMOTE\"\n>\n> depending if there is a base or not.  Another example is gvimdiff:\n>\n> \t\tgvimdiff -f -- \"$LOCAL\" \"$path\" \"$REMOTE\"\n>\n> which seems not to care if there is a base.\n>\n> Now, would it not be much better if we had a way to specify the  \n> tool and\n> the convention indepentently?  Like\n>\n> merge.tkdiff.path = C:\\bla\\blub\\wish.exe C:\\blub\\bleh\\tkdiff.tcl\n> merge.tkdiff.options = -o %p -- %l %r\n> merge.tkdiff.optionsWithBase = -a %b -o %p -- %l %r\n>\n> and have defaults for the tools we have in git-mergetool.sh _already_?\n\nIf you provide a generic mechanism to call an external tool, there's no\nneed to name the tool. A single mechanism (let's call it external)  \nwould be\nsufficient, like\n\nmergetool.external.path = c:\\any\\path\\merge.exe\nmergetool.external.arg2way = %l %r --merge2 --to=%p\nmergetool.external.arg3way = %b %l %r --merge3 --to=%p\n\nBut this places the burdon on the user to figure out the command line  \nsyntax\nand specify it correctly using git-config. Things like proper  \nescaping may\nbe a hassel.\n\nThe solution I'm proposing is more user-friendly. Only the information\nthat is hard to figure out automatically and is easy to provide by the\nuser is asked for. The user only needs to tell the path to the  \nexecutable.\n\ngit-mergetool 'knows' about the correct command line syntax. There's  \nno need\nto ask the user. The command line syntax is fixed and know. No option  \nhere.\n\"git mergetool\" could, for example, know that a certain tool just  \ndoesn't\nsupport 3-way.\n\nAnd the code of git-mergetool is also quite easy. The only input  \nvalidation\nthat is needed is to check if mergetool.<tool>.path points to a valid\nexecutable. If we provide a complex syntax for specifying command line\noptions we may have to do a lot more of input validation and processing.\n\nI strongly favor my solution of including the command line syntax in\ngit-mergetool, and only ask the user for the path. I'm not against a  \ngeneric\nmechanism to configure any tool. However, I do not plan to implement it.\n\nIf someone plans to develop a generic mechanism I see two options:\n1) What's explained above.\n2) _Define_ the parameters passed to the external command and ask the  \nuser\n    to write a wrapper script to call his tool of choice. Similar to  \nwhat\n    GIT_EXTERNAL_DIFF does. Wrapper scripts would go to contrib/.\n\nBoth solutions would require more work from the user than needed.\n\n\tSteffen\n"},{"id":"55389","messageId":"Pine.LNX.4.64.0710101759080.4174@racer.site","threadId":"10221","inReplyTo":"FBE79360-4B3A-4C92-B8AA-76989D933009@zib.de","subject":"Re: [PATCH v2] mergetool: support setting path to tool as config var mergetool.<tool>.path","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2007-10-10T17:03:56Z","receivedAt":"2007-10-10T17:03:56Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Wed, 10 Oct 2007, Steffen Prohaska wrote:\n\n> On Oct 10, 2007, at 4:33 PM, Johannes Schindelin wrote:\n> \n> > On Tue, 9 Oct 2007, Steffen Prohaska wrote:\n> > \n> > > This commit adds a mechanism to provide absolute paths to the \n> > > external programs called by 'git mergetool'. A path can be specified \n> > > in the configuation variable mergetool.<tool>.path. The \n> > > configuration variable is similar to how we name branches and \n> > > remotes. It is extensible if we need to specify more details about a \n> > > tool.\n> > \n> > Okay, let's step back a bit.\n> > \n> > What does mergetool do?  It calls different merge helpers, each with its\n> > own convention how to call it.  For example, tkdiff is called either as\n> > \n> > \t\ttkdiff -a \"$BASE\" -o \"$path\" -- \"$LOCAL\" \"$REMOTE\"\n> > \n> > or as\n> > \n> > \t\ttkdiff -o \"$path\" -- \"$LOCAL\" \"$REMOTE\"\n> > \n> > depending if there is a base or not.  Another example is gvimdiff:\n> > \n> > \t\tgvimdiff -f -- \"$LOCAL\" \"$path\" \"$REMOTE\"\n> > \n> > which seems not to care if there is a base.\n> > \n> > Now, would it not be much better if we had a way to specify the tool \n> > and the convention indepentently?  Like\n> > \n> > merge.tkdiff.path = C:\\bla\\blub\\wish.exe C:\\blub\\bleh\\tkdiff.tcl\n> > merge.tkdiff.options = -o %p -- %l %r\n> > merge.tkdiff.optionsWithBase = -a %b -o %p -- %l %r\n> > \n> > and have defaults for the tools we have in git-mergetool.sh _already_?\n> \n> If you provide a generic mechanism to call an external tool, there's no \n> need to name the tool. A single mechanism (let's call it external) would \n> be sufficient, like\n> \n> mergetool.external.path = c:\\any\\path\\merge.exe\n> mergetool.external.arg2way = %l %r --merge2 --to=%p\n> mergetool.external.arg3way = %b %l %r --merge3 --to=%p\n> \n> But this places the burdon on the user to figure out the command line syntax\n> and specify it correctly using git-config.\n\nGuess why I did not want to  have a single mechanism.  I did _not_ propose \nto place the burden on the user to figure out the command line.\n\nBesides, I do not want to do away with the automatic detection of the \ntool, which _implies_ having a list of defaults for the command line \nsyntax, which in turn _commands_ having the name instead of \"external\".\n\nWhile your solution is an obvious short term fix, I maintain that my \nproposal is the Right Thing in the long run.\n\nCiao,\nDscho\n"},{"id":"55392","messageId":"0EC30ACF-13AA-487D-ADA7-CCE6C693A034@zib.de","threadId":"10221","inReplyTo":"Pine.LNX.4.64.0710101759080.4174@racer.site","subject":"Re: [PATCH v2] mergetool: support setting path to tool as config var mergetool.<tool>.path","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2007-10-10T17:40:52Z","receivedAt":"2007-10-10T17:40:52Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nOn Oct 10, 2007, at 7:03 PM, Johannes Schindelin wrote:\n\n> Hi,\n>\n> On Wed, 10 Oct 2007, Steffen Prohaska wrote:\n>\n>> On Oct 10, 2007, at 4:33 PM, Johannes Schindelin wrote:\n>>\n>>> On Tue, 9 Oct 2007, Steffen Prohaska wrote:\n>>>\n>>>> This commit adds a mechanism to provide absolute paths to the\n>>>> external programs called by 'git mergetool'. A path can be  \n>>>> specified\n>>>> in the configuation variable mergetool.<tool>.path. The\n>>>> configuration variable is similar to how we name branches and\n>>>> remotes. It is extensible if we need to specify more details  \n>>>> about a\n>>>> tool.\n>>>\n>>> Okay, let's step back a bit.\n>>>\n>>> What does mergetool do?  It calls different merge helpers, each  \n>>> with its\n>>> own convention how to call it.  For example, tkdiff is called  \n>>> either as\n>>>\n>>> \t\ttkdiff -a \"$BASE\" -o \"$path\" -- \"$LOCAL\" \"$REMOTE\"\n>>>\n>>> or as\n>>>\n>>> \t\ttkdiff -o \"$path\" -- \"$LOCAL\" \"$REMOTE\"\n>>>\n>>> depending if there is a base or not.  Another example is gvimdiff:\n>>>\n>>> \t\tgvimdiff -f -- \"$LOCAL\" \"$path\" \"$REMOTE\"\n>>>\n>>> which seems not to care if there is a base.\n>>>\n>>> Now, would it not be much better if we had a way to specify the tool\n>>> and the convention indepentently?  Like\n>>>\n>>> merge.tkdiff.path = C:\\bla\\blub\\wish.exe C:\\blub\\bleh\\tkdiff.tcl\n>>> merge.tkdiff.options = -o %p -- %l %r\n>>> merge.tkdiff.optionsWithBase = -a %b -o %p -- %l %r\n>>>\n>>> and have defaults for the tools we have in git-mergetool.sh  \n>>> _already_?\n>>\n>> If you provide a generic mechanism to call an external tool,  \n>> there's no\n>> need to name the tool. A single mechanism (let's call it external)  \n>> would\n>> be sufficient, like\n>>\n>> mergetool.external.path = c:\\any\\path\\merge.exe\n>> mergetool.external.arg2way = %l %r --merge2 --to=%p\n>> mergetool.external.arg3way = %b %l %r --merge3 --to=%p\n>>\n>> But this places the burdon on the user to figure out the command  \n>> line syntax\n>> and specify it correctly using git-config.\n>\n> Guess why I did not want to  have a single mechanism.  I did _not_  \n> propose\n> to place the burden on the user to figure out the command line.\n>\n> Besides, I do not want to do away with the automatic detection of the\n> tool, which _implies_ having a list of defaults for the command line\n> syntax, which in turn _commands_ having the name instead of  \n> \"external\".\n>\n> While your solution is an obvious short term fix, I maintain that my\n> proposal is the Right Thing in the long run.\n\nI did not intend to replace everything with an external mechanism.  \nWhat I\nwanted to say is the following: If you add a generic mechanism in  \naddition\nto the known tools it is sufficient to add a single generic mechanism\ncalled 'external'. You could then choose from the list of known tools or\nyou could choose 'external' and provide everything needed as described\nabove.\n\n\tSteffen\n"},{"id":"55713","messageId":"06B63221-7F8E-42FF-959F-D83FBABA6790@zib.de","threadId":"10221","inReplyTo":"11919632613176-git-send-email-prohaska@zib.de","subject":"Re: [PATCH v2] mergetool: support setting path to tool as config var mergetool.<tool>.path","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2007-10-14T12:52:25Z","receivedAt":"2007-10-14T12:52:25Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nOn Oct 9, 2007, at 10:54 PM, Steffen Prohaska wrote:\n\n> This commit adds a mechanism to provide absolute paths to the\n> external programs called by 'git mergetool'. A path can be\n> specified in the configuation variable mergetool.<tool>.path.\n\nAny news on this patch?\nWill you apply it (or recommend that Junio does)?\n\n\tSteffen\n"},{"id":"55716","messageId":"20071014130240.GD17368@thunk.org","threadId":"10221","inReplyTo":"06B63221-7F8E-42FF-959F-D83FBABA6790@zib.de","subject":"Re: [PATCH v2] mergetool: support setting path to tool as config var mergetool.<tool>.path","fromName":"Theodore Tso","fromEmail":"tytso@mit.edu","sentAt":"2007-10-14T13:02:40Z","receivedAt":"2007-10-14T13:02:40Z","isPatch":true,"sender":{"key":"tytso@mit.edu","avatar":"https://avatars.githubusercontent.com/u/51416?v=4"},"body":"On Sun, Oct 14, 2007 at 02:52:25PM +0200, Steffen Prohaska wrote:\n>\n>> This commit adds a mechanism to provide absolute paths to the\n>> external programs called by 'git mergetool'. A path can be\n>> specified in the configuation variable mergetool.<tool>.path.\n>\n> Any news on this patch?\n> Will you apply it (or recommend that Junio does)?\n\nHmm, for some reason I never received the v2 version of the patch.  I\nsee Johannes' comments to it, but not the original e-mail for some\nreason.  It doesn't seem to be in the spam filter, so I'm not sure\nwhat happened.\n\nCan you resend, please?   Thanks!!\n\n\t\t\t\t\t\t\t- Ted\n"}]}