Skip to content

Commit 0633130

Browse files
Copilotalexr00
andcommitted
Add BaseRefChanged timeline event and include in ChangeBaseReply
Co-authored-by: alexr00 <38270282+alexr00@users.noreply.github.com>
1 parent d7b7d3b commit 0633130

File tree

8 files changed

+76
-5
lines changed

8 files changed

+76
-5
lines changed

src/common/timelineEvent.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export enum EventType {
2222
CrossReferenced,
2323
Closed,
2424
Reopened,
25+
BaseRefChanged,
2526
CopilotStarted,
2627
CopilotFinished,
2728
CopilotFinishedError,
@@ -156,6 +157,15 @@ export interface ReopenedEvent {
156157
createdAt: string;
157158
}
158159

160+
export interface BaseRefChangedEvent {
161+
id: string;
162+
event: EventType.BaseRefChanged;
163+
actor: IActor;
164+
createdAt: string;
165+
currentRefName: string;
166+
previousRefName: string;
167+
}
168+
159169
export interface SessionPullInfo {
160170
id: number;
161171
host: string;
@@ -192,4 +202,4 @@ export interface CopilotFinishedErrorEvent {
192202
sessionLink: SessionLinkInfo;
193203
}
194204

195-
export type TimelineEvent = CommitEvent | ReviewEvent | CommentEvent | NewCommitsSinceReviewEvent | MergedEvent | AssignEvent | UnassignEvent | HeadRefDeleteEvent | CrossReferencedEvent | ClosedEvent | ReopenedEvent | CopilotStartedEvent | CopilotFinishedEvent | CopilotFinishedErrorEvent;
205+
export type TimelineEvent = CommitEvent | ReviewEvent | CommentEvent | NewCommitsSinceReviewEvent | MergedEvent | AssignEvent | UnassignEvent | HeadRefDeleteEvent | CrossReferencedEvent | ClosedEvent | ReopenedEvent | BaseRefChangedEvent | CopilotStartedEvent | CopilotFinishedEvent | CopilotFinishedErrorEvent;

src/github/graphql.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,15 @@ export interface ReopenedEvent {
6868
createdAt: string;
6969
}
7070

71+
export interface BaseRefChangedEvent {
72+
__typename: string;
73+
id: string;
74+
actor: Actor;
75+
createdAt: string;
76+
currentRefName: string;
77+
previousRefName: string;
78+
}
79+
7180
export interface AbbreviatedIssueComment {
7281
author: Account;
7382
body: string;
@@ -265,7 +274,7 @@ export interface TimelineEventsResponse {
265274
repository: {
266275
pullRequest: {
267276
timelineItems: {
268-
nodes: (MergedEvent | Review | IssueComment | Commit | AssignedEvent | HeadRefDeletedEvent | null)[];
277+
nodes: (MergedEvent | Review | IssueComment | Commit | AssignedEvent | HeadRefDeletedEvent | BaseRefChangedEvent | null)[];
269278
};
270279
};
271280
} | null;
@@ -1051,7 +1060,7 @@ export interface MergePullRequestResponse {
10511060
mergePullRequest: {
10521061
pullRequest: PullRequest & {
10531062
timelineItems: {
1054-
nodes: (MergedEvent | Review | IssueComment | Commit | AssignedEvent | HeadRefDeletedEvent)[]
1063+
nodes: (MergedEvent | Review | IssueComment | Commit | AssignedEvent | HeadRefDeletedEvent | BaseRefChangedEvent)[]
10551064
}
10561065
};
10571066
}

src/github/pullRequestOverview.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -830,8 +830,10 @@ export class PullRequestOverviewPanel extends IssueOverviewPanel<PullRequestMode
830830
if (selectedBranch) {
831831
try {
832832
await this._item.updateBaseBranch(selectedBranch);
833+
const events = await this._getTimeline();
833834
const reply: ChangeBaseReply = {
834-
base: selectedBranch
835+
base: selectedBranch,
836+
events
835837
};
836838
await this._replyMessage(message, reply);
837839
} catch (e) {

src/github/queriesShared.gql

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,17 @@ fragment ReopenedEvent on ReopenedEvent {
210210
createdAt
211211
}
212212

213+
fragment BaseRefChangedEvent on BaseRefChangedEvent {
214+
id
215+
actor {
216+
...Node
217+
...Actor
218+
}
219+
createdAt
220+
currentRefName
221+
previousRefName
222+
}
223+
213224
fragment Review on PullRequestReview {
214225
id
215226
databaseId
@@ -312,6 +323,7 @@ query TimelineEvents($owner: String!, $name: String!, $number: Int!, $last: Int
312323
...CrossReferencedEvent
313324
...ClosedEvent
314325
...ReopenedEvent
326+
...BaseRefChangedEvent
315327
}
316328
}
317329
}
@@ -1230,6 +1242,7 @@ mutation MergePullRequest($input: MergePullRequestInput!, $last: Int = 150) {
12301242
...CrossReferencedEvent
12311243
...ClosedEvent
12321244
...ReopenedEvent
1245+
...BaseRefChangedEvent
12331246
}
12341247
}
12351248
}

src/github/utils.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,8 @@ export function convertGraphQLEventType(text: string) {
490490
return Common.EventType.Closed;
491491
case 'ReopenedEvent':
492492
return Common.EventType.Reopened;
493+
case 'BaseRefChangedEvent':
494+
return Common.EventType.BaseRefChanged;
493495
default:
494496
return Common.EventType.Other;
495497
}
@@ -1120,6 +1122,7 @@ export async function parseCombinedTimelineEvents(
11201122
| GraphQL.AssignedEvent
11211123
| GraphQL.HeadRefDeletedEvent
11221124
| GraphQL.CrossReferencedEvent
1125+
| GraphQL.BaseRefChangedEvent
11231126
| null
11241127
)[],
11251128
restEvents: Common.TimelineEvent[],
@@ -1294,6 +1297,18 @@ export async function parseCombinedTimelineEvents(
12941297
createdAt: reopenedEv.createdAt,
12951298
});
12961299
break;
1300+
case Common.EventType.BaseRefChanged:
1301+
const baseRefChangedEv = event as GraphQL.BaseRefChangedEvent;
1302+
1303+
addTimelineEvent({
1304+
id: baseRefChangedEv.id,
1305+
event: type,
1306+
actor: parseAccount(baseRefChangedEv.actor, githubRepository),
1307+
createdAt: baseRefChangedEv.createdAt,
1308+
currentRefName: baseRefChangedEv.currentRefName,
1309+
previousRefName: baseRefChangedEv.previousRefName,
1310+
});
1311+
break;
12971312
default:
12981313
break;
12991314
}

src/github/views.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,4 +177,5 @@ export interface CodingAgentContext extends SessionLinkInfo {
177177

178178
export interface ChangeBaseReply {
179179
base: string;
180+
events: TimelineEvent[];
180181
}

webviews/common/context.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ export class PRContext {
9595
public changeBaseBranch = async () => {
9696
const result: ChangeBaseReply = await this.postMessage({ command: 'pr.change-base-branch' });
9797
if (result?.base) {
98-
this.updatePR({ base: result.base });
98+
this.updatePR({ base: result.base, events: result.events });
9999
}
100100
};
101101
public changeProjects = (): Promise<ProjectItemsReply> => this.postMessage({ command: 'pr.change-projects' });

webviews/components/timeline.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { AuthorLink, Avatar } from './user';
1313
import { IComment } from '../../src/common/comment';
1414
import {
1515
AssignEvent,
16+
BaseRefChangedEvent,
1617
ClosedEvent,
1718
CommentEvent,
1819
CommitEvent,
@@ -89,6 +90,8 @@ export const Timeline = ({ events, isIssue }: { events: TimelineEvent[], isIssue
8990
return <ClosedEventView key={`closed${event.id}`} event={event} isIssue={isIssue} />;
9091
case EventType.Reopened:
9192
return <ReopenedEventView key={`reopened${event.id}`} event={event} isIssue={isIssue} />;
93+
case EventType.BaseRefChanged:
94+
return <BaseRefChangedEventView key={`baseref${event.id}`} event={event} />;
9295
case EventType.NewCommitsSinceReview:
9396
return <NewCommitsSinceReviewEventView key={`newCommits${event.id}`} />;
9497
case EventType.CopilotStarted:
@@ -516,6 +519,24 @@ const ReopenedEventView = ({ event, isIssue }: { event: ReopenedEvent, isIssue:
516519
);
517520
};
518521

522+
const BaseRefChangedEventView = ({ event }: { event: BaseRefChangedEvent }) => {
523+
const { actor, createdAt, currentRefName, previousRefName } = event;
524+
return (
525+
<div className="comment-container commit">
526+
<div className="commit-message">
527+
<div className="avatar-container">
528+
<Avatar for={actor} />
529+
</div>
530+
<AuthorLink for={actor} />
531+
<div className="message">
532+
changed the base branch from <code className="branch-tag">{previousRefName}</code> to <code className="branch-tag">{currentRefName}</code>
533+
</div>
534+
</div>
535+
<Timestamp date={createdAt} />
536+
</div>
537+
);
538+
};
539+
519540
const CopilotStartedEventView = (event: CopilotStartedEvent) => {
520541
const { createdAt, onBehalfOf, sessionLink } = event;
521542
const { openSessionLog } = useContext(PullRequestContext);

0 commit comments

Comments
 (0)