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