]>
Commit | Line | Data |
---|---|---|
4f4a6cb9 JH |
1 | #!/bin/sh |
2 | ||
3 | test_description='git apply --3way' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
7 | create_file () { | |
8 | for i | |
9 | do | |
10 | echo "$i" | |
11 | done | |
12 | } | |
13 | ||
14 | sanitize_conflicted_diff () { | |
15 | sed -e ' | |
16 | /^index /d | |
17 | s/^\(+[<>][<>][<>][<>]*\) .*/\1/ | |
18 | ' | |
19 | } | |
20 | ||
21 | test_expect_success setup ' | |
22 | test_tick && | |
23 | create_file >one 1 2 3 4 5 6 7 && | |
24 | cat one >two && | |
25 | git add one two && | |
26 | git commit -m initial && | |
27 | ||
28 | git branch side && | |
29 | ||
30 | test_tick && | |
31 | create_file >one 1 two 3 4 5 six 7 && | |
32 | create_file >two 1 two 3 4 5 6 7 && | |
33 | git commit -a -m master && | |
34 | ||
35 | git checkout side && | |
36 | create_file >one 1 2 3 4 five 6 7 && | |
37 | create_file >two 1 2 3 4 five 6 7 && | |
38 | git commit -a -m side && | |
39 | ||
40 | git checkout master | |
41 | ' | |
42 | ||
43 | test_expect_success 'apply without --3way' ' | |
44 | git diff side^ side >P.diff && | |
45 | ||
46 | # should fail to apply | |
47 | git reset --hard && | |
48 | git checkout master^0 && | |
49 | test_must_fail git apply --index P.diff && | |
50 | # should leave things intact | |
51 | git diff-files --exit-code && | |
52 | git diff-index --exit-code --cached HEAD | |
53 | ' | |
54 | ||
55 | test_expect_success 'apply with --3way' ' | |
56 | # Merging side should be similar to applying this patch | |
57 | git diff ...side >P.diff && | |
58 | ||
59 | # The corresponding conflicted merge | |
60 | git reset --hard && | |
61 | git checkout master^0 && | |
62 | test_must_fail git merge --no-commit side && | |
63 | git ls-files -s >expect.ls && | |
64 | git diff HEAD | sanitize_conflicted_diff >expect.diff && | |
65 | ||
66 | # should fail to apply | |
67 | git reset --hard && | |
68 | git checkout master^0 && | |
69 | test_must_fail git apply --index --3way P.diff && | |
70 | git ls-files -s >actual.ls && | |
71 | git diff HEAD | sanitize_conflicted_diff >actual.diff && | |
72 | ||
73 | # The result should resemble the corresponding merge | |
74 | test_cmp expect.ls actual.ls && | |
75 | test_cmp expect.diff actual.diff | |
76 | ' | |
77 | ||
78 | test_done |