code_ownership 1.29.2 → 1.29.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/code_ownership.rb +28 -10
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0ea243e473ae151a2775f8e1e47d0eb9dacb27f3d2d594db63d3004f5c611109
|
4
|
+
data.tar.gz: eb77703d34e6c40ee734d3e487fd58ba0f124555a681ff267326a4a3f4aeb03e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8464d15022cc9a5f9e6019c0633b8941a3a5f1984f5d55f676c6377b94c335efb0b5722c4289f40b32da5f01453e806911c829c7fa0f11643f2d90c3327db3f3
|
7
|
+
data.tar.gz: 84c95502b0457b848d705b71b675c0d9b8654ed940cd3ba37bc1503c0d8c3cfe7b53dfa28340610ccfde17527e69facc14e7abb106843b21456b3fb17b3bc41d
|
data/lib/code_ownership.rb
CHANGED
@@ -58,7 +58,6 @@ module CodeOwnership
|
|
58
58
|
ownership_information += ownership_for_mapper
|
59
59
|
end
|
60
60
|
|
61
|
-
|
62
61
|
ownership_information << ""
|
63
62
|
end
|
64
63
|
|
@@ -93,7 +92,25 @@ module CodeOwnership
|
|
93
92
|
# first line that corresponds to a file with assigned ownership
|
94
93
|
sig { params(backtrace: T.nilable(T::Array[String]), excluded_teams: T::Array[::CodeTeams::Team]).returns(T.nilable(::CodeTeams::Team)) }
|
95
94
|
def for_backtrace(backtrace, excluded_teams: [])
|
96
|
-
|
95
|
+
first_owned_file_for_backtrace(backtrace, excluded_teams: excluded_teams)&.first
|
96
|
+
end
|
97
|
+
|
98
|
+
# Given a backtrace from either `Exception#backtrace` or `caller`, find the
|
99
|
+
# first owned file in it, useful for figuring out which file is being blamed.
|
100
|
+
sig { params(backtrace: T.nilable(T::Array[String]), excluded_teams: T::Array[::CodeTeams::Team]).returns(T.nilable([::CodeTeams::Team, String])) }
|
101
|
+
def first_owned_file_for_backtrace(backtrace, excluded_teams: [])
|
102
|
+
backtrace_with_ownership(backtrace).each do |(team, file)|
|
103
|
+
if team && !excluded_teams.include?(team)
|
104
|
+
return [team, file]
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
nil
|
109
|
+
end
|
110
|
+
|
111
|
+
sig { params(backtrace: T.nilable(T::Array[String])).returns(T::Enumerable[[T.nilable(::CodeTeams::Team), String]]) }
|
112
|
+
def backtrace_with_ownership(backtrace)
|
113
|
+
return [] unless backtrace
|
97
114
|
|
98
115
|
# The pattern for a backtrace hasn't changed in forever and is considered
|
99
116
|
# stable: https://github.com/ruby/ruby/blob/trunk/vm_backtrace.c#L303-L317
|
@@ -110,18 +127,19 @@ module CodeOwnership
|
|
110
127
|
`(?<function>.*)' # Matches "`block (3 levels) in create'"
|
111
128
|
\z}x
|
112
129
|
|
113
|
-
backtrace.
|
130
|
+
backtrace.lazy.filter_map do |line|
|
114
131
|
match = line.match(backtrace_line)
|
132
|
+
next unless match
|
115
133
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
134
|
+
file = T.must(match[:file])
|
135
|
+
|
136
|
+
[
|
137
|
+
CodeOwnership.for_file(file),
|
138
|
+
file,
|
139
|
+
]
|
122
140
|
end
|
123
|
-
nil
|
124
141
|
end
|
142
|
+
private_class_method(:backtrace_with_ownership)
|
125
143
|
|
126
144
|
sig { params(klass: T.nilable(T.any(Class, Module))).returns(T.nilable(::CodeTeams::Team)) }
|
127
145
|
def for_class(klass)
|
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: 1.29.
|
4
|
+
version: 1.29.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gusto Engineers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: code_teams
|