mergetools/meld: make usage of --output configurable and more robust

Older versions of meld listed --output in `meld --help`.
Newer versions only mention `meld [OPTIONS...]`.
Improve the checks to catch these newer versions.

Add a `mergetool.meld.hasOutput` configuration to allow
overriding the heuristic.

Reported-by: Andrey Novoseltsev <novoselt@gmail.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
David Aguilar 2014-10-15 21:45:14 -07:00 committed by Junio C Hamano
parent 3c2dc76f01
commit b12d04503b
2 changed files with 16 additions and 2 deletions

View File

@ -1754,6 +1754,15 @@ mergetool.<tool>.trustExitCode::
if the file has been updated, otherwise the user is prompted to if the file has been updated, otherwise the user is prompted to
indicate the success of the merge. indicate the success of the merge.
mergetool.meld.hasOutput::
Older versions of `meld` do not support the `--output` option.
Git will attempt to detect whether `meld` supports `--output`
by inspecting the output of `meld --help`. Configuring
`mergetool.meld.hasOutput` will make Git skip these checks and
use the configured value instead. Setting `mergetool.meld.hasOutput`
to `true` tells Git to unconditionally use the `--output` option,
and `false` avoids using `--output`.
mergetool.keepBackup:: mergetool.keepBackup::
After performing a merge, the original file with conflict markers After performing a merge, the original file with conflict markers
can be saved as a file with a `.orig` extension. If this variable can be saved as a file with a `.orig` extension. If this variable

View File

@ -18,13 +18,18 @@ merge_cmd () {
check_unchanged check_unchanged
} }
# Check whether 'meld --output <file>' is supported # Check whether we should use 'meld --output <file>'
check_meld_for_output_version () { check_meld_for_output_version () {
meld_path="$(git config mergetool.meld.path)" meld_path="$(git config mergetool.meld.path)"
meld_path="${meld_path:-meld}" meld_path="${meld_path:-meld}"
if "$meld_path" --help 2>&1 | grep -e --output >/dev/null if meld_has_output_option=$(git config --bool mergetool.meld.hasOutput)
then then
: use configured value
elif "$meld_path" --help 2>&1 |
grep -e '--output=' -e '\[OPTION\.\.\.\]' >/dev/null
then
: old ones mention --output and new ones just say OPTION...
meld_has_output_option=true meld_has_output_option=true
else else
meld_has_output_option=false meld_has_output_option=false