]>
Commit | Line | Data |
---|---|---|
ef0bd2e6 JS |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2005 Johannes Schindelin | |
4 | # | |
5 | ||
5be60078 | 6 | test_description='Test git rev-parse with different parent options' |
ef0bd2e6 | 7 | |
1550bb6e | 8 | GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main |
334afbc7 JS |
9 | export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME |
10 | ||
e75d2f7f | 11 | TEST_PASSES_SANITIZE_LEAK=true |
93e02b6e | 12 | TEST_CREATE_REPO_NO_TEMPLATE=1 |
ef0bd2e6 | 13 | . ./test-lib.sh |
ef0bd2e6 | 14 | |
c812be9d JN |
15 | test_cmp_rev_output () { |
16 | git rev-parse --verify "$1" >expect && | |
17 | eval "$2" >actual && | |
18 | test_cmp expect actual | |
19 | } | |
20 | ||
7495a173 FC |
21 | test_expect_success 'setup' ' |
22 | test_commit start && | |
23 | test_commit second && | |
24 | git checkout --orphan tmp && | |
25 | test_commit start2 && | |
1550bb6e | 26 | git checkout main && |
e379fdf3 | 27 | git merge -m next --allow-unrelated-histories start2 && |
e228c173 JS |
28 | test_commit final && |
29 | ||
93e02b6e | 30 | mkdir .git/info && |
e228c173 JS |
31 | test_seq 40 | |
32 | while read i | |
33 | do | |
34 | git checkout --orphan "b$i" && | |
35 | test_tick && | |
36 | git commit --allow-empty -m "$i" && | |
37 | commit=$(git rev-parse --verify HEAD) && | |
0c51d6b4 | 38 | printf "$commit " >>.git/info/grafts || return 1 |
e228c173 | 39 | done |
7495a173 | 40 | ' |
ef0bd2e6 | 41 | |
dfb1dc5c | 42 | test_expect_success 'start is valid' ' |
08fbc5d0 | 43 | git rev-parse start | grep "^$OID_REGEX$" |
dfb1dc5c FC |
44 | ' |
45 | ||
46 | test_expect_success 'start^0' ' | |
c812be9d | 47 | test_cmp_rev_output tags/start "git rev-parse start^0" |
dfb1dc5c FC |
48 | ' |
49 | ||
50 | test_expect_success 'start^1 not valid' ' | |
d8f76813 | 51 | test_must_fail git rev-parse --verify start^1 |
dfb1dc5c FC |
52 | ' |
53 | ||
54 | test_expect_success 'second^1 = second^' ' | |
c812be9d | 55 | test_cmp_rev_output second^ "git rev-parse second^1" |
dfb1dc5c FC |
56 | ' |
57 | ||
58 | test_expect_success 'final^1^1^1' ' | |
c812be9d | 59 | test_cmp_rev_output start "git rev-parse final^1^1^1" |
dfb1dc5c FC |
60 | ' |
61 | ||
62 | test_expect_success 'final^1^1^1 = final^^^' ' | |
c812be9d | 63 | test_cmp_rev_output final^^^ "git rev-parse final^1^1^1" |
dfb1dc5c FC |
64 | ' |
65 | ||
66 | test_expect_success 'final^1^2' ' | |
c812be9d | 67 | test_cmp_rev_output start2 "git rev-parse final^1^2" |
dfb1dc5c FC |
68 | ' |
69 | ||
70 | test_expect_success 'final^1^2 != final^1^1' ' | |
71 | test $(git rev-parse final^1^2) != $(git rev-parse final^1^1) | |
72 | ' | |
73 | ||
74 | test_expect_success 'final^1^3 not valid' ' | |
d8f76813 | 75 | test_must_fail git rev-parse --verify final^1^3 |
dfb1dc5c FC |
76 | ' |
77 | ||
78 | test_expect_success '--verify start2^1' ' | |
79 | test_must_fail git rev-parse --verify start2^1 | |
80 | ' | |
81 | ||
82 | test_expect_success '--verify start2^0' ' | |
83 | git rev-parse --verify start2^0 | |
84 | ' | |
85 | ||
86 | test_expect_success 'final^1^@ = final^1^1 final^1^2' ' | |
c812be9d JN |
87 | git rev-parse final^1^1 final^1^2 >expect && |
88 | git rev-parse final^1^@ >actual && | |
89 | test_cmp expect actual | |
dfb1dc5c FC |
90 | ' |
91 | ||
a2e7b04c JK |
92 | test_expect_success 'symbolic final^1^@ = final^1^1 final^1^2' ' |
93 | git rev-parse --symbolic final^1^1 final^1^2 >expect && | |
94 | git rev-parse --symbolic final^1^@ >actual && | |
95 | test_cmp expect actual | |
96 | ' | |
97 | ||
dfb1dc5c | 98 | test_expect_success 'final^1^! = final^1 ^final^1^1 ^final^1^2' ' |
c812be9d JN |
99 | git rev-parse final^1 ^final^1^1 ^final^1^2 >expect && |
100 | git rev-parse final^1^! >actual && | |
101 | test_cmp expect actual | |
dfb1dc5c FC |
102 | ' |
103 | ||
a2e7b04c JK |
104 | test_expect_success 'symbolic final^1^! = final^1 ^final^1^1 ^final^1^2' ' |
105 | git rev-parse --symbolic final^1 ^final^1^1 ^final^1^2 >expect && | |
106 | git rev-parse --symbolic final^1^! >actual && | |
107 | test_cmp expect actual | |
108 | ' | |
109 | ||
e228c173 JS |
110 | test_expect_success 'large graft octopus' ' |
111 | test_cmp_rev_output b31 "git rev-parse --verify b1^30" | |
112 | ' | |
113 | ||
dfb1dc5c FC |
114 | test_expect_success 'repack for next test' ' |
115 | git repack -a -d | |
116 | ' | |
117 | ||
7ff895c0 | 118 | test_expect_success 'short SHA-1 works' ' |
c812be9d JN |
119 | start=$(git rev-parse --verify start) && |
120 | test_cmp_rev_output start "git rev-parse ${start%?}" | |
dfb1dc5c | 121 | ' |
7ff895c0 | 122 | |
8779351d VN |
123 | # rev^- tests; we can use a simpler setup for these |
124 | ||
125 | test_expect_success 'setup for rev^- tests' ' | |
126 | test_commit one && | |
127 | test_commit two && | |
128 | test_commit three && | |
129 | ||
130 | # Merge in a branch for testing rev^- | |
131 | git checkout -b branch && | |
132 | git checkout HEAD^^ && | |
133 | git merge -m merge --no-edit --no-ff branch && | |
134 | git checkout -b merge | |
135 | ' | |
136 | ||
137 | # The merged branch has 2 commits + the merge | |
138 | test_expect_success 'rev-list --count merge^- = merge^..merge' ' | |
139 | git rev-list --count merge^..merge >expect && | |
140 | echo 3 >actual && | |
141 | test_cmp expect actual | |
142 | ' | |
143 | ||
144 | # All rev^- rev-parse tests | |
145 | ||
146 | test_expect_success 'rev-parse merge^- = merge^..merge' ' | |
147 | git rev-parse merge^..merge >expect && | |
148 | git rev-parse merge^- >actual && | |
149 | test_cmp expect actual | |
150 | ' | |
151 | ||
152 | test_expect_success 'rev-parse merge^-1 = merge^..merge' ' | |
153 | git rev-parse merge^1..merge >expect && | |
154 | git rev-parse merge^-1 >actual && | |
155 | test_cmp expect actual | |
156 | ' | |
157 | ||
158 | test_expect_success 'rev-parse merge^-2 = merge^2..merge' ' | |
159 | git rev-parse merge^2..merge >expect && | |
160 | git rev-parse merge^-2 >actual && | |
161 | test_cmp expect actual | |
162 | ' | |
163 | ||
a2e7b04c JK |
164 | test_expect_success 'symbolic merge^-1 = merge^1..merge' ' |
165 | git rev-parse --symbolic merge^1..merge >expect && | |
166 | git rev-parse --symbolic merge^-1 >actual && | |
167 | test_cmp expect actual | |
168 | ' | |
169 | ||
8779351d VN |
170 | test_expect_success 'rev-parse merge^-0 (invalid parent)' ' |
171 | test_must_fail git rev-parse merge^-0 | |
172 | ' | |
173 | ||
174 | test_expect_success 'rev-parse merge^-3 (invalid parent)' ' | |
175 | test_must_fail git rev-parse merge^-3 | |
176 | ' | |
177 | ||
178 | test_expect_success 'rev-parse merge^-^ (garbage after ^-)' ' | |
179 | test_must_fail git rev-parse merge^-^ | |
180 | ' | |
181 | ||
182 | test_expect_success 'rev-parse merge^-1x (garbage after ^-1)' ' | |
183 | test_must_fail git rev-parse merge^-1x | |
184 | ' | |
185 | ||
186 | # All rev^- rev-list tests (should be mostly the same as rev-parse; the reason | |
187 | # for the duplication is that rev-parse and rev-list use different parsers). | |
188 | ||
189 | test_expect_success 'rev-list merge^- = merge^..merge' ' | |
190 | git rev-list merge^..merge >expect && | |
191 | git rev-list merge^- >actual && | |
192 | test_cmp expect actual | |
193 | ' | |
194 | ||
195 | test_expect_success 'rev-list merge^-1 = merge^1..merge' ' | |
196 | git rev-list merge^1..merge >expect && | |
197 | git rev-list merge^-1 >actual && | |
198 | test_cmp expect actual | |
199 | ' | |
200 | ||
201 | test_expect_success 'rev-list merge^-2 = merge^2..merge' ' | |
202 | git rev-list merge^2..merge >expect && | |
203 | git rev-list merge^-2 >actual && | |
204 | test_cmp expect actual | |
205 | ' | |
206 | ||
207 | test_expect_success 'rev-list merge^-0 (invalid parent)' ' | |
208 | test_must_fail git rev-list merge^-0 | |
209 | ' | |
210 | ||
211 | test_expect_success 'rev-list merge^-3 (invalid parent)' ' | |
212 | test_must_fail git rev-list merge^-3 | |
213 | ' | |
214 | ||
215 | test_expect_success 'rev-list merge^-^ (garbage after ^-)' ' | |
216 | test_must_fail git rev-list merge^-^ | |
217 | ' | |
218 | ||
219 | test_expect_success 'rev-list merge^-1x (garbage after ^-1)' ' | |
220 | test_must_fail git rev-list merge^-1x | |
221 | ' | |
222 | ||
0ed556d3 EN |
223 | test_expect_success 'rev-parse $garbage^@ does not segfault' ' |
224 | test_must_fail git rev-parse $EMPTY_TREE^@ | |
225 | ' | |
226 | ||
227 | test_expect_success 'rev-parse $garbage...$garbage does not segfault' ' | |
228 | test_must_fail git rev-parse $EMPTY_TREE...$EMPTY_BLOB | |
229 | ' | |
230 | ||
ef0bd2e6 | 231 | test_done |