From 83f0dd19ca26761aaf012ed489daa9740fb02865 Mon Sep 17 00:00:00 2001 From: Ashley Willard Date: Fri, 21 Feb 2025 13:56:31 -0800 Subject: [PATCH 1/2] update the way we glob team files --- lib/code_ownership/private/owner_assigner.rb | 2 +- .../private/ownership_mappers/team_globs.rb | 30 ++++++++----------- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/lib/code_ownership/private/owner_assigner.rb b/lib/code_ownership/private/owner_assigner.rb index e6e1665..8b0f5ce 100644 --- a/lib/code_ownership/private/owner_assigner.rb +++ b/lib/code_ownership/private/owner_assigner.rb @@ -12,7 +12,7 @@ def self.assign_owners(globs_to_owning_team_map) # addresses the case where a directory name includes regex characters # such as `app/services/[test]/some_other_file.ts` mapping[glob] = owner if File.exist?(glob) - Dir.glob(glob).each do |file| + Dir.glob(glob) do |file| mapping[file] ||= owner end end diff --git a/lib/code_ownership/private/ownership_mappers/team_globs.rb b/lib/code_ownership/private/ownership_mappers/team_globs.rb index d97bfee..9caa5f2 100644 --- a/lib/code_ownership/private/ownership_mappers/team_globs.rb +++ b/lib/code_ownership/private/ownership_mappers/team_globs.rb @@ -20,17 +20,10 @@ def map_files_to_owners return @@map_files_to_owners if @@map_files_to_owners&.keys && @@map_files_to_owners.keys.count.positive? @@map_files_to_owners = CodeTeams.all.each_with_object({}) do |team, map| # rubocop:disable Style/ClassVars - TeamPlugins::Ownership.for(team).owned_globs.each do |glob| - Dir.glob(glob).each do |filename| - map[filename] = team - end - end + code_team = TeamPlugins::Ownership.for(team) - # Remove anything that is unowned - TeamPlugins::Ownership.for(team).unowned_globs.each do |glob| - Dir.glob(glob).each do |filename| - map.delete(filename) - end + (Dir.glob(code_team.owned_globs) - Dir.glob(code_team.unowned_globs)).each do |filename| + map[filename] = team end end end @@ -62,18 +55,19 @@ def description end def find_overlapping_globs mapped_files = T.let({}, T::Hash[String, T::Array[MappingContext]]) - CodeTeams.all.each_with_object({}) do |team, _map| - TeamPlugins::Ownership.for(team).owned_globs.each do |glob| - Dir.glob(glob).each do |filename| + CodeTeams.all.each do |team| + code_team = TeamPlugins::Ownership.for(team) + + code_team.owned_globs.each do |glob| + Dir.glob(glob) do |filename| mapped_files[filename] ||= [] T.must(mapped_files[filename]) << MappingContext.new(glob: glob, team: team) end end - # Remove anything that is unowned - TeamPlugins::Ownership.for(team).unowned_globs.each do |glob| - Dir.glob(glob).each do |filename| - mapped_files.reject! { |key, value| key == filename && value.any? { |context| context.team == team } } - end + + # Remove anything that is unowned, globbing them all at once + Dir.glob(code_team.unowned_globs) do |filename| + mapped_files.reject! { |key, value| key == filename && value.any? { |context| context.team == team } } end end From 171bcd9233fcab77f4555307d45fee72a295c993 Mon Sep 17 00:00:00 2001 From: Ashley Willard Date: Fri, 21 Feb 2025 13:59:54 -0800 Subject: [PATCH 2/2] bump version --- code_ownership.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code_ownership.gemspec b/code_ownership.gemspec index 5527e78..2f39122 100644 --- a/code_ownership.gemspec +++ b/code_ownership.gemspec @@ -1,6 +1,6 @@ Gem::Specification.new do |spec| spec.name = 'code_ownership' - spec.version = '1.38.3' + spec.version = '1.39.0' spec.authors = ['Gusto Engineers'] spec.email = ['dev@gusto.com'] spec.summary = 'A gem to help engineering teams declare ownership of code'