@@ -14,6 +14,7 @@ import {
1414 RequestNotFoundError ,
1515} from '../../../../errors' ;
1616import type { IssueOrPullRequest } from '../../../../git/models/issueOrPullRequest' ;
17+ import { PullRequest } from '../../../../git/models/pullRequest' ;
1718import type { Provider } from '../../../../git/models/remoteProvider' ;
1819import { showIntegrationRequestFailed500WarningMessage } from '../../../../messages' ;
1920import { configuration } from '../../../../system/-webview/configuration' ;
@@ -22,7 +23,13 @@ import { Logger } from '../../../../system/logger';
2223import type { LogScope } from '../../../../system/logger.scope' ;
2324import { getLogScope } from '../../../../system/logger.scope' ;
2425import { maybeStopWatch } from '../../../../system/stopwatch' ;
25- import type { AzurePullRequest , AzureWorkItemState , AzureWorkItemStateCategory , WorkItem } from './models' ;
26+ import type {
27+ AzurePullRequest ,
28+ AzurePullRequestWithLinks ,
29+ AzureWorkItemState ,
30+ AzureWorkItemStateCategory ,
31+ WorkItem ,
32+ } from './models' ;
2633import {
2734 azurePullRequestStatusToState ,
2835 azureWorkItemsStateCategoryToState ,
@@ -65,6 +72,61 @@ export class AzureDevOpsApi implements Disposable {
6572 this . _workItemStates . clear ( ) ;
6673 }
6774
75+ @debug < AzureDevOpsApi [ 'getPullRequestForBranch' ] > ( { args : { 0 : p => p . name , 1 : '<token>' } } )
76+ public async getPullRequestForBranch (
77+ provider : Provider ,
78+ token : string ,
79+ owner : string ,
80+ repo : string ,
81+ branch : string ,
82+ options : {
83+ baseUrl : string ;
84+ } ,
85+ ) : Promise < PullRequest | undefined > {
86+ const scope = getLogScope ( ) ;
87+ const [ projectName , _ , repoName ] = repo . split ( '/' ) ;
88+
89+ try {
90+ const prResult = await this . request < { value : AzurePullRequest [ ] } > (
91+ provider ,
92+ token ,
93+ options ?. baseUrl ,
94+ `${ owner } /${ projectName } /_apis/git/repositories/${ repoName } /pullRequests` ,
95+ {
96+ method : 'GET' ,
97+ } ,
98+ scope ,
99+ ) ;
100+
101+ const pr = prResult ?. value . find ( pr => pr . sourceRefName . endsWith ( branch ) ) ;
102+ if ( pr == null ) return undefined ;
103+
104+ return new PullRequest (
105+ provider ,
106+ {
107+ id : pr . createdBy . id ,
108+ name : pr . createdBy . displayName ,
109+ avatarUrl : pr . createdBy . imageUrl ,
110+ url : pr . createdBy . url ,
111+ } ,
112+ pr . pullRequestId . toString ( ) ,
113+ pr . pullRequestId . toString ( ) ,
114+ pr . title ,
115+ getPullRequestUrl ( options . baseUrl , owner , projectName , repoName , pr . pullRequestId ) ,
116+ {
117+ owner : owner ,
118+ repo : repo ,
119+ } ,
120+ azurePullRequestStatusToState ( pr . status ) ,
121+ new Date ( pr . creationDate ) ,
122+ new Date ( pr . creationDate ) ,
123+ ) ;
124+ } catch ( ex ) {
125+ Logger . error ( ex , scope ) ;
126+ return undefined ;
127+ }
128+ }
129+
68130 @debug < AzureDevOpsApi [ 'getIssueOrPullRequest' ] > ( { args : { 0 : p => p . name , 1 : '<token>' } } )
69131 public async getIssueOrPullRequest (
70132 provider : Provider ,
@@ -126,7 +188,7 @@ export class AzureDevOpsApi implements Disposable {
126188 }
127189
128190 try {
129- const prResult = await this . request < AzurePullRequest > (
191+ const prResult = await this . request < AzurePullRequestWithLinks > (
130192 provider ,
131193 token ,
132194 options ?. baseUrl ,
0 commit comments