Skip to content

Commit dbec0bd

Browse files
committed
Reduce duplication
1 parent 1cf0a24 commit dbec0bd

1 file changed

Lines changed: 13 additions & 11 deletions

File tree

src/uriHandler.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)