code_ownership 2.1.0-x86_64-linux → 2.1.1-x86_64-linux
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/code_ownership/3.2/code_ownership.so +0 -0
- data/lib/code_ownership/3.3/code_ownership.so +0 -0
- data/lib/code_ownership/3.4/code_ownership.so +0 -0
- data/lib/code_ownership/4.0/code_ownership.so +0 -0
- data/lib/code_ownership/cli.rb +1 -0
- data/lib/code_ownership/private/file_path_finder.rb +3 -7
- data/lib/code_ownership/private/file_path_team_cache.rb +5 -9
- data/lib/code_ownership/private/for_file_output_builder.rb +0 -1
- data/lib/code_ownership/private/team_finder.rb +8 -14
- data/lib/code_ownership/version.rb +2 -2
- data/lib/code_ownership.rb +12 -17
- metadata +6 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: adae3a62f615f131fac8f1ecd05a6888cd12d32136c65ba1016640d56d5a08ea
|
|
4
|
+
data.tar.gz: 52aacacd5d5f190336353cc4fe4aca00fc8b79fc1c2de95e3cf791f3a69e5d1d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 581f3954eac7da7cf5079c9871bd653668873655c3fd24db3746ba2378291a6a36763e74faa47c93c63a67152f6cb8fea59c53bdec743f4bad57528f73f85e12
|
|
7
|
+
data.tar.gz: cbbf56062481c954cc32af8375a388bdd3e79d562f9d2d8069aa86e5984539d56c8285ae1ea56e7e964de004ce9fcdf08a2194521ef0e2d56841125201febf1b
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
data/lib/code_ownership/cli.rb
CHANGED
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
3
2
|
# typed: strict
|
|
4
3
|
|
|
5
4
|
module CodeOwnership
|
|
6
5
|
module Private
|
|
7
6
|
module FilePathFinder
|
|
8
|
-
module_function
|
|
9
|
-
|
|
10
7
|
extend T::Sig
|
|
11
|
-
extend T::Helpers
|
|
12
8
|
|
|
13
9
|
# Returns a string version of the relative path to a Rails constant,
|
|
14
10
|
# or nil if it can't find anything
|
|
15
|
-
sig { params(klass: T.nilable(T.any(T::Class[T.anything], Module))).returns(T.nilable(String)) }
|
|
16
|
-
def path_from_klass(klass)
|
|
11
|
+
sig { params(klass: T.nilable(T.any(T::Class[T.anything], T::Module[T.anything]))).returns(T.nilable(String)) }
|
|
12
|
+
def self.path_from_klass(klass)
|
|
17
13
|
if klass
|
|
18
14
|
path = Object.const_source_location(klass.to_s)&.first
|
|
19
15
|
(path && Pathname.new(path).relative_path_from(Pathname.pwd).to_s) || nil
|
|
@@ -23,7 +19,7 @@ module CodeOwnership
|
|
|
23
19
|
end
|
|
24
20
|
|
|
25
21
|
sig { params(backtrace: T.nilable(T::Array[String])).returns(T::Enumerable[String]) }
|
|
26
|
-
def from_backtrace(backtrace)
|
|
22
|
+
def self.from_backtrace(backtrace)
|
|
27
23
|
return [] unless backtrace
|
|
28
24
|
|
|
29
25
|
# The pattern for a backtrace hasn't changed in forever and is considered
|
|
@@ -1,37 +1,33 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
3
2
|
# typed: strict
|
|
4
3
|
|
|
5
4
|
module CodeOwnership
|
|
6
5
|
module Private
|
|
7
6
|
module FilePathTeamCache
|
|
8
|
-
module_function
|
|
9
|
-
|
|
10
7
|
extend T::Sig
|
|
11
|
-
extend T::Helpers
|
|
12
8
|
|
|
13
9
|
sig { params(file_path: String).returns(T.nilable(CodeTeams::Team)) }
|
|
14
|
-
def get(file_path)
|
|
10
|
+
def self.get(file_path)
|
|
15
11
|
cache[file_path]
|
|
16
12
|
end
|
|
17
13
|
|
|
18
14
|
sig { params(file_path: String, team: T.nilable(CodeTeams::Team)).void }
|
|
19
|
-
def set(file_path, team)
|
|
15
|
+
def self.set(file_path, team)
|
|
20
16
|
cache[file_path] = team
|
|
21
17
|
end
|
|
22
18
|
|
|
23
19
|
sig { params(file_path: String).returns(T::Boolean) }
|
|
24
|
-
def cached?(file_path)
|
|
20
|
+
def self.cached?(file_path)
|
|
25
21
|
cache.key?(file_path)
|
|
26
22
|
end
|
|
27
23
|
|
|
28
24
|
sig { void }
|
|
29
|
-
def bust_cache!
|
|
25
|
+
def self.bust_cache!
|
|
30
26
|
@cache = nil
|
|
31
27
|
end
|
|
32
28
|
|
|
33
29
|
sig { returns(T::Hash[String, T.nilable(CodeTeams::Team)]) }
|
|
34
|
-
def cache
|
|
30
|
+
def self.cache
|
|
35
31
|
@cache ||= T.let(@cache,
|
|
36
32
|
T.nilable(T::Hash[String, T.nilable(CodeTeams::Team)]))
|
|
37
33
|
@cache ||= {}
|
|
@@ -1,19 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
3
2
|
# typed: strict
|
|
4
3
|
|
|
5
4
|
module CodeOwnership
|
|
6
5
|
module Private
|
|
7
6
|
module TeamFinder
|
|
8
|
-
module_function
|
|
9
|
-
|
|
10
7
|
extend T::Sig
|
|
11
|
-
extend T::Helpers
|
|
12
|
-
|
|
13
|
-
requires_ancestor { Kernel }
|
|
14
8
|
|
|
15
9
|
sig { params(file_path: String, allow_raise: T::Boolean).returns(T.nilable(CodeTeams::Team)) }
|
|
16
|
-
def for_file(file_path, allow_raise: false)
|
|
10
|
+
def self.for_file(file_path, allow_raise: false)
|
|
17
11
|
return nil if file_path.start_with?('./')
|
|
18
12
|
|
|
19
13
|
return FilePathTeamCache.get(file_path) if FilePathTeamCache.cached?(file_path)
|
|
@@ -31,7 +25,7 @@ module CodeOwnership
|
|
|
31
25
|
end
|
|
32
26
|
|
|
33
27
|
sig { params(files: T::Array[String], allow_raise: T::Boolean).returns(T::Hash[String, T.nilable(CodeTeams::Team)]) }
|
|
34
|
-
def teams_for_files(files, allow_raise: false)
|
|
28
|
+
def self.teams_for_files(files, allow_raise: false)
|
|
35
29
|
result = {}
|
|
36
30
|
|
|
37
31
|
# Collect cached results and identify non-cached files
|
|
@@ -57,8 +51,8 @@ module CodeOwnership
|
|
|
57
51
|
result
|
|
58
52
|
end
|
|
59
53
|
|
|
60
|
-
sig { params(klass: T.nilable(T.any(T::Class[T.anything], Module))).returns(T.nilable(::CodeTeams::Team)) }
|
|
61
|
-
def for_class(klass)
|
|
54
|
+
sig { params(klass: T.nilable(T.any(T::Class[T.anything], T::Module[T.anything]))).returns(T.nilable(::CodeTeams::Team)) }
|
|
55
|
+
def self.for_class(klass)
|
|
62
56
|
file_path = FilePathFinder.path_from_klass(klass)
|
|
63
57
|
return nil if file_path.nil?
|
|
64
58
|
|
|
@@ -66,7 +60,7 @@ module CodeOwnership
|
|
|
66
60
|
end
|
|
67
61
|
|
|
68
62
|
sig { params(package: Packs::Pack).returns(T.nilable(::CodeTeams::Team)) }
|
|
69
|
-
def for_package(package)
|
|
63
|
+
def self.for_package(package)
|
|
70
64
|
owner_name = package.raw_hash['owner'] || package.metadata['owner']
|
|
71
65
|
return nil if owner_name.nil?
|
|
72
66
|
|
|
@@ -74,12 +68,12 @@ module CodeOwnership
|
|
|
74
68
|
end
|
|
75
69
|
|
|
76
70
|
sig { params(backtrace: T.nilable(T::Array[String]), excluded_teams: T::Array[::CodeTeams::Team]).returns(T.nilable(::CodeTeams::Team)) }
|
|
77
|
-
def for_backtrace(backtrace, excluded_teams: [])
|
|
71
|
+
def self.for_backtrace(backtrace, excluded_teams: [])
|
|
78
72
|
first_owned_file_for_backtrace(backtrace, excluded_teams: excluded_teams)&.first
|
|
79
73
|
end
|
|
80
74
|
|
|
81
75
|
sig { params(backtrace: T.nilable(T::Array[String]), excluded_teams: T::Array[::CodeTeams::Team]).returns(T.nilable([::CodeTeams::Team, String])) }
|
|
82
|
-
def first_owned_file_for_backtrace(backtrace, excluded_teams: [])
|
|
76
|
+
def self.first_owned_file_for_backtrace(backtrace, excluded_teams: [])
|
|
83
77
|
FilePathFinder.from_backtrace(backtrace).each do |file|
|
|
84
78
|
team = for_file(file)
|
|
85
79
|
if team && !excluded_teams.include?(team)
|
|
@@ -91,7 +85,7 @@ module CodeOwnership
|
|
|
91
85
|
end
|
|
92
86
|
|
|
93
87
|
sig { params(team_name: String, allow_raise: T::Boolean).returns(T.nilable(CodeTeams::Team)) }
|
|
94
|
-
def find_team!(team_name, allow_raise: false)
|
|
88
|
+
def self.find_team!(team_name, allow_raise: false)
|
|
95
89
|
team = CodeTeams.find(team_name)
|
|
96
90
|
if team.nil? && allow_raise
|
|
97
91
|
raise(StandardError, "Could not find team with name: `#{team_name}`. Make sure the team is one of `#{CodeTeams.all.map(&:name).sort}`")
|
data/lib/code_ownership.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
3
2
|
# typed: strict
|
|
4
3
|
|
|
5
4
|
require 'code_teams'
|
|
@@ -25,17 +24,13 @@ if defined?(Packwerk)
|
|
|
25
24
|
end
|
|
26
25
|
|
|
27
26
|
module CodeOwnership
|
|
28
|
-
module_function
|
|
29
|
-
|
|
30
27
|
extend T::Sig
|
|
31
|
-
extend T::Helpers
|
|
32
28
|
|
|
33
|
-
requires_ancestor { Kernel }
|
|
34
29
|
GlobsToOwningTeamMap = T.type_alias { T::Hash[String, CodeTeams::Team] }
|
|
35
30
|
|
|
36
31
|
# Returns the version of the code_ownership gem and the codeowners-rs gem.
|
|
37
32
|
sig { returns(T::Array[String]) }
|
|
38
|
-
def version
|
|
33
|
+
def self.version
|
|
39
34
|
["code_ownership version: #{VERSION}",
|
|
40
35
|
"codeowners-rs version: #{::RustCodeOwners.version}"]
|
|
41
36
|
end
|
|
@@ -65,7 +60,7 @@ module CodeOwnership
|
|
|
65
60
|
# # => raises exception if no owner found
|
|
66
61
|
#
|
|
67
62
|
sig { params(file: String, from_codeowners: T::Boolean, allow_raise: T::Boolean).returns(T.nilable(CodeTeams::Team)) }
|
|
68
|
-
def for_file(file, from_codeowners: true, allow_raise: false)
|
|
63
|
+
def self.for_file(file, from_codeowners: true, allow_raise: false)
|
|
69
64
|
if from_codeowners
|
|
70
65
|
teams_for_files_from_codeowners([file], allow_raise: allow_raise).values.first
|
|
71
66
|
else
|
|
@@ -116,7 +111,7 @@ module CodeOwnership
|
|
|
116
111
|
# @see #validate! for ensuring CODEOWNERS file is up-to-date
|
|
117
112
|
#
|
|
118
113
|
sig { params(files: T::Array[String], allow_raise: T::Boolean).returns(T::Hash[String, T.nilable(CodeTeams::Team)]) }
|
|
119
|
-
def teams_for_files_from_codeowners(files, allow_raise: false)
|
|
114
|
+
def self.teams_for_files_from_codeowners(files, allow_raise: false)
|
|
120
115
|
Private::TeamFinder.teams_for_files(files, allow_raise: allow_raise)
|
|
121
116
|
end
|
|
122
117
|
|
|
@@ -160,12 +155,12 @@ module CodeOwnership
|
|
|
160
155
|
# @see CLI#for_file for the command-line interface that uses this method
|
|
161
156
|
#
|
|
162
157
|
sig { params(file: String).returns(T.nilable(T::Hash[Symbol, String])) }
|
|
163
|
-
def for_file_verbose(file)
|
|
158
|
+
def self.for_file_verbose(file)
|
|
164
159
|
::RustCodeOwners.for_file(file)
|
|
165
160
|
end
|
|
166
161
|
|
|
167
162
|
sig { params(team: T.any(CodeTeams::Team, String)).returns(T::Array[String]) }
|
|
168
|
-
def for_team(team)
|
|
163
|
+
def self.for_team(team)
|
|
169
164
|
team = T.must(CodeTeams.find(team)) if team.is_a?(String)
|
|
170
165
|
::RustCodeOwners.for_team(team.name)
|
|
171
166
|
end
|
|
@@ -226,7 +221,7 @@ module CodeOwnership
|
|
|
226
221
|
files: T.nilable(T::Array[String])
|
|
227
222
|
).void
|
|
228
223
|
end
|
|
229
|
-
def validate!(
|
|
224
|
+
def self.validate!(
|
|
230
225
|
autocorrect: true,
|
|
231
226
|
stage_changes: true,
|
|
232
227
|
files: nil
|
|
@@ -269,7 +264,7 @@ module CodeOwnership
|
|
|
269
264
|
# @note Leading newlines after the annotation are also removed to maintain clean formatting.
|
|
270
265
|
#
|
|
271
266
|
sig { params(filename: String).void }
|
|
272
|
-
def remove_file_annotation!(filename)
|
|
267
|
+
def self.remove_file_annotation!(filename)
|
|
273
268
|
filepath = Pathname.new(filename)
|
|
274
269
|
|
|
275
270
|
begin
|
|
@@ -292,24 +287,24 @@ module CodeOwnership
|
|
|
292
287
|
# Given a backtrace from either `Exception#backtrace` or `caller`, find the
|
|
293
288
|
# first line that corresponds to a file with assigned ownership
|
|
294
289
|
sig { params(backtrace: T.nilable(T::Array[String]), excluded_teams: T::Array[::CodeTeams::Team]).returns(T.nilable(::CodeTeams::Team)) }
|
|
295
|
-
def for_backtrace(backtrace, excluded_teams: [])
|
|
290
|
+
def self.for_backtrace(backtrace, excluded_teams: [])
|
|
296
291
|
Private::TeamFinder.for_backtrace(backtrace, excluded_teams: excluded_teams)
|
|
297
292
|
end
|
|
298
293
|
|
|
299
294
|
# Given a backtrace from either `Exception#backtrace` or `caller`, find the
|
|
300
295
|
# first owned file in it, useful for figuring out which file is being blamed.
|
|
301
296
|
sig { params(backtrace: T.nilable(T::Array[String]), excluded_teams: T::Array[::CodeTeams::Team]).returns(T.nilable([::CodeTeams::Team, String])) }
|
|
302
|
-
def first_owned_file_for_backtrace(backtrace, excluded_teams: [])
|
|
297
|
+
def self.first_owned_file_for_backtrace(backtrace, excluded_teams: [])
|
|
303
298
|
Private::TeamFinder.first_owned_file_for_backtrace(backtrace, excluded_teams: excluded_teams)
|
|
304
299
|
end
|
|
305
300
|
|
|
306
|
-
sig { params(klass: T.nilable(T.any(T::Class[T.anything], Module))).returns(T.nilable(::CodeTeams::Team)) }
|
|
307
|
-
def for_class(klass)
|
|
301
|
+
sig { params(klass: T.nilable(T.any(T::Class[T.anything], T::Module[T.anything]))).returns(T.nilable(::CodeTeams::Team)) }
|
|
302
|
+
def self.for_class(klass)
|
|
308
303
|
Private::TeamFinder.for_class(klass)
|
|
309
304
|
end
|
|
310
305
|
|
|
311
306
|
sig { params(package: Packs::Pack).returns(T.nilable(::CodeTeams::Team)) }
|
|
312
|
-
def for_package(package)
|
|
307
|
+
def self.for_package(package)
|
|
313
308
|
Private::TeamFinder.for_package(package)
|
|
314
309
|
end
|
|
315
310
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: code_ownership
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.1.
|
|
4
|
+
version: 2.1.1
|
|
5
5
|
platform: x86_64-linux
|
|
6
6
|
authors:
|
|
7
7
|
- Gusto Engineers
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-01-26 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: code_teams
|
|
@@ -44,14 +44,14 @@ dependencies:
|
|
|
44
44
|
requirements:
|
|
45
45
|
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: 0.
|
|
47
|
+
version: 0.6.12763
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 0.
|
|
54
|
+
version: 0.6.12763
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: debug
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -179,6 +179,7 @@ files:
|
|
|
179
179
|
- lib/code_ownership/3.2/code_ownership.so
|
|
180
180
|
- lib/code_ownership/3.3/code_ownership.so
|
|
181
181
|
- lib/code_ownership/3.4/code_ownership.so
|
|
182
|
+
- lib/code_ownership/4.0/code_ownership.so
|
|
182
183
|
- lib/code_ownership/cli.rb
|
|
183
184
|
- lib/code_ownership/private/file_path_finder.rb
|
|
184
185
|
- lib/code_ownership/private/file_path_team_cache.rb
|
|
@@ -206,7 +207,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
206
207
|
version: '3.2'
|
|
207
208
|
- - "<"
|
|
208
209
|
- !ruby/object:Gem::Version
|
|
209
|
-
version:
|
|
210
|
+
version: 4.1.dev
|
|
210
211
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
211
212
|
requirements:
|
|
212
213
|
- - ">="
|