mirror of
https://github.com/git/git.git
synced 2026-01-10 10:13:33 +00:00
Merge branch 'dl/difftool-mergetool'
Update "git difftool" and "git mergetool" so that the combinations
of {diff,merge}.{tool,guitool} configuration variables serve as
fallback settings of each other in a sensible order.
* dl/difftool-mergetool:
difftool: fallback on merge.guitool
difftool: make --gui, --tool and --extcmd mutually exclusive
mergetool: fallback to tool when guitool unavailable
mergetool--lib: create gui_mode function
mergetool: use get_merge_tool function
t7610: add mergetool --gui tests
t7610: unsuppress output
This commit is contained in:
@@ -90,7 +90,9 @@ instead. `--no-symlinks` is the default on Windows.
|
|||||||
When 'git-difftool' is invoked with the `-g` or `--gui` option
|
When 'git-difftool' is invoked with the `-g` or `--gui` option
|
||||||
the default diff tool will be read from the configured
|
the default diff tool will be read from the configured
|
||||||
`diff.guitool` variable instead of `diff.tool`. The `--no-gui`
|
`diff.guitool` variable instead of `diff.tool`. The `--no-gui`
|
||||||
option can be used to override this setting.
|
option can be used to override this setting. If `diff.guitool`
|
||||||
|
is not set, we will fallback in the order of `merge.guitool`,
|
||||||
|
`diff.tool`, `merge.tool` until a tool is found.
|
||||||
|
|
||||||
--[no-]trust-exit-code::
|
--[no-]trust-exit-code::
|
||||||
'git-difftool' invokes a diff tool individually on each file.
|
'git-difftool' invokes a diff tool individually on each file.
|
||||||
|
|||||||
@@ -28,7 +28,9 @@ to define the operation mode for the functions listed below.
|
|||||||
FUNCTIONS
|
FUNCTIONS
|
||||||
---------
|
---------
|
||||||
get_merge_tool::
|
get_merge_tool::
|
||||||
returns a merge tool.
|
returns a merge tool. the return code is 1 if we returned a guessed
|
||||||
|
merge tool, else 0. '$GIT_MERGETOOL_GUI' may be set to 'true' to
|
||||||
|
search for the appropriate guitool.
|
||||||
|
|
||||||
get_merge_tool_cmd::
|
get_merge_tool_cmd::
|
||||||
returns the custom command for a merge tool.
|
returns the custom command for a merge tool.
|
||||||
|
|||||||
@@ -83,7 +83,9 @@ success of the resolution after the custom tool has exited.
|
|||||||
--gui::
|
--gui::
|
||||||
When 'git-mergetool' is invoked with the `-g` or `--gui` option
|
When 'git-mergetool' is invoked with the `-g` or `--gui` option
|
||||||
the default merge tool will be read from the configured
|
the default merge tool will be read from the configured
|
||||||
`merge.guitool` variable instead of `merge.tool`.
|
`merge.guitool` variable instead of `merge.tool`. If
|
||||||
|
`merge.guitool` is not set, we will fallback to the tool
|
||||||
|
configured under `merge.tool`.
|
||||||
|
|
||||||
--no-gui::
|
--no-gui::
|
||||||
This overrides a previous `-g` or `--gui` setting and reads the
|
This overrides a previous `-g` or `--gui` setting and reads the
|
||||||
|
|||||||
@@ -24,7 +24,6 @@
|
|||||||
#include "object-store.h"
|
#include "object-store.h"
|
||||||
#include "dir.h"
|
#include "dir.h"
|
||||||
|
|
||||||
static char *diff_gui_tool;
|
|
||||||
static int trust_exit_code;
|
static int trust_exit_code;
|
||||||
|
|
||||||
static const char *const builtin_difftool_usage[] = {
|
static const char *const builtin_difftool_usage[] = {
|
||||||
@@ -34,11 +33,6 @@ static const char *const builtin_difftool_usage[] = {
|
|||||||
|
|
||||||
static int difftool_config(const char *var, const char *value, void *cb)
|
static int difftool_config(const char *var, const char *value, void *cb)
|
||||||
{
|
{
|
||||||
if (!strcmp(var, "diff.guitool")) {
|
|
||||||
diff_gui_tool = xstrdup(value);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!strcmp(var, "difftool.trustexitcode")) {
|
if (!strcmp(var, "difftool.trustexitcode")) {
|
||||||
trust_exit_code = git_config_bool(var, value);
|
trust_exit_code = git_config_bool(var, value);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -735,8 +729,11 @@ int cmd_difftool(int argc, const char **argv, const char *prefix)
|
|||||||
setenv(GIT_WORK_TREE_ENVIRONMENT, absolute_path(get_git_work_tree()), 1);
|
setenv(GIT_WORK_TREE_ENVIRONMENT, absolute_path(get_git_work_tree()), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (use_gui_tool && diff_gui_tool && *diff_gui_tool)
|
if (use_gui_tool + !!difftool_cmd + !!extcmd > 1)
|
||||||
setenv("GIT_DIFF_TOOL", diff_gui_tool, 1);
|
die(_("--gui, --tool and --extcmd are mutually exclusive"));
|
||||||
|
|
||||||
|
if (use_gui_tool)
|
||||||
|
setenv("GIT_MERGETOOL_GUI", "true", 1);
|
||||||
else if (difftool_cmd) {
|
else if (difftool_cmd) {
|
||||||
if (*difftool_cmd)
|
if (*difftool_cmd)
|
||||||
setenv("GIT_DIFF_TOOL", difftool_cmd, 1);
|
setenv("GIT_DIFF_TOOL", difftool_cmd, 1);
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ then
|
|||||||
then
|
then
|
||||||
merge_tool="$GIT_DIFF_TOOL"
|
merge_tool="$GIT_DIFF_TOOL"
|
||||||
else
|
else
|
||||||
merge_tool="$(get_merge_tool)" || exit
|
merge_tool="$(get_merge_tool)"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -88,6 +88,10 @@ merge_mode() {
|
|||||||
test "$TOOL_MODE" = merge
|
test "$TOOL_MODE" = merge
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gui_mode () {
|
||||||
|
test "$GIT_MERGETOOL_GUI" = true
|
||||||
|
}
|
||||||
|
|
||||||
translate_merge_tool_path () {
|
translate_merge_tool_path () {
|
||||||
echo "$1"
|
echo "$1"
|
||||||
}
|
}
|
||||||
@@ -351,20 +355,36 @@ guess_merge_tool () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get_configured_merge_tool () {
|
get_configured_merge_tool () {
|
||||||
# If first argument is true, find the guitool instead
|
keys=
|
||||||
if test "$1" = true
|
|
||||||
then
|
|
||||||
gui_prefix=gui
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Diff mode first tries diff.(gui)tool and falls back to merge.(gui)tool.
|
|
||||||
# Merge mode only checks merge.(gui)tool
|
|
||||||
if diff_mode
|
if diff_mode
|
||||||
then
|
then
|
||||||
merge_tool=$(git config diff.${gui_prefix}tool || git config merge.${gui_prefix}tool)
|
if gui_mode
|
||||||
|
then
|
||||||
|
keys="diff.guitool merge.guitool diff.tool merge.tool"
|
||||||
else
|
else
|
||||||
merge_tool=$(git config merge.${gui_prefix}tool)
|
keys="diff.tool merge.tool"
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
if gui_mode
|
||||||
|
then
|
||||||
|
keys="merge.guitool merge.tool"
|
||||||
|
else
|
||||||
|
keys="merge.tool"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
merge_tool=$(
|
||||||
|
IFS=' '
|
||||||
|
for key in $keys
|
||||||
|
do
|
||||||
|
selected=$(git config $key)
|
||||||
|
if test -n "$selected"
|
||||||
|
then
|
||||||
|
echo "$selected"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
done)
|
||||||
|
|
||||||
if test -n "$merge_tool" && ! valid_tool "$merge_tool"
|
if test -n "$merge_tool" && ! valid_tool "$merge_tool"
|
||||||
then
|
then
|
||||||
echo >&2 "git config option $TOOL_MODE.${gui_prefix}tool set to unknown tool: $merge_tool"
|
echo >&2 "git config option $TOOL_MODE.${gui_prefix}tool set to unknown tool: $merge_tool"
|
||||||
@@ -404,14 +424,17 @@ get_merge_tool_path () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get_merge_tool () {
|
get_merge_tool () {
|
||||||
|
is_guessed=false
|
||||||
# Check if a merge tool has been configured
|
# Check if a merge tool has been configured
|
||||||
merge_tool=$(get_configured_merge_tool)
|
merge_tool=$(get_configured_merge_tool)
|
||||||
# Try to guess an appropriate merge tool if no tool has been set.
|
# Try to guess an appropriate merge tool if no tool has been set.
|
||||||
if test -z "$merge_tool"
|
if test -z "$merge_tool"
|
||||||
then
|
then
|
||||||
merge_tool=$(guess_merge_tool) || exit
|
merge_tool=$(guess_merge_tool) || exit
|
||||||
|
is_guessed=true
|
||||||
fi
|
fi
|
||||||
echo "$merge_tool"
|
echo "$merge_tool"
|
||||||
|
test "$is_guessed" = false
|
||||||
}
|
}
|
||||||
|
|
||||||
mergetool_find_win32_cmd () {
|
mergetool_find_win32_cmd () {
|
||||||
|
|||||||
@@ -389,7 +389,7 @@ print_noop_and_exit () {
|
|||||||
|
|
||||||
main () {
|
main () {
|
||||||
prompt=$(git config --bool mergetool.prompt)
|
prompt=$(git config --bool mergetool.prompt)
|
||||||
gui_tool=false
|
GIT_MERGETOOL_GUI=false
|
||||||
guessed_merge_tool=false
|
guessed_merge_tool=false
|
||||||
orderfile=
|
orderfile=
|
||||||
|
|
||||||
@@ -416,10 +416,10 @@ main () {
|
|||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
--no-gui)
|
--no-gui)
|
||||||
gui_tool=false
|
GIT_MERGETOOL_GUI=false
|
||||||
;;
|
;;
|
||||||
-g|--gui)
|
-g|--gui)
|
||||||
gui_tool=true
|
GIT_MERGETOOL_GUI=true
|
||||||
;;
|
;;
|
||||||
-y|--no-prompt)
|
-y|--no-prompt)
|
||||||
prompt=false
|
prompt=false
|
||||||
@@ -449,12 +449,8 @@ main () {
|
|||||||
|
|
||||||
if test -z "$merge_tool"
|
if test -z "$merge_tool"
|
||||||
then
|
then
|
||||||
# Check if a merge tool has been configured
|
if ! merge_tool=$(get_merge_tool)
|
||||||
merge_tool=$(get_configured_merge_tool $gui_tool)
|
|
||||||
# Try to guess an appropriate merge tool if no tool has been set.
|
|
||||||
if test -z "$merge_tool"
|
|
||||||
then
|
then
|
||||||
merge_tool=$(guess_merge_tool) || exit
|
|
||||||
guessed_merge_tool=true
|
guessed_merge_tool=true
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -130,14 +130,55 @@ test_expect_success 'custom mergetool' '
|
|||||||
test_when_finished "git reset --hard" &&
|
test_when_finished "git reset --hard" &&
|
||||||
git checkout -b test$test_count branch1 &&
|
git checkout -b test$test_count branch1 &&
|
||||||
git submodule update -N &&
|
git submodule update -N &&
|
||||||
test_must_fail git merge master >/dev/null 2>&1 &&
|
test_must_fail git merge master &&
|
||||||
( yes "" | git mergetool both >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool both ) &&
|
||||||
( yes "" | git mergetool file1 file1 ) &&
|
( yes "" | git mergetool file1 file1 ) &&
|
||||||
( yes "" | git mergetool file2 "spaced name" >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool file2 "spaced name" ) &&
|
||||||
( yes "" | git mergetool subdir/file3 >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool subdir/file3 ) &&
|
||||||
( yes "d" | git mergetool file11 >/dev/null 2>&1 ) &&
|
( yes "d" | git mergetool file11 ) &&
|
||||||
( yes "d" | git mergetool file12 >/dev/null 2>&1 ) &&
|
( yes "d" | git mergetool file12 ) &&
|
||||||
( yes "l" | git mergetool submod >/dev/null 2>&1 ) &&
|
( yes "l" | git mergetool submod ) &&
|
||||||
|
test "$(cat file1)" = "master updated" &&
|
||||||
|
test "$(cat file2)" = "master new" &&
|
||||||
|
test "$(cat subdir/file3)" = "master new sub" &&
|
||||||
|
test "$(cat submod/bar)" = "branch1 submodule" &&
|
||||||
|
git commit -m "branch1 resolved with mergetool"
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'gui mergetool' '
|
||||||
|
test_config merge.guitool myguitool &&
|
||||||
|
test_config mergetool.myguitool.cmd "(printf \"gui \" && cat \"\$REMOTE\") >\"\$MERGED\"" &&
|
||||||
|
test_config mergetool.myguitool.trustExitCode true &&
|
||||||
|
test_when_finished "git reset --hard" &&
|
||||||
|
git checkout -b test$test_count branch1 &&
|
||||||
|
git submodule update -N &&
|
||||||
|
test_must_fail git merge master &&
|
||||||
|
( yes "" | git mergetool --gui both ) &&
|
||||||
|
( yes "" | git mergetool -g file1 file1 ) &&
|
||||||
|
( yes "" | git mergetool --gui file2 "spaced name" ) &&
|
||||||
|
( yes "" | git mergetool --gui subdir/file3 ) &&
|
||||||
|
( yes "d" | git mergetool --gui file11 ) &&
|
||||||
|
( yes "d" | git mergetool --gui file12 ) &&
|
||||||
|
( yes "l" | git mergetool --gui submod ) &&
|
||||||
|
test "$(cat file1)" = "gui master updated" &&
|
||||||
|
test "$(cat file2)" = "gui master new" &&
|
||||||
|
test "$(cat subdir/file3)" = "gui master new sub" &&
|
||||||
|
test "$(cat submod/bar)" = "branch1 submodule" &&
|
||||||
|
git commit -m "branch1 resolved with mergetool"
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'gui mergetool without merge.guitool set falls back to merge.tool' '
|
||||||
|
test_when_finished "git reset --hard" &&
|
||||||
|
git checkout -b test$test_count branch1 &&
|
||||||
|
git submodule update -N &&
|
||||||
|
test_must_fail git merge master &&
|
||||||
|
( yes "" | git mergetool --gui both ) &&
|
||||||
|
( yes "" | git mergetool -g file1 file1 ) &&
|
||||||
|
( yes "" | git mergetool --gui file2 "spaced name" ) &&
|
||||||
|
( yes "" | git mergetool --gui subdir/file3 ) &&
|
||||||
|
( yes "d" | git mergetool --gui file11 ) &&
|
||||||
|
( yes "d" | git mergetool --gui file12 ) &&
|
||||||
|
( yes "l" | git mergetool --gui submod ) &&
|
||||||
test "$(cat file1)" = "master updated" &&
|
test "$(cat file1)" = "master updated" &&
|
||||||
test "$(cat file2)" = "master new" &&
|
test "$(cat file2)" = "master new" &&
|
||||||
test "$(cat subdir/file3)" = "master new sub" &&
|
test "$(cat subdir/file3)" = "master new sub" &&
|
||||||
@@ -153,15 +194,15 @@ test_expect_success 'mergetool crlf' '
|
|||||||
# test_when_finished is LIFO.)
|
# test_when_finished is LIFO.)
|
||||||
test_config core.autocrlf true &&
|
test_config core.autocrlf true &&
|
||||||
git checkout -b test$test_count branch1 &&
|
git checkout -b test$test_count branch1 &&
|
||||||
test_must_fail git merge master >/dev/null 2>&1 &&
|
test_must_fail git merge master &&
|
||||||
( yes "" | git mergetool file1 >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool file1 ) &&
|
||||||
( yes "" | git mergetool file2 >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool file2 ) &&
|
||||||
( yes "" | git mergetool "spaced name" >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool "spaced name" ) &&
|
||||||
( yes "" | git mergetool both >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool both ) &&
|
||||||
( yes "" | git mergetool subdir/file3 >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool subdir/file3 ) &&
|
||||||
( yes "d" | git mergetool file11 >/dev/null 2>&1 ) &&
|
( yes "d" | git mergetool file11 ) &&
|
||||||
( yes "d" | git mergetool file12 >/dev/null 2>&1 ) &&
|
( yes "d" | git mergetool file12 ) &&
|
||||||
( yes "r" | git mergetool submod >/dev/null 2>&1 ) &&
|
( yes "r" | git mergetool submod ) &&
|
||||||
test "$(printf x | cat file1 -)" = "$(printf "master updated\r\nx")" &&
|
test "$(printf x | cat file1 -)" = "$(printf "master updated\r\nx")" &&
|
||||||
test "$(printf x | cat file2 -)" = "$(printf "master new\r\nx")" &&
|
test "$(printf x | cat file2 -)" = "$(printf "master new\r\nx")" &&
|
||||||
test "$(printf x | cat subdir/file3 -)" = "$(printf "master new sub\r\nx")" &&
|
test "$(printf x | cat subdir/file3 -)" = "$(printf "master new sub\r\nx")" &&
|
||||||
@@ -176,8 +217,8 @@ test_expect_success 'mergetool in subdir' '
|
|||||||
git submodule update -N &&
|
git submodule update -N &&
|
||||||
(
|
(
|
||||||
cd subdir &&
|
cd subdir &&
|
||||||
test_must_fail git merge master >/dev/null 2>&1 &&
|
test_must_fail git merge master &&
|
||||||
( yes "" | git mergetool file3 >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool file3 ) &&
|
||||||
test "$(cat file3)" = "master new sub"
|
test "$(cat file3)" = "master new sub"
|
||||||
)
|
)
|
||||||
'
|
'
|
||||||
@@ -188,14 +229,14 @@ test_expect_success 'mergetool on file in parent dir' '
|
|||||||
git submodule update -N &&
|
git submodule update -N &&
|
||||||
(
|
(
|
||||||
cd subdir &&
|
cd subdir &&
|
||||||
test_must_fail git merge master >/dev/null 2>&1 &&
|
test_must_fail git merge master &&
|
||||||
( yes "" | git mergetool file3 >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool file3 ) &&
|
||||||
( yes "" | git mergetool ../file1 >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool ../file1 ) &&
|
||||||
( yes "" | git mergetool ../file2 ../spaced\ name >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool ../file2 ../spaced\ name ) &&
|
||||||
( yes "" | git mergetool ../both >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool ../both ) &&
|
||||||
( yes "d" | git mergetool ../file11 >/dev/null 2>&1 ) &&
|
( yes "d" | git mergetool ../file11 ) &&
|
||||||
( yes "d" | git mergetool ../file12 >/dev/null 2>&1 ) &&
|
( yes "d" | git mergetool ../file12 ) &&
|
||||||
( yes "l" | git mergetool ../submod >/dev/null 2>&1 ) &&
|
( yes "l" | git mergetool ../submod ) &&
|
||||||
test "$(cat ../file1)" = "master updated" &&
|
test "$(cat ../file1)" = "master updated" &&
|
||||||
test "$(cat ../file2)" = "master new" &&
|
test "$(cat ../file2)" = "master new" &&
|
||||||
test "$(cat ../submod/bar)" = "branch1 submodule" &&
|
test "$(cat ../submod/bar)" = "branch1 submodule" &&
|
||||||
@@ -209,9 +250,9 @@ test_expect_success 'mergetool skips autoresolved' '
|
|||||||
git submodule update -N &&
|
git submodule update -N &&
|
||||||
test_must_fail git merge master &&
|
test_must_fail git merge master &&
|
||||||
test -n "$(git ls-files -u)" &&
|
test -n "$(git ls-files -u)" &&
|
||||||
( yes "d" | git mergetool file11 >/dev/null 2>&1 ) &&
|
( yes "d" | git mergetool file11 ) &&
|
||||||
( yes "d" | git mergetool file12 >/dev/null 2>&1 ) &&
|
( yes "d" | git mergetool file12 ) &&
|
||||||
( yes "l" | git mergetool submod >/dev/null 2>&1 ) &&
|
( yes "l" | git mergetool submod ) &&
|
||||||
output="$(git mergetool --no-prompt)" &&
|
output="$(git mergetool --no-prompt)" &&
|
||||||
test "$output" = "No files need merging"
|
test "$output" = "No files need merging"
|
||||||
'
|
'
|
||||||
@@ -259,9 +300,9 @@ test_expect_success 'mergetool skips resolved paths when rerere is active' '
|
|||||||
rm -rf .git/rr-cache &&
|
rm -rf .git/rr-cache &&
|
||||||
git checkout -b test$test_count branch1 &&
|
git checkout -b test$test_count branch1 &&
|
||||||
git submodule update -N &&
|
git submodule update -N &&
|
||||||
test_must_fail git merge master >/dev/null 2>&1 &&
|
test_must_fail git merge master &&
|
||||||
( yes "l" | git mergetool --no-prompt submod >/dev/null 2>&1 ) &&
|
( yes "l" | git mergetool --no-prompt submod ) &&
|
||||||
( yes "d" "d" | git mergetool --no-prompt >/dev/null 2>&1 ) &&
|
( yes "d" "d" | git mergetool --no-prompt ) &&
|
||||||
git submodule update -N &&
|
git submodule update -N &&
|
||||||
output="$(yes "n" | git mergetool --no-prompt)" &&
|
output="$(yes "n" | git mergetool --no-prompt)" &&
|
||||||
test "$output" = "No files need merging"
|
test "$output" = "No files need merging"
|
||||||
@@ -369,9 +410,9 @@ test_expect_success 'deleted vs modified submodule' '
|
|||||||
git checkout -b test$test_count.a test$test_count &&
|
git checkout -b test$test_count.a test$test_count &&
|
||||||
test_must_fail git merge master &&
|
test_must_fail git merge master &&
|
||||||
test -n "$(git ls-files -u)" &&
|
test -n "$(git ls-files -u)" &&
|
||||||
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 ) &&
|
||||||
( yes "" | git mergetool both >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool both ) &&
|
||||||
( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&
|
( yes "d" | git mergetool file11 file12 ) &&
|
||||||
( yes "r" | git mergetool submod ) &&
|
( yes "r" | git mergetool submod ) &&
|
||||||
rmdir submod && mv submod-movedaside submod &&
|
rmdir submod && mv submod-movedaside submod &&
|
||||||
test "$(cat submod/bar)" = "branch1 submodule" &&
|
test "$(cat submod/bar)" = "branch1 submodule" &&
|
||||||
@@ -386,9 +427,9 @@ test_expect_success 'deleted vs modified submodule' '
|
|||||||
git submodule update -N &&
|
git submodule update -N &&
|
||||||
test_must_fail git merge master &&
|
test_must_fail git merge master &&
|
||||||
test -n "$(git ls-files -u)" &&
|
test -n "$(git ls-files -u)" &&
|
||||||
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 ) &&
|
||||||
( yes "" | git mergetool both >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool both ) &&
|
||||||
( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&
|
( yes "d" | git mergetool file11 file12 ) &&
|
||||||
( yes "l" | git mergetool submod ) &&
|
( yes "l" | git mergetool submod ) &&
|
||||||
test ! -e submod &&
|
test ! -e submod &&
|
||||||
output="$(git mergetool --no-prompt)" &&
|
output="$(git mergetool --no-prompt)" &&
|
||||||
@@ -400,9 +441,9 @@ test_expect_success 'deleted vs modified submodule' '
|
|||||||
git submodule update -N &&
|
git submodule update -N &&
|
||||||
test_must_fail git merge test$test_count &&
|
test_must_fail git merge test$test_count &&
|
||||||
test -n "$(git ls-files -u)" &&
|
test -n "$(git ls-files -u)" &&
|
||||||
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 ) &&
|
||||||
( yes "" | git mergetool both >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool both ) &&
|
||||||
( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&
|
( yes "d" | git mergetool file11 file12 ) &&
|
||||||
( yes "r" | git mergetool submod ) &&
|
( yes "r" | git mergetool submod ) &&
|
||||||
test ! -e submod &&
|
test ! -e submod &&
|
||||||
test -d submod.orig &&
|
test -d submod.orig &&
|
||||||
@@ -416,9 +457,9 @@ test_expect_success 'deleted vs modified submodule' '
|
|||||||
git submodule update -N &&
|
git submodule update -N &&
|
||||||
test_must_fail git merge test$test_count &&
|
test_must_fail git merge test$test_count &&
|
||||||
test -n "$(git ls-files -u)" &&
|
test -n "$(git ls-files -u)" &&
|
||||||
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 ) &&
|
||||||
( yes "" | git mergetool both >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool both ) &&
|
||||||
( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&
|
( yes "d" | git mergetool file11 file12 ) &&
|
||||||
( yes "l" | git mergetool submod ) &&
|
( yes "l" | git mergetool submod ) &&
|
||||||
test "$(cat submod/bar)" = "master submodule" &&
|
test "$(cat submod/bar)" = "master submodule" &&
|
||||||
git submodule update -N &&
|
git submodule update -N &&
|
||||||
@@ -440,9 +481,9 @@ test_expect_success 'file vs modified submodule' '
|
|||||||
git checkout -b test$test_count.a branch1 &&
|
git checkout -b test$test_count.a branch1 &&
|
||||||
test_must_fail git merge master &&
|
test_must_fail git merge master &&
|
||||||
test -n "$(git ls-files -u)" &&
|
test -n "$(git ls-files -u)" &&
|
||||||
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 ) &&
|
||||||
( yes "" | git mergetool both >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool both ) &&
|
||||||
( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&
|
( yes "d" | git mergetool file11 file12 ) &&
|
||||||
( yes "r" | git mergetool submod ) &&
|
( yes "r" | git mergetool submod ) &&
|
||||||
rmdir submod && mv submod-movedaside submod &&
|
rmdir submod && mv submod-movedaside submod &&
|
||||||
test "$(cat submod/bar)" = "branch1 submodule" &&
|
test "$(cat submod/bar)" = "branch1 submodule" &&
|
||||||
@@ -456,9 +497,9 @@ test_expect_success 'file vs modified submodule' '
|
|||||||
git checkout -b test$test_count.b test$test_count &&
|
git checkout -b test$test_count.b test$test_count &&
|
||||||
test_must_fail git merge master &&
|
test_must_fail git merge master &&
|
||||||
test -n "$(git ls-files -u)" &&
|
test -n "$(git ls-files -u)" &&
|
||||||
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 ) &&
|
||||||
( yes "" | git mergetool both >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool both ) &&
|
||||||
( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&
|
( yes "d" | git mergetool file11 file12 ) &&
|
||||||
( yes "l" | git mergetool submod ) &&
|
( yes "l" | git mergetool submod ) &&
|
||||||
git submodule update -N &&
|
git submodule update -N &&
|
||||||
test "$(cat submod)" = "not a submodule" &&
|
test "$(cat submod)" = "not a submodule" &&
|
||||||
@@ -472,9 +513,9 @@ test_expect_success 'file vs modified submodule' '
|
|||||||
git submodule update -N &&
|
git submodule update -N &&
|
||||||
test_must_fail git merge test$test_count &&
|
test_must_fail git merge test$test_count &&
|
||||||
test -n "$(git ls-files -u)" &&
|
test -n "$(git ls-files -u)" &&
|
||||||
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 ) &&
|
||||||
( yes "" | git mergetool both >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool both ) &&
|
||||||
( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&
|
( yes "d" | git mergetool file11 file12 ) &&
|
||||||
( yes "r" | git mergetool submod ) &&
|
( yes "r" | git mergetool submod ) &&
|
||||||
test -d submod.orig &&
|
test -d submod.orig &&
|
||||||
git submodule update -N &&
|
git submodule update -N &&
|
||||||
@@ -488,9 +529,9 @@ test_expect_success 'file vs modified submodule' '
|
|||||||
git submodule update -N &&
|
git submodule update -N &&
|
||||||
test_must_fail git merge test$test_count &&
|
test_must_fail git merge test$test_count &&
|
||||||
test -n "$(git ls-files -u)" &&
|
test -n "$(git ls-files -u)" &&
|
||||||
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
|
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 ) &&
|
||||||
( yes "" | git mergetool both>/dev/null 2>&1 ) &&
|
( yes "" | git mergetool both ) &&
|
||||||
( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&
|
( yes "d" | git mergetool file11 file12 ) &&
|
||||||
( yes "l" | git mergetool submod ) &&
|
( yes "l" | git mergetool submod ) &&
|
||||||
test "$(cat submod/bar)" = "master submodule" &&
|
test "$(cat submod/bar)" = "master submodule" &&
|
||||||
git submodule update -N &&
|
git submodule update -N &&
|
||||||
@@ -543,7 +584,7 @@ test_expect_success 'submodule in subdirectory' '
|
|||||||
git add subdir/subdir_module &&
|
git add subdir/subdir_module &&
|
||||||
git commit -m "change submodule in subdirectory on test$test_count.b" &&
|
git commit -m "change submodule in subdirectory on test$test_count.b" &&
|
||||||
|
|
||||||
test_must_fail git merge test$test_count.a >/dev/null 2>&1 &&
|
test_must_fail git merge test$test_count.a &&
|
||||||
(
|
(
|
||||||
cd subdir &&
|
cd subdir &&
|
||||||
( yes "l" | git mergetool subdir_module )
|
( yes "l" | git mergetool subdir_module )
|
||||||
@@ -554,7 +595,7 @@ test_expect_success 'submodule in subdirectory' '
|
|||||||
git reset --hard &&
|
git reset --hard &&
|
||||||
git submodule update -N &&
|
git submodule update -N &&
|
||||||
|
|
||||||
test_must_fail git merge test$test_count.a >/dev/null 2>&1 &&
|
test_must_fail git merge test$test_count.a &&
|
||||||
( yes "r" | git mergetool subdir/subdir_module ) &&
|
( yes "r" | git mergetool subdir/subdir_module ) &&
|
||||||
test "$(cat subdir/subdir_module/file15)" = "test$test_count.b" &&
|
test "$(cat subdir/subdir_module/file15)" = "test$test_count.b" &&
|
||||||
git submodule update -N &&
|
git submodule update -N &&
|
||||||
@@ -641,7 +682,7 @@ test_expect_success 'filenames seen by tools start with ./' '
|
|||||||
test_config mergetool.myecho.trustExitCode true &&
|
test_config mergetool.myecho.trustExitCode true &&
|
||||||
test_must_fail git merge master &&
|
test_must_fail git merge master &&
|
||||||
git mergetool --no-prompt --tool myecho -- both >actual &&
|
git mergetool --no-prompt --tool myecho -- both >actual &&
|
||||||
grep ^\./both_LOCAL_ actual >/dev/null
|
grep ^\./both_LOCAL_ actual
|
||||||
'
|
'
|
||||||
|
|
||||||
test_lazy_prereq MKTEMP '
|
test_lazy_prereq MKTEMP '
|
||||||
@@ -658,8 +699,8 @@ test_expect_success MKTEMP 'temporary filenames are used with mergetool.writeToT
|
|||||||
test_config mergetool.myecho.trustExitCode true &&
|
test_config mergetool.myecho.trustExitCode true &&
|
||||||
test_must_fail git merge master &&
|
test_must_fail git merge master &&
|
||||||
git mergetool --no-prompt --tool myecho -- both >actual &&
|
git mergetool --no-prompt --tool myecho -- both >actual &&
|
||||||
! grep ^\./both_LOCAL_ actual >/dev/null &&
|
! grep ^\./both_LOCAL_ actual &&
|
||||||
grep /both_LOCAL_ actual >/dev/null
|
grep /both_LOCAL_ actual
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'diff.orderFile configuration is honored' '
|
test_expect_success 'diff.orderFile configuration is honored' '
|
||||||
|
|||||||
@@ -279,11 +279,27 @@ test_expect_success 'difftool + mergetool config variables' '
|
|||||||
echo branch >expect &&
|
echo branch >expect &&
|
||||||
git difftool --no-prompt branch >actual &&
|
git difftool --no-prompt branch >actual &&
|
||||||
test_cmp expect actual &&
|
test_cmp expect actual &&
|
||||||
|
git difftool --gui --no-prompt branch >actual &&
|
||||||
|
test_cmp expect actual &&
|
||||||
|
|
||||||
# set merge.tool to something bogus, diff.tool to test-tool
|
# set merge.tool to something bogus, diff.tool to test-tool
|
||||||
test_config merge.tool bogus-tool &&
|
test_config merge.tool bogus-tool &&
|
||||||
test_config diff.tool test-tool &&
|
test_config diff.tool test-tool &&
|
||||||
git difftool --no-prompt branch >actual &&
|
git difftool --no-prompt branch >actual &&
|
||||||
|
test_cmp expect actual &&
|
||||||
|
git difftool --gui --no-prompt branch >actual &&
|
||||||
|
test_cmp expect actual &&
|
||||||
|
|
||||||
|
# set merge.tool, diff.tool to something bogus, merge.guitool to test-tool
|
||||||
|
test_config diff.tool bogus-tool &&
|
||||||
|
test_config merge.guitool test-tool &&
|
||||||
|
git difftool --gui --no-prompt branch >actual &&
|
||||||
|
test_cmp expect actual &&
|
||||||
|
|
||||||
|
# set merge.tool, diff.tool, merge.guitool to something bogus, diff.guitool to test-tool
|
||||||
|
test_config merge.guitool bogus-tool &&
|
||||||
|
test_config diff.guitool test-tool &&
|
||||||
|
git difftool --gui --no-prompt branch >actual &&
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
@@ -715,4 +731,12 @@ test_expect_success 'outside worktree' '
|
|||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'difftool --gui, --tool and --extcmd are mutually exclusive' '
|
||||||
|
difftool_test_setup &&
|
||||||
|
test_must_fail git difftool --gui --tool=test-tool &&
|
||||||
|
test_must_fail git difftool --gui --extcmd=cat &&
|
||||||
|
test_must_fail git difftool --tool=test-tool --extcmd=cat &&
|
||||||
|
test_must_fail git difftool --gui --tool=test-tool --extcmd=cat
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|||||||
Reference in New Issue
Block a user