mirror of
https://github.com/git/git.git
synced 2024-12-02 22:43:44 +08:00
dbd8c09bfe
Make the mergetool used with "meld" backend behave similarly to "vimdiff" by telling it to auto-merge non-conflicting parts and highlight the conflicting parts when `mergetool.meld.useAutoMerge` is configured with `true`, or `auto` for detecting the `--auto-merge` option automatically. Helped-by: Đoàn Trần Công Danh <congdanhqx@gmail.com> Helped-by: David Aguilar <davvid@gmail.com> Signed-off-by: Lin Sun <lin.sun@zoom.us> Signed-off-by: Junio C Hamano <gitster@pobox.com>
90 lines
1.9 KiB
Plaintext
90 lines
1.9 KiB
Plaintext
diff_cmd () {
|
|
"$merge_tool_path" "$LOCAL" "$REMOTE"
|
|
}
|
|
|
|
merge_cmd () {
|
|
check_meld_for_features
|
|
|
|
option_auto_merge=
|
|
if test "$meld_use_auto_merge_option" = true
|
|
then
|
|
option_auto_merge="--auto-merge"
|
|
fi
|
|
|
|
if test "$meld_has_output_option" = true
|
|
then
|
|
"$merge_tool_path" $option_auto_merge --output="$MERGED" \
|
|
"$LOCAL" "$BASE" "$REMOTE"
|
|
else
|
|
"$merge_tool_path" $option_auto_merge "$LOCAL" "$MERGED" "$REMOTE"
|
|
fi
|
|
}
|
|
|
|
# Get meld help message
|
|
init_meld_help_msg () {
|
|
if test -z "$meld_help_msg"
|
|
then
|
|
meld_path="$(git config mergetool.meld.path || echo meld)"
|
|
meld_help_msg=$("$meld_path" --help 2>&1)
|
|
fi
|
|
}
|
|
|
|
# Check the features and set flags
|
|
check_meld_for_features () {
|
|
# Check whether we should use 'meld --output <file>'
|
|
if test -z "$meld_has_output_option"
|
|
then
|
|
meld_has_output_option=$(git config --bool mergetool.meld.hasOutput)
|
|
case "$meld_has_output_option" in
|
|
true | false)
|
|
: use configured value
|
|
;;
|
|
*)
|
|
: empty or invalid configured value, detecting "--output" automatically
|
|
init_meld_help_msg
|
|
|
|
case "$meld_help_msg" in
|
|
*"--output="* | *'[OPTION...]'*)
|
|
# All version that has [OPTION...] supports --output
|
|
meld_has_output_option=true
|
|
;;
|
|
*)
|
|
meld_has_output_option=false
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
fi
|
|
# Check whether we should use 'meld --auto-merge ...'
|
|
if test -z "$meld_use_auto_merge_option"
|
|
then
|
|
meld_use_auto_merge_option=$(
|
|
git config --bool-or-str mergetool.meld.useAutoMerge
|
|
)
|
|
case "$meld_use_auto_merge_option" in
|
|
true | false)
|
|
: use well formatted boolean value
|
|
;;
|
|
auto)
|
|
# testing the "--auto-merge" option only if config is "auto"
|
|
init_meld_help_msg
|
|
|
|
case "$meld_help_msg" in
|
|
*"--auto-merge"* | *'[OPTION...]'*)
|
|
meld_use_auto_merge_option=true
|
|
;;
|
|
*)
|
|
meld_use_auto_merge_option=false
|
|
;;
|
|
esac
|
|
;;
|
|
"")
|
|
meld_use_auto_merge_option=false
|
|
;;
|
|
*)
|
|
die "unknown mergetool.meld.useAutoMerge: $meld_use_auto_merge_option"
|
|
;;
|
|
esac
|
|
fi
|
|
}
|