From 0ec7b6c26dad51f690cd985d4a5357634123c4b7 Mon Sep 17 00:00:00 2001 From: Charles Bailey Date: Wed, 21 Jan 2009 22:57:48 +0000 Subject: mergetool: respect autocrlf by using checkout-index Previously, git mergetool used cat-file which does not perform git to worktree conversion. This changes mergetool to use git checkout-index instead which means that the temporary files used for mergetool use the correct line endings for the platform. Signed-off-by: Charles Bailey Signed-off-by: Junio C Hamano --- t/t7610-mergetool.sh | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 't') diff --git a/t/t7610-mergetool.sh b/t/t7610-mergetool.sh index 09fa5f115..edb6a57b7 100755 --- a/t/t7610-mergetool.sh +++ b/t/t7610-mergetool.sh @@ -34,13 +34,24 @@ test_expect_success 'custom mergetool' ' git config merge.tool mytool && git config mergetool.mytool.cmd "cat \"\$REMOTE\" >\"\$MERGED\"" && git config mergetool.mytool.trustExitCode true && - git checkout branch1 && + git checkout branch1 && test_must_fail git merge master >/dev/null 2>&1 && ( yes "" | git mergetool file1>/dev/null 2>&1 ) && ( yes "" | git mergetool file2>/dev/null 2>&1 ) && test "$(cat file1)" = "master updated" && test "$(cat file2)" = "master new" && - git commit -m "branch1 resolved with mergetool" + git commit -m "branch1 resolved with mergetool" +' + +test_expect_success 'mergetool crlf' ' + git config core.autocrlf true && + git reset --hard HEAD^ + test_must_fail git merge master >/dev/null 2>&1 && + ( yes "" | git mergetool file1>/dev/null 2>&1 ) && + ( yes "" | git mergetool file2>/dev/null 2>&1 ) && + test "$(printf x | cat file1 -)" = "$(printf "master updated\r\nx")" && + test "$(printf x | cat file2 -)" = "$(printf "master new\r\nx")" && + git commit -m "branch1 resolved with mergetool - autocrlf" ' test_done -- cgit v1.2.1 From b9b5078ece4b22c14a36f20bd9dce88d2f350a36 Mon Sep 17 00:00:00 2001 From: Charles Bailey Date: Fri, 30 Jan 2009 23:20:10 +0000 Subject: mergetool: Add a test for running mergetool in a sub-directory Signed-off-by: Charles Bailey Signed-off-by: Junio C Hamano --- t/t7610-mergetool.sh | 70 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 51 insertions(+), 19 deletions(-) (limited to 't') diff --git a/t/t7610-mergetool.sh b/t/t7610-mergetool.sh index edb6a57b7..ee8589e8c 100755 --- a/t/t7610-mergetool.sh +++ b/t/t7610-mergetool.sh @@ -9,49 +9,81 @@ Testing basic merge tool invocation' . ./test-lib.sh +# All the mergetool test work by checking out a temporary branch based +# off 'branch1' and then merging in master and checking the results of +# running mergetool + test_expect_success 'setup' ' echo master >file1 && - git add file1 && + mkdir subdir && + echo master sub >subdir/file3 && + git add file1 subdir/file3 && git commit -m "added file1" && + git checkout -b branch1 master && echo branch1 change >file1 && echo branch1 newfile >file2 && - git add file1 file2 && + echo branch1 sub >subdir/file3 && + git add file1 file2 subdir/file3 && git commit -m "branch1 changes" && - git checkout -b branch2 master && - echo branch2 change >file1 && - echo branch2 newfile >file2 && - git add file1 file2 && - git commit -m "branch2 changes" && + git checkout master && echo master updated >file1 && echo master new >file2 && - git add file1 file2 && - git commit -m "master updates" -' + echo master new sub >subdir/file3 && + git add file1 file2 subdir/file3 && + git commit -m "master updates" && -test_expect_success 'custom mergetool' ' git config merge.tool mytool && git config mergetool.mytool.cmd "cat \"\$REMOTE\" >\"\$MERGED\"" && - git config mergetool.mytool.trustExitCode true && - git checkout branch1 && + git config mergetool.mytool.trustExitCode true +' + +test_expect_success 'custom mergetool' ' + git checkout -b test1 branch1 && test_must_fail git merge master >/dev/null 2>&1 && - ( yes "" | git mergetool file1>/dev/null 2>&1 ) && - ( yes "" | git mergetool file2>/dev/null 2>&1 ) && + ( yes "" | git mergetool file1 >/dev/null 2>&1 ) && + ( yes "" | git mergetool file2 >/dev/null 2>&1 ) && + ( yes "" | git mergetool subdir/file3 >/dev/null 2>&1 ) && test "$(cat file1)" = "master updated" && test "$(cat file2)" = "master new" && + test "$(cat subdir/file3)" = "master new sub" && git commit -m "branch1 resolved with mergetool" ' test_expect_success 'mergetool crlf' ' git config core.autocrlf true && - git reset --hard HEAD^ + git checkout -b test2 branch1 test_must_fail git merge master >/dev/null 2>&1 && - ( yes "" | git mergetool file1>/dev/null 2>&1 ) && - ( yes "" | git mergetool file2>/dev/null 2>&1 ) && + ( yes "" | git mergetool file1 >/dev/null 2>&1 ) && + ( yes "" | git mergetool file2 >/dev/null 2>&1 ) && + ( yes "" | git mergetool subdir/file3 >/dev/null 2>&1 ) && test "$(printf x | cat file1 -)" = "$(printf "master updated\r\nx")" && test "$(printf x | cat file2 -)" = "$(printf "master new\r\nx")" && - git commit -m "branch1 resolved with mergetool - autocrlf" + test "$(printf x | cat subdir/file3 -)" = "$(printf "master new sub\r\nx")" && + git commit -m "branch1 resolved with mergetool - autocrlf" && + git config core.autocrlf false && + git reset --hard +' + +test_expect_failure 'mergetool in subdir' ' + git checkout -b test3 branch1 + cd subdir && ( + test_must_fail git merge master >/dev/null 2>&1 && + ( yes "" | git mergetool file3 >/dev/null 2>&1 ) && + test "$(cat file3)" = "master new sub" ) ' +# We can't merge files from parent directories when running mergetool +# from a subdir. Is this a bug? +# +#test_expect_failure 'mergetool in subdir' ' +# cd subdir && ( +# ( yes "" | git mergetool ../file1 >/dev/null 2>&1 ) && +# ( yes "" | git mergetool ../file2 >/dev/null 2>&1 ) && +# test "$(cat ../file1)" = "master updated" && +# test "$(cat ../file2)" = "master new" && +# git commit -m "branch1 resolved with mergetool - subdir" ) +#' + test_done -- cgit v1.2.1 From ff4a18552aa48f3227e2465072951dacc34aee9b Mon Sep 17 00:00:00 2001 From: Charles Bailey Date: Fri, 30 Jan 2009 23:20:11 +0000 Subject: mergetool: fix running mergetool in sub-directories The previous fix to mergetool to use checkout-index instead of cat-file broke running mergetool anywhere except the root of the repository. This fixes it by using the correct relative paths for temporary files and index paths. Signed-off-by: Charles Bailey Signed-off-by: Junio C Hamano --- t/t7610-mergetool.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 't') diff --git a/t/t7610-mergetool.sh b/t/t7610-mergetool.sh index ee8589e8c..e768c3eb2 100755 --- a/t/t7610-mergetool.sh +++ b/t/t7610-mergetool.sh @@ -66,7 +66,7 @@ test_expect_success 'mergetool crlf' ' git reset --hard ' -test_expect_failure 'mergetool in subdir' ' +test_expect_success 'mergetool in subdir' ' git checkout -b test3 branch1 cd subdir && ( test_must_fail git merge master >/dev/null 2>&1 && -- cgit v1.2.1