]>
Commit | Line | Data |
---|---|---|
ca2cedba PH |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2009 Red Hat, Inc. | |
4 | # | |
5 | ||
6 | test_description='Test updating submodules | |
7 | ||
8 | This test verifies that "git submodule update" detaches the HEAD of the | |
42b49178 | 9 | submodule and "git submodule update --rebase/--merge" does not detach the HEAD. |
ca2cedba PH |
10 | ' |
11 | ||
12 | . ./test-lib.sh | |
13 | ||
14 | ||
15 | compare_head() | |
16 | { | |
5d59a401 MO |
17 | sha_master=`git rev-list --max-count=1 master` |
18 | sha_head=`git rev-list --max-count=1 HEAD` | |
ca2cedba PH |
19 | |
20 | test "$sha_master" = "$sha_head" | |
21 | } | |
22 | ||
23 | ||
24 | test_expect_success 'setup a submodule tree' ' | |
25 | echo file > file && | |
26 | git add file && | |
27 | test_tick && | |
4bf9dd97 | 28 | git commit -m upstream && |
ca2cedba PH |
29 | git clone . super && |
30 | git clone super submodule && | |
c9c8c56e SB |
31 | git clone super rebasing && |
32 | git clone super merging && | |
ca2cedba PH |
33 | (cd super && |
34 | git submodule add ../submodule submodule && | |
35 | test_tick && | |
36 | git commit -m "submodule" && | |
37 | git submodule init submodule | |
38 | ) && | |
39 | (cd submodule && | |
40 | echo "line2" > file && | |
41 | git add file && | |
42 | git commit -m "Commit 2" | |
43 | ) && | |
44 | (cd super && | |
45 | (cd submodule && | |
46 | git pull --rebase origin | |
47 | ) && | |
48 | git add submodule && | |
49 | git commit -m "submodule update" | |
c9c8c56e SB |
50 | ) && |
51 | (cd super && | |
52 | git submodule add ../rebasing rebasing && | |
53 | test_tick && | |
54 | git commit -m "rebasing" | |
55 | ) && | |
56 | (cd super && | |
57 | git submodule add ../merging merging && | |
58 | test_tick && | |
59 | git commit -m "rebasing" | |
ca2cedba PH |
60 | ) |
61 | ' | |
62 | ||
63 | test_expect_success 'submodule update detaching the HEAD ' ' | |
64 | (cd super/submodule && | |
65 | git reset --hard HEAD~1 | |
66 | ) && | |
67 | (cd super && | |
68 | (cd submodule && | |
69 | compare_head | |
70 | ) && | |
71 | git submodule update submodule && | |
72 | cd submodule && | |
73 | ! compare_head | |
74 | ) | |
75 | ' | |
76 | ||
77 | test_expect_success 'submodule update --rebase staying on master' ' | |
78 | (cd super/submodule && | |
79 | git checkout master | |
80 | ) && | |
81 | (cd super && | |
82 | (cd submodule && | |
83 | compare_head | |
84 | ) && | |
85 | git submodule update --rebase submodule && | |
86 | cd submodule && | |
87 | compare_head | |
88 | ) | |
89 | ' | |
90 | ||
42b49178 JH |
91 | test_expect_success 'submodule update --merge staying on master' ' |
92 | (cd super/submodule && | |
93 | git reset --hard HEAD~1 | |
94 | ) && | |
95 | (cd super && | |
96 | (cd submodule && | |
97 | compare_head | |
98 | ) && | |
99 | git submodule update --merge submodule && | |
100 | cd submodule && | |
101 | compare_head | |
102 | ) | |
103 | ' | |
104 | ||
32948425 | 105 | test_expect_success 'submodule update - rebase in .git/config' ' |
ca2cedba | 106 | (cd super && |
32948425 | 107 | git config submodule.submodule.update rebase |
ca2cedba PH |
108 | ) && |
109 | (cd super/submodule && | |
110 | git reset --hard HEAD~1 | |
111 | ) && | |
112 | (cd super && | |
113 | (cd submodule && | |
114 | compare_head | |
115 | ) && | |
116 | git submodule update submodule && | |
117 | cd submodule && | |
118 | compare_head | |
119 | ) | |
120 | ' | |
121 | ||
32948425 | 122 | test_expect_success 'submodule update - checkout in .git/config but --rebase given' ' |
ca2cedba | 123 | (cd super && |
32948425 | 124 | git config submodule.submodule.update checkout |
ca2cedba PH |
125 | ) && |
126 | (cd super/submodule && | |
127 | git reset --hard HEAD~1 | |
128 | ) && | |
129 | (cd super && | |
130 | (cd submodule && | |
131 | compare_head | |
132 | ) && | |
133 | git submodule update --rebase submodule && | |
134 | cd submodule && | |
135 | compare_head | |
136 | ) | |
137 | ' | |
138 | ||
42b49178 JH |
139 | test_expect_success 'submodule update - merge in .git/config' ' |
140 | (cd super && | |
141 | git config submodule.submodule.update merge | |
142 | ) && | |
143 | (cd super/submodule && | |
144 | git reset --hard HEAD~1 | |
145 | ) && | |
146 | (cd super && | |
147 | (cd submodule && | |
148 | compare_head | |
149 | ) && | |
150 | git submodule update submodule && | |
151 | cd submodule && | |
152 | compare_head | |
153 | ) | |
154 | ' | |
155 | ||
156 | test_expect_success 'submodule update - checkout in .git/config but --merge given' ' | |
157 | (cd super && | |
158 | git config submodule.submodule.update checkout | |
159 | ) && | |
160 | (cd super/submodule && | |
161 | git reset --hard HEAD~1 | |
162 | ) && | |
163 | (cd super && | |
164 | (cd submodule && | |
165 | compare_head | |
166 | ) && | |
167 | git submodule update --merge submodule && | |
168 | cd submodule && | |
169 | compare_head | |
170 | ) | |
171 | ' | |
172 | ||
32948425 | 173 | test_expect_success 'submodule update - checkout in .git/config' ' |
ca2cedba | 174 | (cd super && |
32948425 | 175 | git config submodule.submodule.update checkout |
ca2cedba PH |
176 | ) && |
177 | (cd super/submodule && | |
178 | git reset --hard HEAD^ | |
179 | ) && | |
180 | (cd super && | |
181 | (cd submodule && | |
182 | compare_head | |
183 | ) && | |
184 | git submodule update submodule && | |
185 | cd submodule && | |
186 | ! compare_head | |
187 | ) | |
188 | ' | |
189 | ||
190 | test_expect_success 'submodule init picks up rebase' ' | |
191 | (cd super && | |
c9c8c56e | 192 | git config -f .gitmodules submodule.rebasing.update rebase && |
ca2cedba | 193 | git submodule init rebasing && |
c9c8c56e | 194 | test "rebase" = "$(git config submodule.rebasing.update)" |
ca2cedba PH |
195 | ) |
196 | ' | |
197 | ||
42b49178 JH |
198 | test_expect_success 'submodule init picks up merge' ' |
199 | (cd super && | |
c9c8c56e | 200 | git config -f .gitmodules submodule.merging.update merge && |
42b49178 | 201 | git submodule init merging && |
c9c8c56e | 202 | test "merge" = "$(git config submodule.merging.update)" |
42b49178 JH |
203 | ) |
204 | ' | |
205 | ||
b200021e SO |
206 | test_expect_success 'submodule update --merge - ignores --merge for new submodules' ' |
207 | (cd super && | |
208 | rm -rf submodule && | |
209 | git submodule update submodule && | |
210 | git status -s submodule >expect && | |
211 | rm -rf submodule && | |
212 | git submodule update --merge submodule && | |
213 | git status -s submodule >actual && | |
214 | test_cmp expect actual | |
215 | ) | |
216 | ' | |
217 | ||
218 | test_expect_success 'submodule update --rebase - ignores --rebase for new submodules' ' | |
219 | (cd super && | |
220 | rm -rf submodule && | |
221 | git submodule update submodule && | |
222 | git status -s submodule >expect && | |
223 | rm -rf submodule && | |
224 | git submodule update --rebase submodule && | |
225 | git status -s submodule >actual && | |
226 | test_cmp expect actual | |
227 | ) | |
228 | ' | |
229 | ||
230 | test_expect_success 'submodule update ignores update=merge config for new submodules' ' | |
231 | (cd super && | |
232 | rm -rf submodule && | |
233 | git submodule update submodule && | |
234 | git status -s submodule >expect && | |
235 | rm -rf submodule && | |
236 | git config submodule.submodule.update merge && | |
237 | git submodule update submodule && | |
238 | git status -s submodule >actual && | |
239 | git config --unset submodule.submodule.update && | |
240 | test_cmp expect actual | |
241 | ) | |
242 | ' | |
243 | ||
244 | test_expect_success 'submodule update ignores update=rebase config for new submodules' ' | |
245 | (cd super && | |
246 | rm -rf submodule && | |
247 | git submodule update submodule && | |
248 | git status -s submodule >expect && | |
249 | rm -rf submodule && | |
250 | git config submodule.submodule.update rebase && | |
251 | git submodule update submodule && | |
252 | git status -s submodule >actual && | |
253 | git config --unset submodule.submodule.update && | |
254 | test_cmp expect actual | |
255 | ) | |
256 | ' | |
257 | ||
ca2cedba | 258 | test_done |