diff --git a/src/ownership.rs b/src/ownership.rs index 9a11c5f..c9f30fd 100644 --- a/src/ownership.rs +++ b/src/ownership.rs @@ -26,11 +26,17 @@ pub struct Entry { pub path: String, pub github_team: String, pub team_name: String, + pub disabled: bool, } impl Entry { fn to_row(&self) -> String { - format!("/{} {}", self.path, self.github_team) + let line = format!("/{} {}", self.path, self.github_team); + if self.disabled { + format!("# {}", line) + } else { + line + } } } diff --git a/src/ownership/mapper/package_mapper.rs b/src/ownership/mapper/package_mapper.rs index 271a812..cd387f7 100644 --- a/src/ownership/mapper/package_mapper.rs +++ b/src/ownership/mapper/package_mapper.rs @@ -73,14 +73,11 @@ impl PackageMapper { let team = team_by_name.get(&package.owner); if let Some(team) = team { - if team.avoid_ownership { - continue; - } - entries.push(Entry { path: format!("{}/**/**", package_root), github_team: team.github_team.to_owned(), team_name: team.name.to_owned(), + disabled: team.avoid_ownership, }); } } diff --git a/src/ownership/mapper/team_file_mapper.rs b/src/ownership/mapper/team_file_mapper.rs index 754ba8d..ee74f38 100644 --- a/src/ownership/mapper/team_file_mapper.rs +++ b/src/ownership/mapper/team_file_mapper.rs @@ -26,16 +26,13 @@ impl Mapper for TeamFileMapper { let team = team_by_name.get(owner); if let Some(team) = team { - if team.avoid_ownership { - continue; - } - let relative_path = self.project.relative_path(&owned_file.path); entries.push(Entry { path: relative_path.to_string_lossy().to_string(), github_team: team.github_team.to_owned(), team_name: team.name.to_owned(), + disabled: team.avoid_ownership, }); } } diff --git a/src/ownership/mapper/team_gem_mapper.rs b/src/ownership/mapper/team_gem_mapper.rs index 291c51c..1802e8f 100644 --- a/src/ownership/mapper/team_gem_mapper.rs +++ b/src/ownership/mapper/team_gem_mapper.rs @@ -19,15 +19,16 @@ impl Mapper for TeamGemMapper { let vendored_gem_by_name = self.project.vendored_gem_by_name(); let mut entries: Vec = Vec::new(); - for team in self.project.teams.iter().filter(|team| !team.avoid_ownership) { + for team in &self.project.teams { for owned_gem in &team.owned_gems { let vendored_gem = vendored_gem_by_name.get(owned_gem); if let Some(vendored_gem) = vendored_gem { entries.push(Entry { - path: self.project.relative_path(&vendored_gem.path).to_string_lossy().to_string(), + path: format!("{}/**/**", self.project.relative_path(&vendored_gem.path).to_string_lossy()), github_team: team.github_team.to_owned(), team_name: team.name.to_owned(), + disabled: team.avoid_ownership, }); } } diff --git a/src/ownership/mapper/team_glob_mapper.rs b/src/ownership/mapper/team_glob_mapper.rs index 495d67d..b30b31e 100644 --- a/src/ownership/mapper/team_glob_mapper.rs +++ b/src/ownership/mapper/team_glob_mapper.rs @@ -18,12 +18,13 @@ impl Mapper for TeamGlobMapper { fn entries(&self) -> Vec { let mut entries: Vec = Vec::new(); - for team in self.project.teams.iter().filter(|team| !team.avoid_ownership) { + for team in &self.project.teams { for owned_glob in &team.owned_globs { entries.push(Entry { path: owned_glob.to_owned(), github_team: team.github_team.to_owned(), team_name: team.name.to_owned(), + disabled: team.avoid_ownership, }); } } diff --git a/src/ownership/mapper/team_yml_mapper.rs b/src/ownership/mapper/team_yml_mapper.rs index 1737219..0939975 100644 --- a/src/ownership/mapper/team_yml_mapper.rs +++ b/src/ownership/mapper/team_yml_mapper.rs @@ -20,11 +20,12 @@ impl Mapper for TeamYmlMapper { fn entries(&self) -> Vec { let mut entries: Vec = Vec::new(); - for team in self.project.teams.iter().filter(|team| !team.avoid_ownership) { + for team in &self.project.teams { entries.push(Entry { path: self.project.relative_path(&team.path).to_string_lossy().to_string(), github_team: team.github_team.to_owned(), team_name: team.name.to_owned(), + disabled: team.avoid_ownership, }); } diff --git a/src/ownership/tests.rs b/src/ownership/tests.rs index 44c9ed4..dc40fe8 100644 --- a/src/ownership/tests.rs +++ b/src/ownership/tests.rs @@ -47,7 +47,6 @@ fn build_project_with_annotated_file() -> Project { packages: vec![], teams: vec![build_payroll_team()], vendored_gems: vec![], - unowned_globs: vec![], codeowners_file: "".to_owned(), } } @@ -70,7 +69,6 @@ fn build_project_with_team_specific_owned_globs() -> Project { packages: vec![], teams: vec![build_payroll_team_with_owned_glob()], vendored_gems: vec![], - unowned_globs: vec![], codeowners_file: "".to_owned(), } } @@ -93,7 +91,6 @@ fn build_project_with_packages() -> Project { ], teams: vec![build_payroll_team()], vendored_gems: vec![], - unowned_globs: vec![], codeowners_file: "".to_owned(), } } @@ -108,7 +105,6 @@ fn build_project_with_team_owned_gems() -> Project { path: Path::new("components/payroll_calculator").to_owned(), name: "payroll_calculator".to_owned(), }], - unowned_globs: vec![], codeowners_file: "".to_owned(), } } @@ -211,7 +207,7 @@ fn test_team_owned_gems() { "/config/teams/payroll.yml @Payroll-Eng", "", "# Team owned gems", - "/components/payroll_calculator @Payroll-Eng", + "/components/payroll_calculator/**/** @Payroll-Eng", "", ]) .join("\n") diff --git a/src/ownership/validator.rs b/src/ownership/validator.rs index 1abae85..0784525 100644 --- a/src/ownership/validator.rs +++ b/src/ownership/validator.rs @@ -148,11 +148,6 @@ impl Validator { .par_iter() .filter_map(|project_file| { let mut owners_and_source: HashMap<&String, Vec> = HashMap::new(); - - if project.skip_file(project_file) { - return None; - } - let relative_path = project.relative_path(&project_file.path); for owner_matcher in &owner_matchers { diff --git a/src/project.rs b/src/project.rs index a70d324..270c95a 100644 --- a/src/project.rs +++ b/src/project.rs @@ -22,7 +22,6 @@ pub struct Project { pub packages: Vec, pub vendored_gems: Vec, pub teams: Vec, - pub unowned_globs: Vec, pub codeowners_file: String, } @@ -192,7 +191,7 @@ impl Project { }) } - if matches_globs(&relative_path, &config.owned_globs) { + if matches_globs(&relative_path, &config.owned_globs) && !matches_globs(&relative_path, &config.unowned_globs) { owned_file_paths.push(absolute_path) } } @@ -219,7 +218,6 @@ impl Project { vendored_gems, teams, packages, - unowned_globs: config.unowned_globs.clone(), codeowners_file, }) } @@ -249,10 +247,6 @@ impl Project { result } - - pub fn skip_file(&self, file: &ProjectFile) -> bool { - matches_globs(self.relative_path(&file.path), &self.unowned_globs) - } } #[instrument(level = "debug", skip_all)] diff --git a/tests/fixtures/valid_project/.github/CODEOWNERS b/tests/fixtures/valid_project/.github/CODEOWNERS index c91ffdc..e010eab 100644 --- a/tests/fixtures/valid_project/.github/CODEOWNERS +++ b/tests/fixtures/valid_project/.github/CODEOWNERS @@ -26,4 +26,4 @@ /config/teams/payroll.yml @PayrollTeam # Team owned gems -/gems/payroll_calculator @PayrollTeam +/gems/payroll_calculator/**/** @PayrollTeam