@@ -138,20 +138,26 @@ export class UriHandler implements vscode.UriHandler {
138138 return PullRequestOverviewPanel . createOrShow ( this . _telemetry , this . _context . extensionUri , folderManager , pullRequest ) ;
139139 }
140140
141+ private async _savePendingCheckoutAndOpenFolder ( params : { owner : string ; repo : string ; pullRequestNumber : number } , folderUri : vscode . Uri ) : Promise < void > {
142+ const payload : PendingCheckoutPayload = { ...params , timestamp : Date . now ( ) } ;
143+ await this . _context . globalState . update ( PENDING_CHECKOUT_PULL_REQUEST_KEY , payload ) ;
144+ await vscode . commands . executeCommand ( 'vscode.openFolder' , folderUri ) ;
145+ }
146+
141147 private async _checkoutPullRequest ( uri : vscode . Uri ) : Promise < void > {
142148 const params = fromOpenOrCheckoutPullRequestWebviewUri ( uri ) ;
143149 if ( ! params ) {
144150 return ;
145151 }
152+ const folderManager = this . _reposManagers . getManagerForRepository ( params . owner , params . repo ) ;
153+ if ( folderManager ) {
154+ return performPullRequestCheckout ( folderManager , params . owner , params . repo , params . pullRequestNumber ) ;
155+ }
156+ // Folder not found; request workspace open then resume later.
146157 await withCheckoutProgress ( params . owner , params . repo , params . pullRequestNumber , async ( progress , token ) => {
147158 if ( token . isCancellationRequested ) {
148159 return ;
149160 }
150- const folderManager = this . _reposManagers . getManagerForRepository ( params . owner , params . repo ) ;
151- if ( folderManager ) {
152- return performPullRequestCheckout ( folderManager , params . owner , params . repo , params . pullRequestNumber ) ;
153- }
154- // Folder not found; request workspace open then resume later.
155161 try {
156162 progress . report ( { message : vscode . l10n . t ( 'Locating workspace...' ) } ) ;
157163 const remoteUri = vscode . Uri . parse ( `https://github.com/${ params . owner } /${ params . repo } ` ) ;
@@ -161,9 +167,7 @@ export class UriHandler implements vscode.UriHandler {
161167 }
162168 if ( workspaces && workspaces . length ) {
163169 progress . report ( { message : vscode . l10n . t ( 'Opening workspace...' ) } ) ;
164- const payload : PendingCheckoutPayload = { ...params , timestamp : Date . now ( ) } ;
165- await this . _context . globalState . update ( PENDING_CHECKOUT_PULL_REQUEST_KEY , payload ) ;
166- await vscode . commands . executeCommand ( 'vscode.openFolder' , workspaces [ 0 ] ) ;
170+ await this . _savePendingCheckoutAndOpenFolder ( params , workspaces [ 0 ] ) ;
167171 } else {
168172 this . _showCloneOffer ( remoteUri , params ) ;
169173 }
@@ -184,9 +188,7 @@ export class UriHandler implements vscode.UriHandler {
184188 try {
185189 const clonedWorkspaceUri = await this . _git . clone ( remoteUri , { postCloneAction : 'none' } ) ;
186190 if ( clonedWorkspaceUri ) {
187- const payload : PendingCheckoutPayload = { ...params , timestamp : Date . now ( ) } ;
188- await this . _context . globalState . update ( PENDING_CHECKOUT_PULL_REQUEST_KEY , payload ) ;
189- await vscode . commands . executeCommand ( 'vscode.openFolder' , clonedWorkspaceUri ) ;
191+ await this . _savePendingCheckoutAndOpenFolder ( params , clonedWorkspaceUri ) ;
190192 } else {
191193 Logger . warn ( `Clone API returned null for ${ remoteUri . toString ( ) } ` , UriHandler . ID ) ;
192194 }
0 commit comments