Charles Bailey | 05e934b | 2008-02-21 23:31:56 +0000 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | # |
| 3 | # Copyright (c) 2008 Charles Bailey |
| 4 | # |
| 5 | |
Nanako Shiraishi | 47a528a | 2008-09-03 17:59:33 +0900 | [diff] [blame] | 6 | test_description='git mergetool |
Charles Bailey | 05e934b | 2008-02-21 23:31:56 +0000 | [diff] [blame] | 7 | |
| 8 | Testing basic merge tool invocation' |
| 9 | |
| 10 | . ./test-lib.sh |
| 11 | |
Charles Bailey | b9b5078 | 2009-01-30 23:20:10 +0000 | [diff] [blame] | 12 | # All the mergetool test work by checking out a temporary branch based |
| 13 | # off 'branch1' and then merging in master and checking the results of |
| 14 | # running mergetool |
| 15 | |
Charles Bailey | 05e934b | 2008-02-21 23:31:56 +0000 | [diff] [blame] | 16 | test_expect_success 'setup' ' |
| 17 | echo master >file1 && |
Charles Bailey | b9b5078 | 2009-01-30 23:20:10 +0000 | [diff] [blame] | 18 | mkdir subdir && |
| 19 | echo master sub >subdir/file3 && |
| 20 | git add file1 subdir/file3 && |
Charles Bailey | 05e934b | 2008-02-21 23:31:56 +0000 | [diff] [blame] | 21 | git commit -m "added file1" && |
Charles Bailey | b9b5078 | 2009-01-30 23:20:10 +0000 | [diff] [blame] | 22 | |
Charles Bailey | 05e934b | 2008-02-21 23:31:56 +0000 | [diff] [blame] | 23 | git checkout -b branch1 master && |
| 24 | echo branch1 change >file1 && |
| 25 | echo branch1 newfile >file2 && |
Charles Bailey | b9b5078 | 2009-01-30 23:20:10 +0000 | [diff] [blame] | 26 | echo branch1 sub >subdir/file3 && |
| 27 | git add file1 file2 subdir/file3 && |
Charles Bailey | 05e934b | 2008-02-21 23:31:56 +0000 | [diff] [blame] | 28 | git commit -m "branch1 changes" && |
Charles Bailey | b9b5078 | 2009-01-30 23:20:10 +0000 | [diff] [blame] | 29 | |
Charles Bailey | 05e934b | 2008-02-21 23:31:56 +0000 | [diff] [blame] | 30 | git checkout master && |
| 31 | echo master updated >file1 && |
| 32 | echo master new >file2 && |
Charles Bailey | b9b5078 | 2009-01-30 23:20:10 +0000 | [diff] [blame] | 33 | echo master new sub >subdir/file3 && |
| 34 | git add file1 file2 subdir/file3 && |
| 35 | git commit -m "master updates" && |
| 36 | |
| 37 | git config merge.tool mytool && |
| 38 | git config mergetool.mytool.cmd "cat \"\$REMOTE\" >\"\$MERGED\"" && |
| 39 | git config mergetool.mytool.trustExitCode true |
Charles Bailey | 05e934b | 2008-02-21 23:31:56 +0000 | [diff] [blame] | 40 | ' |
| 41 | |
| 42 | test_expect_success 'custom mergetool' ' |
Charles Bailey | b9b5078 | 2009-01-30 23:20:10 +0000 | [diff] [blame] | 43 | git checkout -b test1 branch1 && |
Stephan Beyer | d492b31 | 2008-07-12 17:47:52 +0200 | [diff] [blame] | 44 | test_must_fail git merge master >/dev/null 2>&1 && |
Charles Bailey | b9b5078 | 2009-01-30 23:20:10 +0000 | [diff] [blame] | 45 | ( yes "" | git mergetool file1 >/dev/null 2>&1 ) && |
| 46 | ( yes "" | git mergetool file2 >/dev/null 2>&1 ) && |
| 47 | ( yes "" | git mergetool subdir/file3 >/dev/null 2>&1 ) && |
Charles Bailey | 05e934b | 2008-02-21 23:31:56 +0000 | [diff] [blame] | 48 | test "$(cat file1)" = "master updated" && |
| 49 | test "$(cat file2)" = "master new" && |
Charles Bailey | b9b5078 | 2009-01-30 23:20:10 +0000 | [diff] [blame] | 50 | test "$(cat subdir/file3)" = "master new sub" && |
Charles Bailey | 0ec7b6c | 2009-01-21 22:57:48 +0000 | [diff] [blame] | 51 | git commit -m "branch1 resolved with mergetool" |
| 52 | ' |
| 53 | |
| 54 | test_expect_success 'mergetool crlf' ' |
| 55 | git config core.autocrlf true && |
Charles Bailey | b9b5078 | 2009-01-30 23:20:10 +0000 | [diff] [blame] | 56 | git checkout -b test2 branch1 |
Charles Bailey | 0ec7b6c | 2009-01-21 22:57:48 +0000 | [diff] [blame] | 57 | test_must_fail git merge master >/dev/null 2>&1 && |
Charles Bailey | b9b5078 | 2009-01-30 23:20:10 +0000 | [diff] [blame] | 58 | ( yes "" | git mergetool file1 >/dev/null 2>&1 ) && |
| 59 | ( yes "" | git mergetool file2 >/dev/null 2>&1 ) && |
| 60 | ( yes "" | git mergetool subdir/file3 >/dev/null 2>&1 ) && |
Charles Bailey | 0ec7b6c | 2009-01-21 22:57:48 +0000 | [diff] [blame] | 61 | test "$(printf x | cat file1 -)" = "$(printf "master updated\r\nx")" && |
| 62 | test "$(printf x | cat file2 -)" = "$(printf "master new\r\nx")" && |
Charles Bailey | b9b5078 | 2009-01-30 23:20:10 +0000 | [diff] [blame] | 63 | test "$(printf x | cat subdir/file3 -)" = "$(printf "master new sub\r\nx")" && |
| 64 | git commit -m "branch1 resolved with mergetool - autocrlf" && |
| 65 | git config core.autocrlf false && |
| 66 | git reset --hard |
Charles Bailey | 05e934b | 2008-02-21 23:31:56 +0000 | [diff] [blame] | 67 | ' |
| 68 | |
Charles Bailey | ff4a185 | 2009-01-30 23:20:11 +0000 | [diff] [blame] | 69 | test_expect_success 'mergetool in subdir' ' |
Charles Bailey | b9b5078 | 2009-01-30 23:20:10 +0000 | [diff] [blame] | 70 | git checkout -b test3 branch1 |
| 71 | cd subdir && ( |
| 72 | test_must_fail git merge master >/dev/null 2>&1 && |
| 73 | ( yes "" | git mergetool file3 >/dev/null 2>&1 ) && |
| 74 | test "$(cat file3)" = "master new sub" ) |
| 75 | ' |
| 76 | |
| 77 | # We can't merge files from parent directories when running mergetool |
| 78 | # from a subdir. Is this a bug? |
| 79 | # |
| 80 | #test_expect_failure 'mergetool in subdir' ' |
| 81 | # cd subdir && ( |
| 82 | # ( yes "" | git mergetool ../file1 >/dev/null 2>&1 ) && |
| 83 | # ( yes "" | git mergetool ../file2 >/dev/null 2>&1 ) && |
| 84 | # test "$(cat ../file1)" = "master updated" && |
| 85 | # test "$(cat ../file2)" = "master new" && |
| 86 | # git commit -m "branch1 resolved with mergetool - subdir" ) |
| 87 | #' |
| 88 | |
Charles Bailey | 05e934b | 2008-02-21 23:31:56 +0000 | [diff] [blame] | 89 | test_done |