summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2019-04-07 17:06:49 -0500
committerGitHub <noreply@github.com>2019-04-07 17:06:49 -0500
commitc5df4727550933a300deeeb1e6c96ff1d0cd2d00 (patch)
treeaa270437fe1f88faa8e1094c513ad7feebefaf8e
parent8bfc13aab1049fa7904c026aae4038622eb1b19f (diff)
parentb4e188373bb858b890c9490456f99ee0bb69719e (diff)
Merge pull request #52 from rust-lang/rfcbot-libs
Exclude members from rfcbot for the libs team
-rw-r--r--src/schema.rs2
-rw-r--r--src/static_api.rs1
-rw-r--r--src/validate.rs29
-rw-r--r--teams/libs.toml5
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"