add tests for git diff --submodule-summary
[git/dscho.git] / t / t4041-diff-submodule-summary.sh
blob7b016ca9f40508a42eec9495eb270e9856b45f4b
1 #!/bin/sh
3 # Copyright (c) 2008 Ping Yin
6 test_description='Summary support for submodules implemented in git diff
8 This test tries to verify the sanity of --submodule-summary option of git diff.
11 . ./test-lib.sh
13 add_file () {
14 sm=$1
15 shift
16 owd=$(pwd)
17 cd "$sm"
18 for name; do
19 echo "$name" > "$name" &&
20 git add "$name" &&
21 test_tick &&
22 git commit -m "Add $name"
23 done >/dev/null
24 git rev-parse --verify HEAD | cut -c1-7
25 cd "$owd"
27 commit_file () {
28 test_tick &&
29 git commit "$@" -m "Commit $*" >/dev/null
32 test_create_repo sm1 &&
33 add_file . foo >/dev/null
35 head1=$(add_file sm1 foo1 foo2)
37 test_expect_success 'added submodule' "
38 git add sm1 &&
39 git diff-index -p --submodule-summary HEAD >actual &&
40 diff actual - <<-EOF
41 Submodule sm1 0000000...$head1 (new submodule)
42 EOF
45 commit_file sm1 &&
46 head2=$(add_file sm1 foo3)
48 test_expect_success 'modified submodule(forward)' "
49 git diff-index -p --submodule-summary HEAD >actual &&
50 diff actual - <<-EOF
51 Submodule sm1 $head1..$head2:
52 > Add foo3
53 EOF
56 test_expect_success 'modified submodule(forward)' "
57 git diff --submodule-summary >actual &&
58 diff actual - <<-EOF
59 Submodule sm1 $head1..$head2:
60 > Add foo3
61 EOF
64 commit_file sm1 &&
65 cd sm1 &&
66 git reset --hard HEAD~2 >/dev/null &&
67 head3=$(git rev-parse --verify HEAD | cut -c1-7) &&
68 cd ..
70 test_expect_success 'modified submodule(backward)' "
71 git diff-index -p --submodule-summary HEAD >actual &&
72 diff actual - <<-EOF
73 Submodule sm1 $head2..$head3 (rewind):
74 < Add foo3
75 < Add foo2
76 EOF
79 head4=$(add_file sm1 foo4 foo5) &&
80 head4_full=$(GIT_DIR=sm1/.git git rev-parse --verify HEAD)
81 test_expect_success 'modified submodule(backward and forward)' "
82 git diff-index -p --submodule-summary HEAD >actual &&
83 diff actual - <<-EOF
84 Submodule sm1 $head2...$head4:
85 > Add foo5
86 > Add foo4
87 < Add foo3
88 < Add foo2
89 EOF
92 commit_file sm1 &&
93 mv sm1 sm1-bak &&
94 echo sm1 >sm1 &&
95 head5=$(git hash-object sm1 | cut -c1-7) &&
96 git add sm1 &&
97 rm -f sm1 &&
98 mv sm1-bak sm1
100 test_expect_success 'typechanged submodule(submodule->blob), --cached' "
101 git diff --submodule-summary --cached >actual &&
102 diff actual - <<-EOF
103 Submodule sm1 41fbea9...0000000 (submodule deleted)
104 diff --git a/sm1 b/sm1
105 new file mode 100644
106 index 0000000..9da5fb8
107 --- /dev/null
108 +++ b/sm1
109 @@ -0,0 +1 @@
110 +sm1
114 test_expect_success 'typechanged submodule(submodule->blob)' "
115 git diff --submodule-summary >actual &&
116 diff actual - <<-EOF
117 diff --git a/sm1 b/sm1
118 deleted file mode 100644
119 index 9da5fb8..0000000
120 --- a/sm1
121 +++ /dev/null
122 @@ -1 +0,0 @@
123 -sm1
124 Submodule sm1 0000000...$head4 (new submodule)
128 rm -rf sm1 &&
129 git checkout-index sm1
130 test_expect_success 'typechanged submodule(submodule->blob)' "
131 git diff-index -p --submodule-summary HEAD >actual &&
132 diff actual - <<-EOF
133 Submodule sm1 $head4...0000000 (submodule deleted)
134 diff --git a/sm1 b/sm1
135 new file mode 100644
136 index 0000000..$head5
137 --- /dev/null
138 +++ b/sm1
139 @@ -0,0 +1 @@
140 +sm1
144 rm -f sm1 &&
145 test_create_repo sm1 &&
146 head6=$(add_file sm1 foo6 foo7)
147 test_expect_success 'nonexistent commit' "
148 git diff-index -p --submodule-summary HEAD >actual &&
149 diff actual - <<-EOF
150 Submodule sm1 $head4...$head6 (commits not present)
154 commit_file
155 test_expect_success 'typechanged submodule(blob->submodule)' "
156 git diff-index -p --submodule-summary HEAD >actual &&
157 diff actual - <<-EOF
158 diff --git a/sm1 b/sm1
159 deleted file mode 100644
160 index $head5..0000000
161 --- a/sm1
162 +++ /dev/null
163 @@ -1 +0,0 @@
164 -sm1
165 Submodule sm1 0000000...$head6 (new submodule)
169 commit_file sm1 &&
170 rm -rf sm1
171 test_expect_success 'deleted submodule' "
172 git diff-index -p --submodule-summary HEAD >actual &&
173 diff actual - <<-EOF
174 Submodule sm1 $head6...0000000 (submodule deleted)
178 test_create_repo sm2 &&
179 head7=$(add_file sm2 foo8 foo9) &&
180 git add sm2
182 test_expect_success 'multiple submodules' "
183 git diff-index -p --submodule-summary HEAD >actual &&
184 diff actual - <<-EOF
185 Submodule sm1 $head6...0000000 (submodule deleted)
186 Submodule sm2 0000000...$head7 (new submodule)
190 test_expect_success 'path filter' "
191 git diff-index -p --submodule-summary HEAD sm2 >actual &&
192 diff actual - <<-EOF
193 Submodule sm2 0000000...$head7 (new submodule)
197 commit_file sm2
198 test_expect_success 'given commit' "
199 git diff-index -p --submodule-summary HEAD^ >actual &&
200 diff actual - <<-EOF
201 Submodule sm1 $head6...0000000 (submodule deleted)
202 Submodule sm2 0000000...$head7 (new submodule)
206 test_done