t4255: test am submodule with diff.submodule

git am will break when using diff.submodule=log; add some test cases to illustrate this breakage as simply as possible. There are currently two ways this can fail: * With errors ("unrecognized input"), if only change * Silently (no submodule change), if other files change Test for both conditions and ensure without diff.submodule this works. Helped-by: Eric Sunshine <sunshine@sunshineco.com> Helped-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Doug Kelly <dougk.ff7@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Doug Kelly committed Jan 7, 2015 at 14:32 UTC fe7611c46f34cc4164a719a94e88e13ca5c978b1
1 file changed +72
t/t4255-am-submodule.sh
+72
@@ -18,4 +18,76 @@ am_3way () {
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_failure 'diff.submodule=log' '
84 + test_config diff.submodule log &&
85 + run_test $SECOND first-submodule
86 +'
87 +
88 +test_expect_failure 'diff.submodule=log with extra file' '
89 + test_config diff.submodule log &&
90 + run_test $THIRD second-submodule
91 +'
92 +
93 test_done