@@ -840,13 +840,13 @@ async fn find_reviewer_from_names(
840
840
. to_string ( ) )
841
841
}
842
842
843
- #[ derive( Eq , PartialEq , Hash ) ]
843
+ #[ derive( Eq , PartialEq , Hash , Debug ) ]
844
844
struct ReviewerCandidate {
845
845
name : String ,
846
846
origin : ReviewerCandidateOrigin ,
847
847
}
848
848
849
- #[ derive( Eq , PartialEq , Hash , Copy , Clone ) ]
849
+ #[ derive( Eq , PartialEq , Hash , Copy , Clone , Debug ) ]
850
850
enum ReviewerCandidateOrigin {
851
851
/// This reviewer was directly requested for a review.
852
852
Direct ,
@@ -976,7 +976,7 @@ async fn candidate_reviewers_from_names<'a>(
976
976
977
977
// Set of candidate usernames to choose from.
978
978
// We go through each expanded candidate and store either success or an error for them.
979
- let mut candidates: Vec < Result < String , FindReviewerError > > = Vec :: new ( ) ;
979
+ let mut candidates: Vec < Result < ReviewerCandidate , FindReviewerError > > = Vec :: new ( ) ;
980
980
let previous_reviewer_names = get_previous_reviewer_names ( db, issue) . await ;
981
981
982
982
// Step 2: pre-filter candidates based on checks that we can perform quickly
@@ -1022,7 +1022,7 @@ async fn candidate_reviewers_from_names<'a>(
1022
1022
if let Some ( error_reason) = reason {
1023
1023
candidates. push ( Err ( error_reason) ) ;
1024
1024
} else {
1025
- candidates. push ( Ok ( reviewer_candidate. name ) ) ;
1025
+ candidates. push ( Ok ( reviewer_candidate) ) ;
1026
1026
}
1027
1027
}
1028
1028
assert_eq ! ( candidates. len( ) , expanded_count) ;
@@ -1031,7 +1031,7 @@ async fn candidate_reviewers_from_names<'a>(
1031
1031
// Step 3: gather potential usernames to form a DB query for review preferences
1032
1032
let usernames: Vec < String > = candidates
1033
1033
. iter ( )
1034
- . filter_map ( |res| res. as_deref ( ) . ok ( ) . map ( |s| s. to_string ( ) ) )
1034
+ . filter_map ( |res| res. as_ref ( ) . ok ( ) . map ( |s| s. name . to_string ( ) ) )
1035
1035
. collect ( ) ;
1036
1036
let usernames: Vec < & str > = usernames. iter ( ) . map ( |s| s. as_str ( ) ) . collect ( ) ;
1037
1037
let review_prefs = get_review_prefs_batch ( db, & usernames)
@@ -1044,35 +1044,40 @@ async fn candidate_reviewers_from_names<'a>(
1044
1044
// Step 4: check review preferences
1045
1045
candidates = candidates
1046
1046
. into_iter ( )
1047
- . map ( |username | {
1047
+ . map ( |candidate | {
1048
1048
// Only consider candidates that did not have an earlier error
1049
- let username = username?;
1049
+ let candidate = candidate?;
1050
+ let username = & candidate. name ;
1050
1051
1051
1052
// If no review prefs were found, we assume the default unlimited
1052
1053
// review capacity and being on rotation.
1053
1054
let Some ( review_prefs) = review_prefs. get ( username. as_str ( ) ) else {
1054
- return Ok ( username ) ;
1055
+ return Ok ( candidate ) ;
1055
1056
} ;
1056
1057
if let Some ( capacity) = review_prefs. max_assigned_prs {
1057
1058
let assigned_prs = workqueue. assigned_pr_count ( review_prefs. user_id as UserId ) ;
1058
1059
// Is the reviewer at max capacity?
1059
1060
if ( assigned_prs as i32 ) >= capacity {
1060
- return Err ( FindReviewerError :: ReviewerAtMaxCapacity { username } ) ;
1061
+ return Err ( FindReviewerError :: ReviewerAtMaxCapacity {
1062
+ username : username. clone ( ) ,
1063
+ } ) ;
1061
1064
}
1062
1065
}
1063
1066
if review_prefs. rotation_mode == RotationMode :: OffRotation {
1064
- return Err ( FindReviewerError :: ReviewerOffRotation { username } ) ;
1067
+ return Err ( FindReviewerError :: ReviewerOffRotation {
1068
+ username : username. clone ( ) ,
1069
+ } ) ;
1065
1070
}
1066
1071
1067
- return Ok ( username ) ;
1072
+ return Ok ( candidate ) ;
1068
1073
} )
1069
1074
. collect ( ) ;
1070
1075
}
1071
1076
assert_eq ! ( candidates. len( ) , expanded_count) ;
1072
1077
1073
1078
let valid_candidates: HashSet < & str > = candidates
1074
1079
. iter ( )
1075
- . filter_map ( |res| res. as_deref ( ) . ok ( ) )
1080
+ . filter_map ( |res| res. as_ref ( ) . ok ( ) . map ( |c| c . name . as_str ( ) ) )
1076
1081
. collect ( ) ;
1077
1082
1078
1083
log:: debug!(
0 commit comments