Skip to content

Commit 12746df

Browse files
authored
github-pull-request_activePullRequest returns empty comments array (#7708)
Fixes #7601
1 parent 274e0ba commit 12746df

7 files changed

Lines changed: 24 additions & 15 deletions

File tree

src/github/activityBarViewProvider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ export class PullRequestViewProvider extends WebviewViewBase implements vscode.W
8080
} while (attemptsRemaining > 0 && mergability === PullRequestMergeability.Unknown);
8181

8282
const result: Partial<PullRequest> = {
83-
events: await this._item.getTimelineEvents(this._item),
83+
events: await this._item.getTimelineEvents(),
8484
mergeable: mergability,
8585
};
8686
await this.refresh();
@@ -214,7 +214,7 @@ export class PullRequestViewProvider extends WebviewViewBase implements vscode.W
214214
pullRequestModel.number,
215215
),
216216
this._folderRepositoryManager.getPullRequestRepositoryAccessAndMergeMethods(pullRequestModel),
217-
pullRequestModel.getTimelineEvents(pullRequestModel),
217+
pullRequestModel.getTimelineEvents(),
218218
pullRequestModel.getReviewRequests(),
219219
this._folderRepositoryManager.getBranchNameForPullRequest(pullRequestModel),
220220
this._folderRepositoryManager.getPullRequestRepositoryDefaultBranch(pullRequestModel),

src/github/copilotRemoteAgent/chatSessionContentBuilder.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export class ChatSessionContentBuilder {
3434
);
3535

3636
const history: Array<vscode.ChatRequestTurn | vscode.ChatResponseTurn2> = [];
37-
const timelineEvents = await pullRequest.getTimelineEvents(pullRequest);
37+
const timelineEvents = await pullRequest.getTimelineEvents();
3838

3939
Logger.appendLine(`Found ${timelineEvents.length} timeline events`, this.loggerId);
4040

src/github/pullRequestModel.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -719,17 +719,17 @@ export class PullRequestModel extends IssueModel<PullRequest> implements IPullRe
719719
/**
720720
* Get the timeline events of a pull request, including comments, reviews, commits, merges, deletes, and assigns.
721721
*/
722-
async getTimelineEvents(pullRequestModel: PullRequestModel): Promise<TimelineEvent[]> {
722+
async getTimelineEvents(): Promise<TimelineEvent[]> {
723723
const getTimelineEvents = async () => {
724-
Logger.debug(`Fetch timeline events of PR #${pullRequestModel.number} - enter`, PullRequestModel.ID);
724+
Logger.debug(`Fetch timeline events of PR #${this.number} - enter`, PullRequestModel.ID);
725725
const { query, remote, schema } = await this.githubRepository.ensure();
726726
try {
727727
const { data } = await query<TimelineEventsResponse>({
728728
query: schema.TimelineEvents,
729729
variables: {
730730
owner: remote.owner,
731731
name: remote.repositoryName,
732-
number: pullRequestModel.number,
732+
number: this.number,
733733
},
734734
});
735735

@@ -748,17 +748,17 @@ export class PullRequestModel extends IssueModel<PullRequest> implements IPullRe
748748
getTimelineEvents(),
749749
this.getViewerLatestReviewCommit(),
750750
(await this.githubRepository.getAuthenticatedUser()).login,
751-
pullRequestModel.getReviewThreads()
751+
this.getReviewThreads()
752752
]);
753753

754754

755755
const ret = data?.repository?.pullRequest.timelineItems.nodes ?? [];
756-
const events = await parseCombinedTimelineEvents(ret, await this.getCopilotTimelineEvents(pullRequestModel, true), this.githubRepository);
756+
const events = await parseCombinedTimelineEvents(ret, await this.getCopilotTimelineEvents(this, true), this.githubRepository);
757757

758758
this.addReviewTimelineEventComments(events, reviewThreads);
759-
insertNewCommitsSinceReview(events, latestReviewCommitInfo?.sha, currentUser, pullRequestModel.head);
760-
Logger.debug(`Fetch timeline events of PR #${pullRequestModel.number} - done`, PullRequestModel.ID);
761-
pullRequestModel.timelineEvents = events;
759+
insertNewCommitsSinceReview(events, latestReviewCommitInfo?.sha, currentUser, this.head);
760+
Logger.debug(`Fetch timeline events of PR #${this.number} - done`, PullRequestModel.ID);
761+
this.timelineEvents = events;
762762
return events;
763763
}
764764

src/github/pullRequestOverview.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ export class PullRequestOverviewPanel extends IssueOverviewPanel<PullRequestMode
247247
pullRequestModel.remote.repositoryName,
248248
pullRequestModel.number,
249249
),
250-
pullRequestModel.getTimelineEvents(pullRequestModel),
250+
pullRequestModel.getTimelineEvents(),
251251
this._folderRepositoryManager.getPullRequestRepositoryDefaultBranch(pullRequestModel),
252252
pullRequestModel.getStatusChecks(),
253253
pullRequestModel.getReviewRequests(),
@@ -494,7 +494,7 @@ export class PullRequestOverviewPanel extends IssueOverviewPanel<PullRequestMode
494494
}
495495

496496
protected override _getTimeline(): Promise<TimelineEvent[]> {
497-
return this._item.getTimelineEvents(this._item);
497+
return this._item.getTimelineEvents();
498498
}
499499

500500
private async openDiff(message: IRequestMessage<{ comment: IComment }>): Promise<void> {

src/issues/userCompletionProvider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ export class UserCompletionProvider implements vscode.CompletionItemProvider {
238238
if (githubRepo) {
239239
const pr = await githubRepo.getPullRequest(prNumber);
240240
this.cachedForPrNumber = prNumber;
241-
this.cachedPrTimelineEvents = await pr!.getTimelineEvents(pr!);
241+
this.cachedPrTimelineEvents = await pr!.getTimelineEvents();
242242
}
243243

244244
prRelatedusers = getRelatedUsersFromTimelineEvents(this.cachedPrTimelineEvents);

src/lm/tools/activePullRequestTool.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import * as vscode from 'vscode';
88
import { COPILOT_LOGINS } from '../../common/copilot';
99
import { GitChangeType, InMemFileChange } from '../../common/file';
1010
import Logger from '../../common/logger';
11+
import { CommentEvent, EventType, ReviewEvent } from '../../common/timelineEvent';
1112
import { CopilotRemoteAgentManager } from '../../github/copilotRemoteAgent';
1213
import { PullRequestModel } from '../../github/pullRequestModel';
1314
import { RepositoriesManager } from '../../github/repositoriesManager';
@@ -118,6 +119,7 @@ export abstract class PullRequestTool implements vscode.LanguageModelTool<FetchI
118119
}
119120

120121
const status = await pullRequest.getStatusChecks();
122+
const timeline = pullRequest.timelineEvents.length > 0 ? pullRequest.timelineEvents : await pullRequest.getTimelineEvents();
121123
const pullRequestInfo = {
122124
title: pullRequest.title,
123125
body: pullRequest.body,
@@ -131,6 +133,13 @@ export abstract class PullRequestTool implements vscode.LanguageModelTool<FetchI
131133
file: comment.path
132134
};
133135
}),
136+
timelineComments: timeline.filter((event): event is ReviewEvent | CommentEvent => event.event === EventType.Reviewed || event.event === EventType.Commented).map(event => {
137+
return {
138+
author: event.user?.login,
139+
body: event.body,
140+
commentType: event.event === EventType.Reviewed ? event.state : 'COMMENTED',
141+
};
142+
}),
134143
state: pullRequest.state,
135144
statusChecks: status[0]?.statuses.map((status) => {
136145
return {

src/notifications/notificationsManager.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ export class NotificationsManager extends Disposable implements vscode.TreeDataP
320320

321321
public async markPullRequests(markAsDone: boolean = false): Promise<void> {
322322
const filteredNotifications = Array.from(this._notifications.values()).filter(notification => notification.notification.subject.type === NotificationSubjectType.PullRequest);
323-
const timlines = await Promise.all(filteredNotifications.map(notification => (notification.model as PullRequestModel).getTimelineEvents(notification.model as PullRequestModel)));
323+
const timlines = await Promise.all(filteredNotifications.map(notification => (notification.model as PullRequestModel).getTimelineEvents()));
324324

325325
const markPromises: Promise<void>[] = [];
326326

0 commit comments

Comments
 (0)