Skip to content

Commit f9423bd

Browse files
authored
Fix resolve conflicts button in focus view (#6024)
Fixes #5942
1 parent b693ea5 commit f9423bd

1 file changed

Lines changed: 29 additions & 1 deletion

File tree

src/github/activityBarViewProvider.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { dispose, formatError } from '../common/utils';
1111
import { getNonce, IRequestMessage, WebviewViewBase } from '../common/webview';
1212
import { ReviewManager } from '../view/reviewManager';
1313
import { FolderRepositoryManager } from './folderRepositoryManager';
14-
import { GithubItemStateEnum, IAccount, isTeam, reviewerId, ReviewEvent, ReviewState } from './interface';
14+
import { GithubItemStateEnum, IAccount, isTeam, PullRequestMergeability, reviewerId, ReviewEvent, ReviewState } from './interface';
1515
import { PullRequestModel } from './pullRequestModel';
1616
import { getDefaultMergeMethod } from './pullRequestOverview';
1717
import { PullRequestView } from './pullRequestOverviewCommon';
@@ -75,6 +75,32 @@ export class PullRequestViewProvider extends WebviewViewBase implements vscode.W
7575
this.updatePullRequest(this._item);
7676
}
7777

78+
private async updateBranch(message: IRequestMessage<string>): Promise<void> {
79+
if (this._folderRepositoryManager.repository.state.workingTreeChanges.length > 0 || this._folderRepositoryManager.repository.state.indexChanges.length > 0) {
80+
await vscode.window.showErrorMessage(vscode.l10n.t('The pull request branch cannot be updated when the there changed files in the working tree or index. Stash or commit all change and then try again.'), { modal: true });
81+
return this._replyMessage(message, {});
82+
}
83+
const mergeSucceeded = await this._folderRepositoryManager.tryMergeBaseIntoHead(this._item, true);
84+
if (!mergeSucceeded) {
85+
this._replyMessage(message, {});
86+
}
87+
// The mergability of the PR doesn't update immediately. Poll.
88+
let mergability = PullRequestMergeability.Unknown;
89+
let attemptsRemaining = 5;
90+
do {
91+
mergability = (await this._item.getMergeability()).mergeability;
92+
attemptsRemaining--;
93+
await new Promise(c => setTimeout(c, 1000));
94+
} while (attemptsRemaining > 0 && mergability === PullRequestMergeability.Unknown);
95+
96+
const result: Partial<PullRequest> = {
97+
events: await this._item.getTimelineEvents(),
98+
mergeable: mergability,
99+
};
100+
await this.refresh();
101+
this._replyMessage(message, result);
102+
}
103+
78104
protected async _onDidReceiveMessage(message: IRequestMessage<any>) {
79105
const result = await super._onDidReceiveMessage(message);
80106
if (result !== this.MESSAGE_UNHANDLED) {
@@ -107,6 +133,8 @@ export class PullRequestViewProvider extends WebviewViewBase implements vscode.W
107133
return openPullRequestOnGitHub(this._item, (this._item as any)._telemetry);
108134
case 'pr.checkout-default-branch':
109135
return this.checkoutDefaultBranch(message);
136+
case 'pr.update-branch':
137+
return this.updateBranch(message);
110138
case 'pr.re-request-review':
111139
return this.reRequestReview(message);
112140
}

0 commit comments

Comments
 (0)