Skip to content

Commit 00dd525

Browse files
authored
Submitting Review Failed... (#6915)
Fixes #6906
1 parent d295cb5 commit 00dd525

File tree

6 files changed

+43
-10
lines changed

6 files changed

+43
-10
lines changed

src/github/issueOverview.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ export class IssueOverviewPanel<TItem extends IssueModel = IssueModel> extends W
165165
return isInCodespaces();
166166
}
167167

168-
protected getInitializeContext(issue: IssueModel, timelineEvents: TimelineEvent[], repositoryAccess: RepoAccessAndMergeMethods, viewerCanEdit: boolean, assignableUsers: IAccount[]): Issue {
168+
protected getInitializeContext(currentUser: IAccount, issue: IssueModel, coAuthors: IAccount[], timelineEvents: TimelineEvent[], repositoryAccess: RepoAccessAndMergeMethods, viewerCanEdit: boolean, assignableUsers: IAccount[]): Issue {
169169
const hasWritePermission = repositoryAccess!.hasWritePermission;
170170
const canEdit = hasWritePermission || viewerCanEdit;
171171
const context: Issue = {
@@ -190,7 +190,8 @@ export class IssueOverviewPanel<TItem extends IssueModel = IssueModel> extends W
190190
isEnterprise: issue.githubRepository.remote.isEnterprise,
191191
isDarkTheme: vscode.window.activeColorTheme.kind === vscode.ColorThemeKind.Dark,
192192
canAssignCopilot: assignableUsers.find(user => COPILOT_ACCOUNTS[user.login]) !== undefined,
193-
reactions: issue.item.reactions
193+
reactions: issue.item.reactions,
194+
isAuthor: [issue.author, ...coAuthors].find(user => user.login === currentUser.login) !== undefined,
194195
};
195196

196197
return context;
@@ -203,7 +204,8 @@ export class IssueOverviewPanel<TItem extends IssueModel = IssueModel> extends W
203204
timelineEvents,
204205
repositoryAccess,
205206
viewerCanEdit,
206-
assignableUsers
207+
assignableUsers,
208+
currentUser
207209
] = await Promise.all([
208210
this._folderRepositoryManager.resolveIssue(
209211
issueModel.remote.owner,
@@ -213,7 +215,8 @@ export class IssueOverviewPanel<TItem extends IssueModel = IssueModel> extends W
213215
issueModel.getIssueTimelineEvents(),
214216
this._folderRepositoryManager.getPullRequestRepositoryAccessAndMergeMethods(issueModel),
215217
issueModel.canEdit(),
216-
this._folderRepositoryManager.getAssignableUsers()
218+
this._folderRepositoryManager.getAssignableUsers(),
219+
this._folderRepositoryManager.getCurrentUser(),
217220
]);
218221

219222
if (!issue) {
@@ -228,7 +231,7 @@ export class IssueOverviewPanel<TItem extends IssueModel = IssueModel> extends W
228231
Logger.debug('pr.initialize', IssueOverviewPanel.ID);
229232
this._postMessage({
230233
command: 'pr.initialize',
231-
pullrequest: this.getInitializeContext(issue, timelineEvents, repositoryAccess, viewerCanEdit, assignableUsers[this._item.remote.remoteName] ?? []),
234+
pullrequest: this.getInitializeContext(currentUser, issue, [], timelineEvents, repositoryAccess, viewerCanEdit, assignableUsers[this._item.remote.remoteName] ?? []),
232235
});
233236

234237
} catch (e) {

src/github/pullRequestModel.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import equals from 'fast-deep-equal';
99
import gql from 'graphql-tag';
1010
import * as vscode from 'vscode';
1111
import { Repository } from '../api/api';
12-
import { DiffSide, IComment, IReviewThread, SubjectType, ViewedState } from '../common/comment';
12+
import { COPILOT_ACCOUNTS, DiffSide, IComment, IReviewThread, SubjectType, ViewedState } from '../common/comment';
1313
import { getModifiedContentFromDiffHunk, parseDiff } from '../common/diffHunk';
1414
import { GitChangeType, InMemFileChange, SlimFileChange } from '../common/file';
1515
import { GitHubRef } from '../common/githubRef';
@@ -75,6 +75,7 @@ import {
7575
convertRESTReviewEvent,
7676
getReactionGroup,
7777
insertNewCommitsSinceReview,
78+
parseAccount,
7879
parseGraphQLComment,
7980
parseGraphQLReaction,
8081
parseGraphQLReviewers,
@@ -83,6 +84,7 @@ import {
8384
parseGraphQLTimelineEvents,
8485
parseMergeability,
8586
parseMergeQueueEntry,
87+
RestAccount,
8688
restPaginate,
8789
} from './utils';
8890

@@ -1128,6 +1130,22 @@ export class PullRequestModel extends IssueModel<PullRequest> implements IPullRe
11281130
}
11291131
}
11301132

1133+
async getCoAuthors(): Promise<IAccount[]> {
1134+
// To save time, we only do for Copilot now as that's where we need it
1135+
if (!COPILOT_ACCOUNTS[this.item.user.login]) {
1136+
return [];
1137+
}
1138+
const { octokit, remote } = await this.githubRepository.ensure();
1139+
const timeline = await octokit.call(octokit.api.issues.listEventsForTimeline, {
1140+
issue_number: this.number,
1141+
owner: remote.owner,
1142+
repo: remote.repositoryName,
1143+
per_page: 100
1144+
});
1145+
const workStartedInitiator = (timeline.data.find(event => event.event === 'copilot_work_started') as { actor: RestAccount } | undefined)?.actor;
1146+
return workStartedInitiator ? [parseAccount(workStartedInitiator, this.githubRepository)] : [];
1147+
}
1148+
11311149
/**
11321150
* Get the timeline events of a pull request, including comments, reviews, commits, merges, deletes, and assigns.
11331151
*/

src/github/pullRequestOverview.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ export class PullRequestOverviewPanel extends IssueOverviewPanel<PullRequestMode
211211
isBranchUpToDateWithBase,
212212
mergeability,
213213
emailForCommit,
214+
coAuthors
214215
] = await Promise.all([
215216
this._folderRepositoryManager.resolvePullRequest(
216217
pullRequestModel.remote.owner,
@@ -230,6 +231,7 @@ export class PullRequestOverviewPanel extends IssueOverviewPanel<PullRequestMode
230231
this._folderRepositoryManager.isHeadUpToDateWithBase(pullRequestModel),
231232
pullRequestModel.getMergeability(),
232233
this._folderRepositoryManager.getPreferredEmail(pullRequestModel),
234+
pullRequestModel.getCoAuthors()
233235
]);
234236
if (!pullRequest) {
235237
throw new Error(
@@ -253,7 +255,7 @@ export class PullRequestOverviewPanel extends IssueOverviewPanel<PullRequestMode
253255
const reviewState = this.getCurrentUserReviewState(this._existingReviewers, currentUser);
254256

255257
Logger.debug('pr.initialize', PullRequestOverviewPanel.ID);
256-
const baseContext = this.getInitializeContext(pullRequest, timelineEvents, repositoryAccess, viewerCanEdit, []);
258+
const baseContext = this.getInitializeContext(currentUser, pullRequest, coAuthors, timelineEvents, repositoryAccess, viewerCanEdit, []);
257259

258260
const context: Partial<PullRequest> = {
259261
...baseContext,
@@ -281,7 +283,6 @@ export class PullRequestOverviewPanel extends IssueOverviewPanel<PullRequestMode
281283
squashCommitMeta: pullRequest.squashCommitMeta,
282284
isIssue: false,
283285
emailForCommit,
284-
isAuthor: currentUser.login === pullRequest.author.login,
285286
currentUserReviewState: reviewState,
286287
revertable: pullRequest.state === GithubItemStateEnum.Merged
287288
};

src/github/utils.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,8 +586,18 @@ function parseRef(refName: string, oid: string, repository?: GraphQL.RefReposito
586586
};
587587
}
588588

589+
export interface RestAccount {
590+
login: string;
591+
html_url: string;
592+
avatar_url: string;
593+
email?: string | null;
594+
node_id: string;
595+
name?: string | null;
596+
type: string;
597+
}
598+
589599
export function parseAccount(
590-
author: { login: string; url: string; avatarUrl: string; email?: string, id: string, name?: string, __typename: string } | { login: string; html_url: string; avatar_url: string; email?: string | null, node_id: string, name?: string | null, type: string } | null,
600+
author: { login: string; url: string; avatarUrl: string; email?: string, id: string, name?: string, __typename: string } | RestAccount | null,
591601
githubRepository?: GitHubRepository,
592602
): IAccount {
593603
if (author) {

src/github/views.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export interface Issue {
5353
pendingCommentText?: string;
5454
pendingCommentDrafts?: { [key: string]: string };
5555
isIssue: boolean;
56-
isAuthor?: boolean;
56+
isAuthor: boolean;
5757
continueOnGitHub: boolean;
5858
isDarkTheme: boolean;
5959
isEnterprise: boolean;

webviews/editorWebview/test/builder/pullRequest.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export const PullRequestBuilder = createBuilderClass<PullRequest>()({
2828
isLocalHeadDeleted: { default: false },
2929
head: { default: 'my-fork:my-branch' },
3030
labels: { default: [] },
31+
isAuthor: { default: true },
3132
commitsCount: { default: 10 },
3233
repositoryDefaultBranch: { default: 'main' },
3334
canEdit: { default: true },

0 commit comments

Comments
 (0)