@@ -113,6 +113,63 @@ export class AzureDevOpsApi implements Disposable {
113113 }
114114 }
115115
116+ @debug < AzureDevOpsApi [ 'getPullRequestForCommit' ] > ( { args : { 0 : p => p . name , 1 : '<token>' } } )
117+ async getPullRequestForCommit (
118+ provider : Provider ,
119+ token : string ,
120+ owner : string ,
121+ repo : string ,
122+ rev : string ,
123+ baseUrl : string ,
124+ _options ?: {
125+ avatarSize ?: number ;
126+ } ,
127+ cancellation ?: CancellationToken ,
128+ ) : Promise < PullRequest | undefined > {
129+ const scope = getLogScope ( ) ;
130+ const [ projectName , _ , repoName ] = repo . split ( '/' ) ;
131+ try {
132+ const prResult = await this . request < { results : Record < string , AzurePullRequest [ ] > [ ] } > (
133+ provider ,
134+ token ,
135+ baseUrl ,
136+ `${ owner } /${ projectName } /_apis/git/repositories/${ repoName } /pullrequestquery?api-version=7.1` ,
137+ {
138+ method : 'POST' ,
139+ body : JSON . stringify ( {
140+ queries : [
141+ {
142+ items : [ rev ] ,
143+ type : 'commit' ,
144+ } ,
145+ ] ,
146+ } ) ,
147+ } ,
148+ scope ,
149+ cancellation ,
150+ ) ;
151+
152+ const pr = prResult ?. results [ 0 ] ?. [ rev ] ?. [ 0 ] ;
153+ if ( pr == null ) return undefined ;
154+
155+ const pullRequest = await this . request < AzurePullRequestWithLinks > (
156+ provider ,
157+ token ,
158+ undefined ,
159+ pr . url ,
160+ { method : 'GET' } ,
161+ scope ,
162+ cancellation ,
163+ ) ;
164+ if ( pullRequest == null ) return undefined ;
165+
166+ return fromAzurePullRequest ( pullRequest , provider , owner ) ;
167+ } catch ( ex ) {
168+ Logger . error ( ex , scope ) ;
169+ return undefined ;
170+ }
171+ }
172+
116173 @debug < AzureDevOpsApi [ 'getIssueOrPullRequest' ] > ( { args : { 0 : p => p . name , 1 : '<token>' } } )
117174 public async getIssueOrPullRequest (
118175 provider : Provider ,
@@ -311,13 +368,13 @@ export class AzureDevOpsApi implements Disposable {
311368 private async request < T > (
312369 provider : Provider ,
313370 token : string ,
314- baseUrl : string ,
371+ baseUrl : string | undefined ,
315372 route : string ,
316373 options : { method : RequestInit [ 'method' ] } & Record < string , unknown > ,
317374 scope : LogScope | undefined ,
318375 cancellation ?: CancellationToken | undefined ,
319376 ) : Promise < T | undefined > {
320- const url = `${ baseUrl } /${ route } ` ;
377+ const url = baseUrl ? `${ baseUrl } /${ route } ` : route ;
321378
322379 let rsp : Response ;
323380 try {
0 commit comments