]>
Commit | Line | Data |
---|---|---|
5312ab11 JH |
1 | #!/bin/sh |
2 | ||
3 | test_description='test describe | |
4 | ||
5 | B | |
6 | .--------------o----o----o----x | |
7 | / / / | |
8 | o----o----o----o----o----. / | |
9 | \ A c / | |
10 | .------------o---o---o | |
03e8b541 | 11 | D,R e |
5312ab11 JH |
12 | ' |
13 | . ./test-lib.sh | |
14 | ||
15 | check_describe () { | |
16 | expect="$1" | |
17 | shift | |
3291fe40 | 18 | R=$(git describe "$@" 2>err.actual) |
be7bae0d | 19 | S=$? |
3291fe40 | 20 | cat err.actual >&3 |
5312ab11 | 21 | test_expect_success "describe $*" ' |
be7bae0d | 22 | test $S = 0 && |
5312ab11 JH |
23 | case "$R" in |
24 | $expect) echo happy ;; | |
25 | *) echo "Oops - $R is not $expect"; | |
26 | false ;; | |
27 | esac | |
28 | ' | |
29 | } | |
30 | ||
31 | test_expect_success setup ' | |
32 | ||
33 | test_tick && | |
3604e7c5 | 34 | echo one >file && git add file && git commit -m initial && |
5be60078 | 35 | one=$(git rev-parse HEAD) && |
5312ab11 | 36 | |
024ab976 JH |
37 | git describe --always HEAD && |
38 | ||
5312ab11 | 39 | test_tick && |
3604e7c5 | 40 | echo two >file && git add file && git commit -m second && |
5be60078 | 41 | two=$(git rev-parse HEAD) && |
5312ab11 JH |
42 | |
43 | test_tick && | |
3604e7c5 | 44 | echo three >file && git add file && git commit -m third && |
5312ab11 JH |
45 | |
46 | test_tick && | |
3604e7c5 | 47 | echo A >file && git add file && git commit -m A && |
5312ab11 | 48 | test_tick && |
3604e7c5 | 49 | git tag -a -m A A && |
5312ab11 JH |
50 | |
51 | test_tick && | |
3604e7c5 | 52 | echo c >file && git add file && git commit -m c && |
5312ab11 | 53 | test_tick && |
3604e7c5 | 54 | git tag c && |
5312ab11 JH |
55 | |
56 | git reset --hard $two && | |
57 | test_tick && | |
3604e7c5 | 58 | echo B >side && git add side && git commit -m B && |
5312ab11 | 59 | test_tick && |
3604e7c5 | 60 | git tag -a -m B B && |
5312ab11 JH |
61 | |
62 | test_tick && | |
3604e7c5 | 63 | git merge -m Merged c && |
5be60078 | 64 | merged=$(git rev-parse HEAD) && |
5312ab11 JH |
65 | |
66 | git reset --hard $two && | |
67 | test_tick && | |
3604e7c5 | 68 | echo D >another && git add another && git commit -m D && |
5312ab11 | 69 | test_tick && |
3604e7c5 | 70 | git tag -a -m D D && |
03e8b541 SP |
71 | test_tick && |
72 | git tag -a -m R R && | |
5312ab11 JH |
73 | |
74 | test_tick && | |
75 | echo DD >another && git commit -a -m another && | |
76 | ||
77 | test_tick && | |
3604e7c5 | 78 | git tag e && |
5312ab11 JH |
79 | |
80 | test_tick && | |
81 | echo DDD >another && git commit -a -m "yet another" && | |
82 | ||
83 | test_tick && | |
3604e7c5 | 84 | git merge -m Merged $merged && |
5312ab11 JH |
85 | |
86 | test_tick && | |
5be60078 | 87 | echo X >file && echo X >side && git add file side && |
3604e7c5 | 88 | git commit -m x |
5312ab11 JH |
89 | |
90 | ' | |
91 | ||
92 | check_describe A-* HEAD | |
93 | check_describe A-* HEAD^ | |
03e8b541 | 94 | check_describe R-* HEAD^^ |
5312ab11 JH |
95 | check_describe A-* HEAD^^2 |
96 | check_describe B HEAD^^2^ | |
03e8b541 | 97 | check_describe R-* HEAD^^^ |
5312ab11 | 98 | |
7e425c4f SP |
99 | check_describe c-* --tags HEAD |
100 | check_describe c-* --tags HEAD^ | |
101 | check_describe e-* --tags HEAD^^ | |
102 | check_describe c-* --tags HEAD^^2 | |
5312ab11 | 103 | check_describe B --tags HEAD^^2^ |
7a0d61bb TR |
104 | check_describe e --tags HEAD^^^ |
105 | ||
106 | check_describe heads/master --all HEAD | |
107 | check_describe tags/c-* --all HEAD^ | |
108 | check_describe tags/e --all HEAD^^^ | |
5312ab11 | 109 | |
518120e3 | 110 | check_describe B-0-* --long HEAD^^2^ |
4d4c3e1c | 111 | check_describe A-3-* --long HEAD^^2 |
518120e3 | 112 | |
e00dd1e9 MC |
113 | check_describe c-7-* --tags |
114 | check_describe e-3-* --first-parent --tags | |
115 | ||
2bd07065 SG |
116 | test_expect_success 'describe --contains defaults to HEAD without commit-ish' ' |
117 | echo "A^0" >expect && | |
118 | git checkout A && | |
119 | test_when_finished "git checkout -" && | |
120 | git describe --contains >actual && | |
121 | test_cmp expect actual | |
122 | ' | |
123 | ||
81dc223d SP |
124 | : >err.expect |
125 | check_describe A --all A^0 | |
126 | test_expect_success 'no warning was displayed for A' ' | |
127 | test_cmp err.expect err.actual | |
128 | ' | |
129 | ||
3291fe40 SP |
130 | test_expect_success 'rename tag A to Q locally' ' |
131 | mv .git/refs/tags/A .git/refs/tags/Q | |
132 | ' | |
133 | cat - >err.expect <<EOF | |
134 | warning: tag 'A' is really 'Q' here | |
135 | EOF | |
136 | check_describe A-* HEAD | |
b3e1900a JH |
137 | test_expect_success 'warning was displayed for Q' ' |
138 | test_i18ncmp err.expect err.actual | |
3291fe40 SP |
139 | ' |
140 | test_expect_success 'rename tag Q back to A' ' | |
141 | mv .git/refs/tags/Q .git/refs/tags/A | |
142 | ' | |
143 | ||
d1b28f51 SP |
144 | test_expect_success 'pack tag refs' 'git pack-refs' |
145 | check_describe A-* HEAD | |
146 | ||
9f67d2e8 JP |
147 | check_describe "A-*[0-9a-f]" --dirty |
148 | ||
149 | test_expect_success 'set-up dirty work tree' ' | |
150 | echo >>file | |
151 | ' | |
152 | ||
153 | check_describe "A-*[0-9a-f]-dirty" --dirty | |
154 | ||
155 | check_describe "A-*[0-9a-f].mod" --dirty=.mod | |
156 | ||
157 | test_expect_success 'describe --dirty HEAD' ' | |
158 | test_must_fail git describe --dirty HEAD | |
159 | ' | |
160 | ||
4ed19a3c MD |
161 | test_expect_success 'set-up matching pattern tests' ' |
162 | git tag -a -m test-annotated test-annotated && | |
163 | echo >>file && | |
164 | test_tick && | |
165 | git commit -a -m "one more" && | |
166 | git tag test1-lightweight && | |
167 | echo >>file && | |
168 | test_tick && | |
169 | git commit -a -m "yet another" && | |
170 | git tag test2-lightweight && | |
171 | echo >>file && | |
172 | test_tick && | |
173 | git commit -a -m "even more" | |
174 | ||
175 | ' | |
176 | ||
177 | check_describe "test-annotated-*" --match="test-*" | |
178 | ||
179 | check_describe "test1-lightweight-*" --tags --match="test1-*" | |
180 | ||
181 | check_describe "test2-lightweight-*" --tags --match="test2-*" | |
182 | ||
14d4642e SP |
183 | check_describe "test2-lightweight-*" --long --tags --match="test2-*" HEAD^ |
184 | ||
43f8080e JK |
185 | check_describe "test1-lightweight-*" --long --tags --match="test1-*" --match="test2-*" HEAD^ |
186 | ||
187 | check_describe "test2-lightweight-*" --long --tags --match="test1-*" --no-match --match="test2-*" HEAD^ | |
188 | ||
118aa4ac JH |
189 | test_expect_success 'name-rev with exact tags' ' |
190 | echo A >expect && | |
191 | tag_object=$(git rev-parse refs/tags/A) && | |
192 | git name-rev --tags --name-only $tag_object >actual && | |
193 | test_cmp expect actual && | |
194 | ||
195 | echo "A^0" >expect && | |
196 | tagged_commit=$(git rev-parse "refs/tags/A^0") && | |
197 | git name-rev --tags --name-only $tagged_commit >actual && | |
198 | test_cmp expect actual | |
199 | ' | |
200 | ||
adfc1857 JH |
201 | test_expect_success 'describe --contains with the exact tags' ' |
202 | echo "A^0" >expect && | |
203 | tag_object=$(git rev-parse refs/tags/A) && | |
204 | git describe --contains $tag_object >actual && | |
205 | test_cmp expect actual && | |
206 | ||
207 | echo "A^0" >expect && | |
208 | tagged_commit=$(git rev-parse "refs/tags/A^0") && | |
209 | git describe --contains $tagged_commit >actual && | |
210 | test_cmp expect actual | |
211 | ' | |
212 | ||
43f8080e JK |
213 | test_expect_success 'describe --contains and --match' ' |
214 | echo "A^0" >expect && | |
215 | tagged_commit=$(git rev-parse "refs/tags/A^0") && | |
216 | test_must_fail git describe --contains --match="B" $tagged_commit && | |
217 | git describe --contains --match="B" --match="A" $tagged_commit >actual && | |
218 | test_cmp expect actual | |
219 | ' | |
220 | ||
77d21f29 JK |
221 | test_expect_success 'describe --exclude' ' |
222 | echo "c~1" >expect && | |
223 | tagged_commit=$(git rev-parse "refs/tags/A^0") && | |
224 | test_must_fail git describe --contains --match="B" $tagged_commit && | |
225 | git describe --contains --match="?" --exclude="A" $tagged_commit >actual && | |
226 | test_cmp expect actual | |
227 | ' | |
228 | ||
43f8080e JK |
229 | test_expect_success 'describe --contains and --no-match' ' |
230 | echo "A^0" >expect && | |
231 | tagged_commit=$(git rev-parse "refs/tags/A^0") && | |
232 | git describe --contains --match="B" --no-match $tagged_commit >actual && | |
233 | test_cmp expect actual | |
234 | ' | |
235 | ||
b0176ce6 SB |
236 | test_expect_success 'setup and absorb a submodule' ' |
237 | test_create_repo sub1 && | |
238 | test_commit -C sub1 initial && | |
239 | git submodule add ./sub1 && | |
240 | git submodule absorbgitdirs && | |
241 | git commit -a -m "add submodule" && | |
242 | git describe --dirty >expect && | |
243 | git describe --broken >out && | |
244 | test_cmp expect out | |
245 | ' | |
246 | ||
247 | test_expect_success 'describe chokes on severly broken submodules' ' | |
248 | mv .git/modules/sub1/ .git/modules/sub_moved && | |
249 | test_must_fail git describe --dirty | |
250 | ' | |
251 | test_expect_success 'describe ignoring a borken submodule' ' | |
252 | git describe --broken >out && | |
253 | grep broken out | |
254 | ' | |
255 | ||
5312ab11 | 256 | test_done |