Skip to content

Commit 35f1fdb

Browse files
update the way we glob team files (#120)
* update the way we glob team files * bump version
1 parent 57935ed commit 35f1fdb

File tree

3 files changed

+14
-20
lines changed

3 files changed

+14
-20
lines changed

code_ownership.gemspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Gem::Specification.new do |spec|
22
spec.name = 'code_ownership'
3-
spec.version = '1.38.3'
3+
spec.version = '1.39.0'
44
spec.authors = ['Gusto Engineers']
55
spec.email = ['[email protected]']
66
spec.summary = 'A gem to help engineering teams declare ownership of code'

lib/code_ownership/private/owner_assigner.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ def self.assign_owners(globs_to_owning_team_map)
1212
# addresses the case where a directory name includes regex characters
1313
# such as `app/services/[test]/some_other_file.ts`
1414
mapping[glob] = owner if File.exist?(glob)
15-
Dir.glob(glob).each do |file|
15+
Dir.glob(glob) do |file|
1616
mapping[file] ||= owner
1717
end
1818
end

lib/code_ownership/private/ownership_mappers/team_globs.rb

+12-18
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,10 @@ def map_files_to_owners
2020
return @@map_files_to_owners if @@map_files_to_owners&.keys && @@map_files_to_owners.keys.count.positive?
2121

2222
@@map_files_to_owners = CodeTeams.all.each_with_object({}) do |team, map| # rubocop:disable Style/ClassVars
23-
TeamPlugins::Ownership.for(team).owned_globs.each do |glob|
24-
Dir.glob(glob).each do |filename|
25-
map[filename] = team
26-
end
27-
end
23+
code_team = TeamPlugins::Ownership.for(team)
2824

29-
# Remove anything that is unowned
30-
TeamPlugins::Ownership.for(team).unowned_globs.each do |glob|
31-
Dir.glob(glob).each do |filename|
32-
map.delete(filename)
33-
end
25+
(Dir.glob(code_team.owned_globs) - Dir.glob(code_team.unowned_globs)).each do |filename|
26+
map[filename] = team
3427
end
3528
end
3629
end
@@ -62,18 +55,19 @@ def description
6255
end
6356
def find_overlapping_globs
6457
mapped_files = T.let({}, T::Hash[String, T::Array[MappingContext]])
65-
CodeTeams.all.each_with_object({}) do |team, _map|
66-
TeamPlugins::Ownership.for(team).owned_globs.each do |glob|
67-
Dir.glob(glob).each do |filename|
58+
CodeTeams.all.each do |team|
59+
code_team = TeamPlugins::Ownership.for(team)
60+
61+
code_team.owned_globs.each do |glob|
62+
Dir.glob(glob) do |filename|
6863
mapped_files[filename] ||= []
6964
T.must(mapped_files[filename]) << MappingContext.new(glob: glob, team: team)
7065
end
7166
end
72-
# Remove anything that is unowned
73-
TeamPlugins::Ownership.for(team).unowned_globs.each do |glob|
74-
Dir.glob(glob).each do |filename|
75-
mapped_files.reject! { |key, value| key == filename && value.any? { |context| context.team == team } }
76-
end
67+
68+
# Remove anything that is unowned, globbing them all at once
69+
Dir.glob(code_team.unowned_globs) do |filename|
70+
mapped_files.reject! { |key, value| key == filename && value.any? { |context| context.team == team } }
7771
end
7872
end
7973

0 commit comments

Comments
 (0)