Skip to content

Commit 87f3116

Browse files
committed
github: don't request reviews if no diff from current reviewer list
1 parent 3b99392 commit 87f3116

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

lib/action.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ module Action (Github_api : Api.Github) (Slack_api : Api.Slack) = struct
211211
let do_github_tasks ctx (req : Github.t) =
212212
let cfg = Context.get_config_exn ctx in
213213
let project_owners (pull_request : pull_request) repository number =
214-
match Github.get_project_owners pull_request.labels cfg.project_owners with
214+
match Github.get_project_owners pull_request cfg.project_owners with
215215
| Some reviewers ->
216216
( match%lwt Github_api.request_reviewers ~ctx ~repo:repository ~number ~reviewers with
217217
| Ok () -> Lwt.return_unit

lib/github.ml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,8 @@ let gh_link_of_string url_str =
140140
end
141141
| _ | (exception Re2.Exceptions.Regex_match_failed _) -> None
142142

143-
let get_project_owners (labels : label list) ({ rules } : Config_t.project_owners) =
144-
List.fold_left labels ~init:[] ~f:(fun acc l -> List.rev_append (Rule.Project_owners.match_rules l ~rules) acc)
143+
let get_project_owners (pr : pull_request) ({ rules } : Config_t.project_owners) =
144+
List.fold_left pr.labels ~init:[] ~f:(fun acc l -> List.rev_append (Rule.Project_owners.match_rules l ~rules) acc)
145145
|> List.dedup_and_sort ~compare:String.compare
146146
|> List.partition_map ~f:(fun reviewer ->
147147
try
@@ -150,4 +150,8 @@ let get_project_owners (labels : label list) ({ rules } : Config_t.project_owner
150150
with Re2.Exceptions.Regex_match_failed _ -> First reviewer
151151
)
152152
|> fun (reviewers, team_reviewers) ->
153+
let already_requested = List.map ~f:(fun r -> r.login) pr.requested_reviewers in
154+
let already_requested_team = List.map ~f:(fun r -> r.slug) pr.requested_teams in
155+
let reviewers = List.filter ~f:(not $ List.mem already_requested ~equal:String.equal) reviewers in
156+
let team_reviewers = List.filter ~f:(not $ List.mem already_requested_team ~equal:String.equal) team_reviewers in
153157
if List.is_empty reviewers && List.is_empty team_reviewers then None else Some { reviewers; team_reviewers }

0 commit comments

Comments
 (0)