@@ -143,6 +143,90 @@ setup() {
143143 unstub git
144144}
145145
146+ @test " Fetches pull request merge refspec when BUILDKITE_PULL_REQUEST_USING_MERGE_REFSPEC is true" {
147+ export BUILDKITE_PULL_REQUEST_USING_MERGE_REFSPEC=" true"
148+ export BUILDKITE_PULL_REQUEST=" 123"
149+ export BUILDKITE_COMMIT=" HEAD"
150+
151+ stub ssh-keyscan " * : echo 'keyscan'"
152+ stub git " clean * : echo 'git clean'"
153+ stub git " fetch --depth 1 origin refs/pull/123/merge : echo 'git fetch merge refspec'"
154+ stub git " sparse-checkout set * * : echo 'git sparse-checkout'"
155+ stub git " checkout FETCH_HEAD : echo 'checkout fetch_head'"
156+
157+ run " $PWD " /hooks/checkout
158+
159+ assert_success
160+ assert_output --partial ' git fetch merge refspec'
161+ assert_output --partial ' checkout fetch_head'
162+
163+ unstub ssh-keyscan
164+ unstub git
165+ }
166+
167+ @test " Fetches pull request merge refspec with known commit" {
168+ export BUILDKITE_PULL_REQUEST_USING_MERGE_REFSPEC=" true"
169+ export BUILDKITE_PULL_REQUEST=" 456"
170+ export BUILDKITE_COMMIT=" abc123"
171+
172+ stub ssh-keyscan " * : echo 'keyscan'"
173+ stub git " clean * : echo 'git clean'"
174+ stub git " fetch --depth 1 origin refs/pull/456/merge : echo 'git fetch merge refspec'"
175+ stub git " sparse-checkout set * * : echo 'git sparse-checkout'"
176+ stub git " checkout FETCH_HEAD : echo 'checkout fetch_head'"
177+
178+ run " $PWD " /hooks/checkout
179+
180+ assert_success
181+ assert_output --partial ' git fetch merge refspec'
182+ assert_output --partial ' checkout fetch_head'
183+
184+ unstub ssh-keyscan
185+ unstub git
186+ }
187+
188+ @test " Does not use merge refspec when BUILDKITE_PULL_REQUEST is false" {
189+ export BUILDKITE_PULL_REQUEST_USING_MERGE_REFSPEC=" true"
190+ export BUILDKITE_PULL_REQUEST=" false"
191+ export BUILDKITE_COMMIT=" abc123"
192+
193+ stub ssh-keyscan " * : echo 'keyscan'"
194+ stub git " clean * : echo 'git clean'"
195+ stub git " fetch --depth 1 origin abc123 : echo 'git fetch commit'"
196+ stub git " sparse-checkout set * * : echo 'git sparse-checkout'"
197+ stub git " checkout abc123 : echo 'checkout commit'"
198+
199+ run " $PWD " /hooks/checkout
200+
201+ assert_success
202+ assert_output --partial ' git fetch commit'
203+ assert_output --partial ' checkout commit'
204+
205+ unstub ssh-keyscan
206+ unstub git
207+ }
208+
209+ @test " Does not use merge refspec when flag is not set" {
210+ export BUILDKITE_PULL_REQUEST=" 123"
211+ export BUILDKITE_COMMIT=" abc123"
212+ unset BUILDKITE_PULL_REQUEST_USING_MERGE_REFSPEC
213+
214+ stub ssh-keyscan " * : echo 'keyscan'"
215+ stub git " clean * : echo 'git clean'"
216+ stub git " fetch --depth 1 origin abc123 : echo 'git fetch commit'"
217+ stub git " sparse-checkout set * * : echo 'git sparse-checkout'"
218+ stub git " checkout abc123 : echo 'checkout commit'"
219+
220+ run " $PWD " /hooks/checkout
221+
222+ assert_success
223+ assert_output --partial ' git fetch commit'
224+ assert_output --partial ' checkout commit'
225+
226+ unstub ssh-keyscan
227+ unstub git
228+ }
229+
146230@test " Clean checkout handles repository without HEAD gracefully" {
147231 export BUILDKITE_PLUGIN_SPARSE_CHECKOUT_CLEAN_CHECKOUT=" true"
148232
0 commit comments