@@ -109,7 +109,7 @@ pub(super) async fn handle_input<'a>(
109
109
// If the PR doesn't wait for a review, remove it from the workqueue completely.
110
110
// This handles situations such as labels being modified, which make the PR no longer to be
111
111
// in the "waiting for a review" state, or the PR being closed/merged.
112
- if !waits_for_a_review ( & pr. labels , pr. is_open ( ) , pr. draft ) {
112
+ if !waits_for_a_review ( & pr. labels , & pr . assignees , & pr . user , pr. is_open ( ) , pr. draft ) {
113
113
log:: info!(
114
114
"Removing PR {pr_number} from workqueue, because it is not waiting for a review." ,
115
115
) ;
@@ -202,8 +202,23 @@ pub async fn retrieve_pull_request_assignments(
202
202
. into_iter ( )
203
203
. map ( |l| Label { name : l. name } )
204
204
. collect :: < Vec < Label > > ( ) ;
205
+ let assignees = pr
206
+ . assignees
207
+ . as_ref ( )
208
+ . map ( |authors| authors. iter ( ) . map ( User :: from) . collect :: < Vec < _ > > ( ) )
209
+ . unwrap_or_default ( ) ;
210
+ let author = pr
211
+ . user
212
+ . as_ref ( )
213
+ . map ( |author| User :: from ( author. as_ref ( ) ) )
214
+ . unwrap_or_else ( || User {
215
+ login : "ghost" . to_string ( ) ,
216
+ id : 0 ,
217
+ } ) ;
205
218
if waits_for_a_review (
206
219
& labels,
220
+ & assignees,
221
+ & author,
207
222
pr. state == Some ( IssueState :: Open ) ,
208
223
pr. draft . unwrap_or_default ( ) ,
209
224
) {
@@ -271,14 +286,26 @@ fn delete_pr_from_all_queues(workqueue: &mut ReviewerWorkqueue, pr: PullRequestN
271
286
///
272
287
/// Note: this functionality is currently hardcoded for rust-lang/rust, other repos might use
273
288
/// different labels.
274
- fn waits_for_a_review ( labels : & [ Label ] , is_open : bool , is_draft : bool ) -> bool {
289
+ fn waits_for_a_review (
290
+ labels : & [ Label ] ,
291
+ assignees : & [ User ] ,
292
+ author : & User ,
293
+ is_open : bool ,
294
+ is_draft : bool ,
295
+ ) -> bool {
275
296
let is_blocked = labels
276
297
. iter ( )
277
298
. any ( |l| l. name == "S-blocked" || l. name == "S-inactive" ) ;
278
299
let is_rollup = labels. iter ( ) . any ( |l| l. name == "rollup" ) ;
279
300
let is_waiting_for_reviewer = labels. iter ( ) . any ( |l| l. name == "S-waiting-on-review" ) ;
280
-
281
- is_open && !is_draft && !is_blocked && !is_rollup && is_waiting_for_reviewer
301
+ let is_assigned_to_author = assignees. contains ( author) ;
302
+
303
+ is_open
304
+ && !is_draft
305
+ && !is_blocked
306
+ && !is_rollup
307
+ && is_waiting_for_reviewer
308
+ && !is_assigned_to_author
282
309
}
283
310
284
311
#[ cfg( test) ]
0 commit comments