@@ -20,7 +20,7 @@ pub(super) async fn handle_pull_request_edited(
20
20
let pr = & payload. pull_request ;
21
21
let pr_number = pr. number ;
22
22
let pr_model = db
23
- . get_or_create_pull_request (
23
+ . upsert_pull_request (
24
24
repo_state. repository ( ) ,
25
25
pr_number,
26
26
& pr. base . name ,
@@ -48,12 +48,13 @@ pub(super) async fn handle_pull_request_edited(
48
48
pub ( super ) async fn handle_push_to_pull_request (
49
49
repo_state : Arc < RepositoryState > ,
50
50
db : Arc < PgDbClient > ,
51
+ mergeable_queue : MergeableQueueSender ,
51
52
payload : PullRequestPushed ,
52
53
) -> anyhow:: Result < ( ) > {
53
54
let pr = & payload. pull_request ;
54
55
let pr_number = pr. number ;
55
56
let pr_model = db
56
- . get_or_create_pull_request (
57
+ . upsert_pull_request (
57
58
repo_state. repository ( ) ,
58
59
pr_number,
59
60
& pr. base . name ,
@@ -62,6 +63,8 @@ pub(super) async fn handle_push_to_pull_request(
62
63
)
63
64
. await ?;
64
65
66
+ mergeable_queue. enqueue ( repo_state. repository ( ) . clone ( ) , pr_number) ;
67
+
65
68
if !pr_model. is_approved ( ) {
66
69
return Ok ( ( ) ) ;
67
70
}
@@ -74,6 +77,7 @@ pub(super) async fn handle_push_to_pull_request(
74
77
pub ( super ) async fn handle_pull_request_opened (
75
78
repo_state : Arc < RepositoryState > ,
76
79
db : Arc < PgDbClient > ,
80
+ mergeable_queue : MergeableQueueSender ,
77
81
payload : PullRequestOpened ,
78
82
) -> anyhow:: Result < ( ) > {
79
83
let pr_status = if payload. draft {
@@ -87,7 +91,11 @@ pub(super) async fn handle_pull_request_opened(
87
91
& payload. pull_request . base . name ,
88
92
pr_status,
89
93
)
90
- . await
94
+ . await ?;
95
+
96
+ mergeable_queue. enqueue ( repo_state. repository ( ) . clone ( ) , payload. pull_request . number ) ;
97
+
98
+ Ok ( ( ) )
91
99
}
92
100
93
101
pub ( super ) async fn handle_pull_request_closed (
@@ -119,14 +127,23 @@ pub(super) async fn handle_pull_request_merged(
119
127
pub ( super ) async fn handle_pull_request_reopened (
120
128
repo_state : Arc < RepositoryState > ,
121
129
db : Arc < PgDbClient > ,
130
+ mergeable_queue : MergeableQueueSender ,
122
131
payload : PullRequestReopened ,
123
132
) -> anyhow:: Result < ( ) > {
124
- db. set_pr_status (
133
+ let pr = & payload. pull_request ;
134
+ let pr_number = pr. number ;
135
+ db. upsert_pull_request (
125
136
repo_state. repository ( ) ,
126
- payload. pull_request . number ,
127
- PullRequestStatus :: Open ,
137
+ pr_number,
138
+ & pr. base . name ,
139
+ pr. mergeable_state . clone ( ) . into ( ) ,
140
+ & pr. status ,
128
141
)
129
- . await
142
+ . await ?;
143
+
144
+ mergeable_queue. enqueue ( repo_state. repository ( ) . clone ( ) , pr_number) ;
145
+
146
+ Ok ( ( ) )
130
147
}
131
148
132
149
pub ( super ) async fn handle_pull_request_converted_to_draft (
@@ -506,4 +523,73 @@ mod tests {
506
523
} )
507
524
. await ;
508
525
}
526
+
527
+ #[ sqlx:: test]
528
+ async fn enqueue_prs_on_pr_opened ( pool : sqlx:: PgPool ) {
529
+ run_test ( pool, |mut tester| async {
530
+ tester. open_pr ( default_repo_name ( ) , false ) . await ?;
531
+ tester
532
+ . wait_for_default_pr ( |pr| pr. mergeable_state == MergeableState :: Unknown )
533
+ . await ?;
534
+ tester
535
+ . default_repo ( )
536
+ . lock ( )
537
+ . get_pr_mut ( default_pr_number ( ) )
538
+ . mergeable_state = OctocrabMergeableState :: Dirty ;
539
+ tester
540
+ . wait_for_default_pr ( |pr| pr. mergeable_state == MergeableState :: HasConflicts )
541
+ . await ?;
542
+ Ok ( tester)
543
+ } )
544
+ . await ;
545
+ }
546
+
547
+ #[ sqlx:: test]
548
+ async fn enqueue_prs_on_pr_reopened ( pool : sqlx:: PgPool ) {
549
+ run_test ( pool, |mut tester| async {
550
+ tester
551
+ . default_repo ( )
552
+ . lock ( )
553
+ . get_pr_mut ( default_pr_number ( ) )
554
+ . mergeable_state = OctocrabMergeableState :: Unknown ;
555
+ tester
556
+ . reopen_pr ( default_repo_name ( ) , default_pr_number ( ) )
557
+ . await ?;
558
+ tester
559
+ . wait_for_default_pr ( |pr| pr. mergeable_state == MergeableState :: Unknown )
560
+ . await ?;
561
+ tester
562
+ . default_repo ( )
563
+ . lock ( )
564
+ . get_pr_mut ( default_pr_number ( ) )
565
+ . mergeable_state = OctocrabMergeableState :: Dirty ;
566
+ tester
567
+ . wait_for_default_pr ( |pr| pr. mergeable_state == MergeableState :: HasConflicts )
568
+ . await ?;
569
+ Ok ( tester)
570
+ } )
571
+ . await ;
572
+ }
573
+
574
+ #[ sqlx:: test]
575
+ async fn enqueue_prs_on_push_to_pr ( pool : sqlx:: PgPool ) {
576
+ run_test ( pool, |mut tester| async {
577
+ tester
578
+ . push_to_pr ( default_repo_name ( ) , default_pr_number ( ) )
579
+ . await ?;
580
+ tester
581
+ . wait_for_default_pr ( |pr| pr. mergeable_state == MergeableState :: Unknown )
582
+ . await ?;
583
+ tester
584
+ . default_repo ( )
585
+ . lock ( )
586
+ . get_pr_mut ( default_pr_number ( ) )
587
+ . mergeable_state = OctocrabMergeableState :: Dirty ;
588
+ tester
589
+ . wait_for_default_pr ( |pr| pr. mergeable_state == MergeableState :: HasConflicts )
590
+ . await ?;
591
+ Ok ( tester)
592
+ } )
593
+ . await ;
594
+ }
509
595
}
0 commit comments