Skip to content

Commit b2dfd46

Browse files
committed
Fix up
1 parent a0d1679 commit b2dfd46

File tree

6 files changed

+41
-20
lines changed

6 files changed

+41
-20
lines changed

src/common/copilot.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { EventType, TimelineEvent } from './timelineEvent';
7+
import { AccountType, IAccount } from '../github/interface';
78

89
export const COPILOT_SWE_AGENT = 'copilot-swe-agent';
910
export const COPILOT_CLOUD_AGENT = 'copilot-cloud-agent';
@@ -16,6 +17,15 @@ export const COPILOT_LOGINS = [
1617
'Copilot'
1718
];
1819

20+
export const COPILOT_REVIEWER_ACCOUNT: IAccount = {
21+
login: COPILOT_REVIEWER,
22+
id: COPILOT_REVIEWER_ID,
23+
url: '',
24+
avatarUrl: '',
25+
name: 'Copilot',
26+
accountType: AccountType.Bot
27+
};
28+
1929
export enum CopilotPRStatus {
2030
None = 0,
2131
Started = 1,

src/github/graphql.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,11 @@ export function isTeam(x: Actor | Team | Node | undefined | null): x is Team {
130130
return !!asTeam && (asTeam?.slug !== undefined);
131131
}
132132

133+
export function isBot(x: Actor | Team | Node | undefined | null): x is Actor {
134+
const asBot = x as Partial<Actor>;
135+
return !!asBot && !!asBot.id?.startsWith('BOT_');
136+
}
137+
133138
export interface Team {
134139
avatarUrl: string;
135140
name: string;
@@ -347,6 +352,14 @@ export interface GetReviewRequestsResponse {
347352
} | null;
348353
}
349354

355+
export interface AddReviewRequestResponse {
356+
requestReviews: {
357+
pullRequest: {
358+
id: string;
359+
};
360+
} | null;
361+
}
362+
350363
export interface PullRequestState {
351364
repository: {
352365
pullRequest: {

src/github/pullRequestModel.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { GitHubRepository, GraphQLError, GraphQLErrorType } from './githubReposi
1717
import {
1818
AddCommentResponse,
1919
AddReactionResponse,
20+
AddReviewRequestResponse as AddReviewsResponse,
2021
AddReviewThreadResponse,
2122
DeleteReactionResponse,
2223
DeleteReviewResponse,
@@ -1247,21 +1248,26 @@ export class PullRequestModel extends IssueModel<PullRequest> implements IPullRe
12471248
input.botIds = reviewers.filter(r => r.accountType === AccountType.Bot).map(r => r.id);
12481249
}
12491250

1250-
const { data } = await mutate<GetReviewRequestsResponse>({
1251+
const { data } = await mutate<AddReviewsResponse>({
12511252
mutation: schema.AddReviewers,
12521253
variables: {
12531254
input
12541255
},
12551256
});
12561257

1257-
if (!data?.repository) {
1258+
if (!data?.requestReviews) {
12581259
Logger.error('Unexpected null repository while getting review requests', PullRequestModel.ID);
12591260
return;
12601261
}
12611262

1262-
const newReviewers: (IAccount | ITeam)[] = parseGraphQLReviewers(data, this.githubRepository);
1263-
if (this.reviewers?.length !== newReviewers.length || (this.reviewers.some(r => !newReviewers.some(rr => rr.id === r.id)))) {
1264-
this.reviewers = newReviewers;
1263+
const newReviewers: (IAccount | ITeam)[] = [...reviewers, ...teamReviewers].filter(r => !this.reviewers?.some(rr => rr.id === r.id));
1264+
if (this.reviewers?.length !== newReviewers.length) {
1265+
if (!this.reviewers) {
1266+
this.reviewers = newReviewers;
1267+
} else {
1268+
this.reviewers.push(...newReviewers);
1269+
}
1270+
this.reviewers = [...this.reviewers, ...newReviewers];
12651271
this._onDidChange.fire({ reviewers: true });
12661272
}
12671273
}

src/github/pullRequestOverview.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import { pickEmail, reviewersQuickPick } from './quickPicks';
2727
import { parseReviewers } from './utils';
2828
import { CancelCodingAgentReply, DeleteReviewResult, MergeArguments, MergeResult, PullRequest, ReviewType } from './views';
2929
import { COPILOT_ACCOUNTS, IComment } from '../common/comment';
30-
import { COPILOT_SWE_AGENT, copilotEventToStatus, CopilotPRStatus, mostRecentCopilotEvent } from '../common/copilot';
30+
import { COPILOT_REVIEWER, COPILOT_REVIEWER_ACCOUNT, COPILOT_SWE_AGENT, copilotEventToStatus, CopilotPRStatus, mostRecentCopilotEvent } from '../common/copilot';
3131
import { commands, contexts } from '../common/executeCommands';
3232
import { disposeAll } from '../common/lifecycle';
3333
import Logger from '../common/logger';
@@ -308,7 +308,7 @@ export class PullRequestOverviewPanel extends IssueOverviewPanel<PullRequestMode
308308
Logger.debug('pr.initialize', PullRequestOverviewPanel.ID);
309309
const users = this._assignableUsers[pullRequestModel.remote.remoteName] ?? [];
310310
const copilotUser = users.find(user => COPILOT_ACCOUNTS[user.login]);
311-
const isCopilotAlreadyReviewer = this._existingReviewers.some(reviewer => !isITeam(reviewer.reviewer) && COPILOT_ACCOUNTS[reviewer.reviewer.login]);
311+
const isCopilotAlreadyReviewer = this._existingReviewers.some(reviewer => !isITeam(reviewer.reviewer) && reviewer.reviewer.login === COPILOT_REVIEWER);
312312
const baseContext = this.getInitializeContext(currentUser, pullRequest, timelineEvents, repositoryAccess, viewerCanEdit, users);
313313

314314
this.preLoadInfoNotRequiredForOverview(pullRequest);
@@ -757,7 +757,7 @@ export class PullRequestOverviewPanel extends IssueOverviewPanel<PullRequestMode
757757
try {
758758
const copilotUser = this._assignableUsers[this._item.remote.remoteName]?.find(user => COPILOT_ACCOUNTS[user.login]);
759759
if (copilotUser) {
760-
await this._item.requestReview([copilotUser], []);
760+
await this._item.requestReview([COPILOT_REVIEWER_ACCOUNT], []);
761761
const newReviewers = await this._item.getReviewRequests();
762762
this._existingReviewers = parseReviewers(newReviewers!, await this._item.getTimelineEvents(), this._item.author);
763763
const reply = {

src/github/quickPicks.ts

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ import { Buffer } from 'buffer';
88
import * as vscode from 'vscode';
99
import { FolderRepositoryManager } from './folderRepositoryManager';
1010
import { GitHubRepository, TeamReviewerRefreshKind } from './githubRepository';
11-
import { AccountType, IAccount, ILabel, IMilestone, IProject, isISuggestedReviewer, isITeam, ISuggestedReviewer, ITeam, reviewerId, ReviewState } from './interface';
11+
import { IAccount, ILabel, IMilestone, IProject, isISuggestedReviewer, isITeam, ISuggestedReviewer, ITeam, reviewerId, ReviewState } from './interface';
1212
import { IssueModel } from './issueModel';
1313
import { DisplayLabel } from './views';
1414
import { COPILOT_ACCOUNTS } from '../common/comment';
15-
import { COPILOT_REVIEWER, COPILOT_REVIEWER_ID, COPILOT_SWE_AGENT } from '../common/copilot';
15+
import { COPILOT_REVIEWER, COPILOT_REVIEWER_ACCOUNT, COPILOT_SWE_AGENT } from '../common/copilot';
1616
import { emojify, ensureEmojis } from '../common/emoji';
1717
import Logger from '../common/logger';
1818
import { DataUri } from '../common/uri';
@@ -191,15 +191,7 @@ async function getReviewersQuickPickItems(folderRepositoryManager: FolderReposit
191191

192192
// If we removed the coding agent, add the Copilot reviewer instead
193193
if (hasCopilotSweAgent && !existingReviewers.find(user => (user.reviewer as IAccount).login === COPILOT_REVIEWER)) {
194-
const copilotReviewer: IAccount = {
195-
login: COPILOT_REVIEWER,
196-
id: COPILOT_REVIEWER_ID,
197-
url: '',
198-
avatarUrl: '',
199-
name: COPILOT_ACCOUNTS[COPILOT_REVIEWER]?.name ?? 'Copilot',
200-
accountType: AccountType.Bot
201-
};
202-
assignableUsers.push(copilotReviewer);
194+
assignableUsers.push(COPILOT_REVIEWER_ACCOUNT);
203195
}
204196

205197
// Suggested reviewers

src/github/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -695,7 +695,7 @@ export function parseGraphQLReviewers(data: GraphQL.GetReviewRequestsResponse, r
695695
if (GraphQL.isTeam(reviewer.requestedReviewer)) {
696696
const team: ITeam = parseTeam(reviewer.requestedReviewer, repository);
697697
reviewers.push(team);
698-
} else if (GraphQL.isAccount(reviewer.requestedReviewer)) {
698+
} else if (GraphQL.isAccount(reviewer.requestedReviewer) || GraphQL.isBot(reviewer.requestedReviewer)) {
699699
const account: IAccount = parseAccount(reviewer.requestedReviewer, repository);
700700
reviewers.push(account);
701701
}

0 commit comments

Comments
 (0)