Merge branch 'jk/rebase-config-insn-fmt-docfix' into maint
[git] / t / t4255-am-submodule.sh
1 #!/bin/sh
2
3 test_description='git am handling submodules'
4
5 . ./test-lib.sh
6 . "$TEST_DIRECTORY"/lib-submodule-update.sh
7
8 am () {
9         git format-patch --stdout --ignore-submodules=dirty "..$1" | git am -
10 }
11
12 test_submodule_switch "am"
13
14 am_3way () {
15         git format-patch --stdout --ignore-submodules=dirty "..$1" | git am --3way -
16 }
17
18 KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1
19 test_submodule_switch "am_3way"
20
21 test_expect_success 'setup diff.submodule' '
22         test_commit one &&
23         INITIAL=$(git rev-parse HEAD) &&
24
25         git init submodule &&
26         (
27                 cd submodule &&
28                 test_commit two &&
29                 git rev-parse HEAD >../initial-submodule
30         ) &&
31         git submodule add ./submodule &&
32         git commit -m first &&
33
34         (
35                 cd submodule &&
36                 test_commit three &&
37                 git rev-parse HEAD >../first-submodule
38         ) &&
39         git add submodule &&
40         git commit -m second &&
41         SECOND=$(git rev-parse HEAD) &&
42
43         (
44                 cd submodule &&
45                 git mv two.t four.t &&
46                 git commit -m "second submodule" &&
47                 git rev-parse HEAD >../second-submodule
48         ) &&
49         test_commit four &&
50         git add submodule &&
51         git commit --amend --no-edit &&
52         THIRD=$(git rev-parse HEAD) &&
53         git submodule update --init
54 '
55
56 run_test() {
57         START_COMMIT=$1 &&
58         EXPECT=$2 &&
59         # Abort any merges in progress: the previous
60         # test may have failed, and we should clean up.
61         test_might_fail git am --abort &&
62         git reset --hard $START_COMMIT &&
63         rm -f *.patch &&
64         git format-patch -1 &&
65         git reset --hard $START_COMMIT^ &&
66         git submodule update &&
67         git am *.patch &&
68         git submodule update &&
69         git -C submodule rev-parse HEAD >actual &&
70         test_cmp $EXPECT actual
71 }
72
73 test_expect_success 'diff.submodule unset' '
74         test_unconfig diff.submodule &&
75         run_test $SECOND first-submodule
76 '
77
78 test_expect_success 'diff.submodule unset with extra file' '
79         test_unconfig diff.submodule &&
80         run_test $THIRD second-submodule
81 '
82
83 test_expect_success 'diff.submodule=log' '
84         test_config diff.submodule log &&
85         run_test $SECOND first-submodule
86 '
87
88 test_expect_success 'diff.submodule=log with extra file' '
89         test_config diff.submodule log &&
90         run_test $THIRD second-submodule
91 '
92
93 test_done