Merge branch 'da/mergetool-custom'
The actual external command to run for mergetool backend can be specified with difftool/mergetool.$name.cmd configuration variables, but this mechanism was ignored for the backends we natively support. * da/mergetool-custom: mergetool--lib: Allow custom commands to override built-ins
This commit is contained in:
commit
5ec11ab39d
@ -104,11 +104,47 @@ run_merge_tool () {
|
|||||||
|
|
||||||
if merge_mode
|
if merge_mode
|
||||||
then
|
then
|
||||||
merge_cmd "$1"
|
run_merge_cmd "$1"
|
||||||
|
else
|
||||||
|
run_diff_cmd "$1"
|
||||||
|
fi
|
||||||
|
return $status
|
||||||
|
}
|
||||||
|
|
||||||
|
# Run a either a configured or built-in diff tool
|
||||||
|
run_diff_cmd () {
|
||||||
|
merge_tool_cmd="$(get_merge_tool_cmd "$1")"
|
||||||
|
if test -n "$merge_tool_cmd"
|
||||||
|
then
|
||||||
|
( eval $merge_tool_cmd )
|
||||||
|
status=$?
|
||||||
|
return $status
|
||||||
else
|
else
|
||||||
diff_cmd "$1"
|
diff_cmd "$1"
|
||||||
fi
|
fi
|
||||||
return $status
|
}
|
||||||
|
|
||||||
|
# Run a either a configured or built-in merge tool
|
||||||
|
run_merge_cmd () {
|
||||||
|
merge_tool_cmd="$(get_merge_tool_cmd "$1")"
|
||||||
|
if test -n "$merge_tool_cmd"
|
||||||
|
then
|
||||||
|
trust_exit_code="$(git config --bool \
|
||||||
|
mergetool."$1".trustExitCode || echo false)"
|
||||||
|
if test "$trust_exit_code" = "false"
|
||||||
|
then
|
||||||
|
touch "$BACKUP"
|
||||||
|
( eval $merge_tool_cmd )
|
||||||
|
status=$?
|
||||||
|
check_unchanged
|
||||||
|
else
|
||||||
|
( eval $merge_tool_cmd )
|
||||||
|
status=$?
|
||||||
|
fi
|
||||||
|
return $status
|
||||||
|
else
|
||||||
|
merge_cmd "$1"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
list_merge_tool_candidates () {
|
list_merge_tool_candidates () {
|
||||||
|
@ -8,36 +8,12 @@ can_diff () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff_cmd () {
|
diff_cmd () {
|
||||||
merge_tool_cmd="$(get_merge_tool_cmd "$1")"
|
status=1
|
||||||
if test -z "$merge_tool_cmd"
|
|
||||||
then
|
|
||||||
status=1
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
( eval $merge_tool_cmd )
|
|
||||||
status=$?
|
|
||||||
return $status
|
return $status
|
||||||
}
|
}
|
||||||
|
|
||||||
merge_cmd () {
|
merge_cmd () {
|
||||||
merge_tool_cmd="$(get_merge_tool_cmd "$1")"
|
status=1
|
||||||
if test -z "$merge_tool_cmd"
|
|
||||||
then
|
|
||||||
status=1
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
trust_exit_code="$(git config --bool \
|
|
||||||
mergetool."$1".trustExitCode || echo false)"
|
|
||||||
if test "$trust_exit_code" = "false"
|
|
||||||
then
|
|
||||||
touch "$BACKUP"
|
|
||||||
( eval $merge_tool_cmd )
|
|
||||||
status=$?
|
|
||||||
check_unchanged
|
|
||||||
else
|
|
||||||
( eval $merge_tool_cmd )
|
|
||||||
status=$?
|
|
||||||
fi
|
|
||||||
return $status
|
return $status
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -509,4 +509,17 @@ test_expect_success 'file with no base' '
|
|||||||
git reset --hard master >/dev/null 2>&1
|
git reset --hard master >/dev/null 2>&1
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'custom commands override built-ins' '
|
||||||
|
git checkout -b test14 branch1 &&
|
||||||
|
git config mergetool.defaults.cmd "cat \"\$REMOTE\" >\"\$MERGED\"" &&
|
||||||
|
git config mergetool.defaults.trustExitCode true &&
|
||||||
|
test_must_fail git merge master &&
|
||||||
|
git mergetool --no-prompt --tool defaults -- both &&
|
||||||
|
echo master both added >expected &&
|
||||||
|
test_cmp both expected &&
|
||||||
|
git config --unset mergetool.defaults.cmd &&
|
||||||
|
git config --unset mergetool.defaults.trustExitCode &&
|
||||||
|
git reset --hard master >/dev/null 2>&1
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
@ -76,6 +76,17 @@ test_expect_success PERL 'custom commands' '
|
|||||||
test "$diff" = "branch"
|
test "$diff" = "branch"
|
||||||
'
|
'
|
||||||
|
|
||||||
|
# Ensures that a custom difftool.<tool>.cmd overrides built-ins
|
||||||
|
test_expect_success PERL 'custom commands override built-ins' '
|
||||||
|
restore_test_defaults &&
|
||||||
|
git config difftool.defaults.cmd "cat \$REMOTE" &&
|
||||||
|
|
||||||
|
diff=$(git difftool --tool defaults --no-prompt branch) &&
|
||||||
|
test "$diff" = "master" &&
|
||||||
|
|
||||||
|
git config --unset difftool.defaults.cmd
|
||||||
|
'
|
||||||
|
|
||||||
# Ensures that git-difftool ignores bogus --tool values
|
# Ensures that git-difftool ignores bogus --tool values
|
||||||
test_expect_success PERL 'difftool ignores bad --tool values' '
|
test_expect_success PERL 'difftool ignores bad --tool values' '
|
||||||
diff=$(git difftool --no-prompt --tool=bad-tool branch)
|
diff=$(git difftool --no-prompt --tool=bad-tool branch)
|
||||||
|
Loading…
Reference in New Issue
Block a user