@@ -67,6 +67,7 @@ import * as limitedSchema from './queriesLimited.gql';
67
67
import * as sharedSchema from './queriesShared.gql' ;
68
68
import {
69
69
convertRESTPullRequestToRawPullRequest ,
70
+ eventTime ,
70
71
getAvatarWithEnterpriseFallback ,
71
72
getOverrideBranch ,
72
73
insertNewCommitsSinceReview ,
@@ -1478,7 +1479,7 @@ export class GitHubRepository extends Disposable {
1478
1479
/**
1479
1480
* TODO: @alexr00 we should delete this https://github.com/microsoft/vscode-pull-request-github/issues/6965
1480
1481
*/
1481
- async getCopilotTimelineEvents ( issueModel : IssueModel ) : Promise < Common . TimelineEvent [ ] > {
1482
+ async getCopilotTimelineEvents ( issueModel : IssueModel , skipMerge : boolean = false ) : Promise < Common . TimelineEvent [ ] > {
1482
1483
if ( ! COPILOT_ACCOUNTS [ issueModel . author . login ] ) {
1483
1484
return [ ] ;
1484
1485
}
@@ -1494,7 +1495,24 @@ export class GitHubRepository extends Disposable {
1494
1495
per_page : 100
1495
1496
} ) ;
1496
1497
1497
- return parseSelectRestTimelineEvents ( issueModel , timeline ) ;
1498
+ const timelineEvents = parseSelectRestTimelineEvents ( issueModel , timeline ) ;
1499
+ if ( timelineEvents . length === 0 ) {
1500
+ return [ ] ;
1501
+ }
1502
+ if ( ! skipMerge ) {
1503
+ const oldLastEvent = issueModel . timelineEvents . length > 0 ? issueModel . timelineEvents [ issueModel . timelineEvents . length - 1 ] : undefined ;
1504
+ let allEvents : Common . TimelineEvent [ ] ;
1505
+ if ( ! oldLastEvent ) {
1506
+ allEvents = timelineEvents ;
1507
+ } else {
1508
+ const oldEventTime = ( eventTime ( oldLastEvent ) ?? 0 ) ;
1509
+ const newEvents = timelineEvents . filter ( event => ( eventTime ( event ) ?? 0 ) > oldEventTime ) ;
1510
+ allEvents = [ ...issueModel . timelineEvents , ...newEvents ] ;
1511
+ }
1512
+ issueModel . timelineEvents = allEvents ;
1513
+ this . _onDidChangePullRequests . fire ( ) ;
1514
+ }
1515
+ return timelineEvents ;
1498
1516
} catch ( e ) {
1499
1517
Logger . error ( `Error fetching Copilot timeline events of issue #${ issueModel . number } - ${ formatError ( e ) } ` , GitHubRepository . ID ) ;
1500
1518
return [ ] ;
@@ -1520,7 +1538,7 @@ export class GitHubRepository extends Disposable {
1520
1538
return [ ] ;
1521
1539
}
1522
1540
const ret = data . repository . pullRequest . timelineItems . nodes ;
1523
- const events = await parseCombinedTimelineEvents ( ret , await this . getCopilotTimelineEvents ( issueModel ) , this ) ;
1541
+ const events = await parseCombinedTimelineEvents ( ret , await this . getCopilotTimelineEvents ( issueModel , true ) , this ) ;
1524
1542
1525
1543
const crossRefs = new Map ( events
1526
1544
. filter ( ( event ) : event is Common . CrossReferencedEvent => {
@@ -1604,7 +1622,7 @@ export class GitHubRepository extends Disposable {
1604
1622
1605
1623
1606
1624
const ret = data ?. repository ?. pullRequest . timelineItems . nodes ?? [ ] ;
1607
- const events = await parseCombinedTimelineEvents ( ret , await this . getCopilotTimelineEvents ( pullRequestModel ) , this ) ;
1625
+ const events = await parseCombinedTimelineEvents ( ret , await this . getCopilotTimelineEvents ( pullRequestModel , true ) , this ) ;
1608
1626
1609
1627
this . addReviewTimelineEventComments ( events , reviewThreads ) ;
1610
1628
insertNewCommitsSinceReview ( events , latestReviewCommitInfo ?. sha , currentUser , pullRequestModel . head ) ;
0 commit comments