]> git.ipfire.org Git - thirdparty/git.git/blame - t/t4108-apply-threeway.sh
apply: register conflicted stages to the index
[thirdparty/git.git] / t / t4108-apply-threeway.sh
CommitLineData
4f4a6cb9
JH
1#!/bin/sh
2
3test_description='git apply --3way'
4
5. ./test-lib.sh
6
7create_file () {
8 for i
9 do
10 echo "$i"
11 done
12}
13
14sanitize_conflicted_diff () {
15 sed -e '
16 /^index /d
17 s/^\(+[<>][<>][<>][<>]*\) .*/\1/
18 '
19}
20
21test_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
43test_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
55test_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
78test_done