diff options
author | Alex Crichton <alex@alexcrichton.com> | 2019-04-07 17:06:49 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-07 17:06:49 -0500 |
commit | c5df4727550933a300deeeb1e6c96ff1d0cd2d00 (patch) | |
tree | aa270437fe1f88faa8e1094c513ad7feebefaf8e | |
parent | 8bfc13aab1049fa7904c026aae4038622eb1b19f (diff) | |
parent | b4e188373bb858b890c9490456f99ee0bb69719e (diff) |
Merge pull request #52 from rust-lang/rfcbot-libs
Exclude members from rfcbot for the libs team
-rw-r--r-- | src/schema.rs | 2 | ||||
-rw-r--r-- | src/static_api.rs | 1 | ||||
-rw-r--r-- | src/validate.rs | 29 | ||||
-rw-r--r-- | teams/libs.toml | 5 |
4 files changed, 37 insertions, 0 deletions
diff --git a/src/schema.rs b/src/schema.rs index be6b7a1..c7a1b48 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -229,6 +229,8 @@ pub(crate) struct RfcbotData { pub(crate) label: String, pub(crate) name: String, pub(crate) ping: String, + #[serde(default)] + pub(crate) exclude_members: Vec<String>, } pub(crate) struct DiscordInvite<'a> { diff --git a/src/static_api.rs b/src/static_api.rs index 3348d74..c752bc3 100644 --- a/src/static_api.rs +++ b/src/static_api.rs @@ -122,6 +122,7 @@ impl<'a> Generator<'a> { .members(&self.data)? .into_iter() .map(|s| s.to_string()) + .filter(|member| !rfcbot.exclude_members.contains(&member)) .collect::<Vec<_>>(); members.sort(); teams.insert( diff --git a/src/validate.rs b/src/validate.rs index 21570d2..8c33570 100644 --- a/src/validate.rs +++ b/src/validate.rs @@ -19,6 +19,7 @@ static CHECKS: &[fn(&Data, &mut Vec<String>)] = &[ validate_duplicate_permissions, validate_permissions, validate_rfcbot_labels, + validate_rfcbot_exclude_members, ]; pub(crate) fn validate(data: &Data) -> Result<(), Error> { @@ -298,6 +299,34 @@ fn validate_rfcbot_labels(data: &Data, errors: &mut Vec<String>) { }); } +/// Ensure rfcbot's exclude-members only contains not duplicated team members +fn validate_rfcbot_exclude_members(data: &Data, errors: &mut Vec<String>) { + wrapper(data.teams(), errors, move |team, errors| { + if let Some(rfcbot) = team.rfcbot_data() { + let mut exclude = HashSet::new(); + let members = team.members(data)?; + wrapper(rfcbot.exclude_members.iter(), errors, move |member, _| { + if !exclude.insert(member) { + bail!( + "duplicate member in `{}` rfcbot.exclude-members: {}", + team.name(), + member + ); + } + if !members.contains(member.as_str()) { + bail!( + "person `{}` is not a member of team `{}` (in rfcbot.exclude-members)", + member, + team.name() + ); + } + Ok(()) + }); + } + Ok(()) + }); +} + fn wrapper<T, I, F>(iter: I, errors: &mut Vec<String>, mut func: F) where I: Iterator<Item = T>, diff --git a/teams/libs.toml b/teams/libs.toml index 6aebfb3..38128ae 100644 --- a/teams/libs.toml +++ b/teams/libs.toml @@ -24,6 +24,11 @@ bors.rust.review = true label = "T-libs" name = "Libraries" ping = "rust-lang/libs" +exclude-members = [ + "BurntSushi", + "KodrAus", + "aturon", +] [website] page = "library" |