Skip to content

Commit

Permalink
git gui: add directly calling merge tool from configuration
Browse files Browse the repository at this point in the history
git gui can open a merge tool when conflicts are detected (Right click
in the diff of the file with conflicts).
The merge tools that are allowed to use are hard coded into git gui.

If one wants to add a new merge tool it has to be added to git gui
through a source code change.
This is not convenient in comparison to how it works in git (without gui).

git itself has configuration options for a merge tools path and command
in the git configuration.
New merge tools can be set up there without a source code change.

Those options are used only by pure git in contrast to git gui. git calls
the configured merge tools directly from the configuration while git Gui
doesn't.

With this change git gui can call merge tools configured in the
configuration directly without a change in git gui source code.
It needs a configured "merge.tool" and a configured
"mergetool.<mergetool name>.cmd" configuration entry as shown in the
git-config manual page.

Configuration example:
[merge]
	tool = vscode
[mergetool "vscode"]
	path = the/path/to/Code.exe
	cmd = \"Code.exe\" --wait --merge \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"

Without the "mergetool.cmd" configuration and an unsupported "merge.tool"
entry, git gui behaves mainly as before this change and informs the user
about an unsupported merge tool. In addtition it also shows a hint to add
a configuration entry to use the tool as an unsupported tool with degraded
support.

If a wrong "mergetool.cmd" is configured by accident, it gets handled
by git gui already. In this case git gui informs the user that the merge
tool couldn't be opened. This behavior is preserved by this change and
should not change.

"Beyond Compare 3" and "Visual Studio Code" were tested as manually
configured merge tools.

Signed-off-by: Tobias Boesch <tobias.boesch@miele.com>
  • Loading branch information
ToBoMi committed Sep 12, 2024
1 parent c5ee8f2 commit c37db60
Showing 1 changed file with 20 additions and 2 deletions.
22 changes: 20 additions & 2 deletions git-gui/lib/mergetool.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -272,8 +272,26 @@ proc merge_resolve_tool2 {} {
}
}
default {
error_popup [mc "Unsupported merge tool '%s'" $tool]
return
set tool_cmd [get_config mergetool.$tool.cmd]
if {$tool_cmd ne {}} {
if {([string first {[} $tool_cmd] != -1) || ([string first {]} $tool_cmd] != -1)} {
error_popup [mc "Unable to process square brackets in mergetool.$tool.cmd configuration option.
Please remove the square brackets."]
return
} else {
set cmdline {}
foreach command_part $tool_cmd {
lappend cmdline [subst -nobackslashes -nocommands $command_part]
}
}
} else {
error_popup [mc "Unsupported merge tool '%s'.
To use this tool, configure \"mergetool.%s.cmd\" as shown in the git-config\
manual page." $tool $tool]
return
}
}
}

Expand Down

0 comments on commit c37db60

Please sign in to comment.