in src/github/pullRequestOverview.ts [153:251]
public async updatePullRequest(pullRequestModel: PullRequestModel): Promise<void> {
return Promise.all([
this._folderRepositoryManager.resolvePullRequest(
pullRequestModel.remote.owner,
pullRequestModel.remote.repositoryName,
pullRequestModel.number,
),
pullRequestModel.getTimelineEvents(),
this._folderRepositoryManager.getPullRequestRepositoryDefaultBranch(pullRequestModel),
pullRequestModel.getStatusChecks(),
pullRequestModel.getReviewRequests(),
this._folderRepositoryManager.getPullRequestRepositoryAccessAndMergeMethods(pullRequestModel),
this._folderRepositoryManager.getBranchNameForPullRequest(pullRequestModel),
])
.then(result => {
const [
pullRequest,
timelineEvents,
defaultBranch,
status,
requestedReviewers,
repositoryAccess,
branchInfo,
] = result;
if (!pullRequest) {
throw new Error(
`Fail to resolve Pull Request #${pullRequestModel.number} in ${pullRequestModel.remote.owner}/${pullRequestModel.remote.repositoryName}`,
);
}
this._item = pullRequest;
this._repositoryDefaultBranch = defaultBranch!;
this._panel.title = `Pull Request #${pullRequestModel.number.toString()}`;
const isCurrentlyCheckedOut = pullRequestModel.equals(this._folderRepositoryManager.activePullRequest);
const hasWritePermission = repositoryAccess!.hasWritePermission;
const mergeMethodsAvailability = repositoryAccess!.mergeMethodsAvailability;
const canEdit = hasWritePermission || this._item.canEdit();
const preferredMergeMethod = vscode.workspace
.getConfiguration('githubPullRequests')
.get<MergeMethod>('defaultMergeMethod');
const defaultMergeMethod = getDefaultMergeMethod(mergeMethodsAvailability, preferredMergeMethod);
this._existingReviewers = parseReviewers(requestedReviewers!, timelineEvents!, pullRequest.author);
const currentUser = this._folderRepositoryManager.getCurrentUser(this._item);
const isCrossRepository =
pullRequest.base &&
pullRequest.head &&
!pullRequest.base.repositoryCloneUrl.equals(pullRequest.head.repositoryCloneUrl);
const continueOnGitHub = isCrossRepository && isInCodespaces();
const reviewState = this.getCurrentUserReviewState(this._existingReviewers, currentUser);
Logger.debug('pr.initialize', PullRequestOverviewPanel.ID);
this._postMessage({
command: 'pr.initialize',
pullrequest: {
number: pullRequest.number,
title: pullRequest.title,
url: pullRequest.html_url,
createdAt: pullRequest.createdAt,
body: pullRequest.body,
bodyHTML: pullRequest.bodyHTML,
labels: pullRequest.item.labels,
author: {
login: pullRequest.author.login,
name: pullRequest.author.name,
avatarUrl: pullRequest.userAvatar,
url: pullRequest.author.url,
},
state: pullRequest.state,
events: timelineEvents,
isCurrentlyCheckedOut: isCurrentlyCheckedOut,
isRemoteBaseDeleted: pullRequest.isRemoteBaseDeleted,
base: pullRequest.base.label,
isRemoteHeadDeleted: pullRequest.isRemoteHeadDeleted,
isLocalHeadDeleted: !branchInfo,
head: pullRequest.head?.label ?? '',
repositoryDefaultBranch: defaultBranch,
canEdit: canEdit,
hasWritePermission,
status: status ? status : { statuses: [] },
mergeable: pullRequest.item.mergeable,
reviewers: this._existingReviewers,
isDraft: pullRequest.isDraft,
mergeMethodsAvailability,
defaultMergeMethod,
isIssue: false,
milestone: pullRequest.milestone,
assignees: pullRequest.assignees,
continueOnGitHub,
isAuthor: currentUser.login === pullRequest.author.login,
currentUserReviewState: reviewState
},
});
})
.catch(e => {
vscode.window.showErrorMessage(formatError(e));
});
}