code_ownership 1.37.0 → 1.38.1
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8319ea8a2a73ecec20a28193627b25b877ae9983b206dae6ff9422d5be157625
|
4
|
+
data.tar.gz: 13228207fa0b9042fe5f87e53c80234e862a476ef4a3888bce7f4bbdfb64e970
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a80e615b1d6e7cc8ec795a7b2ffdb20f0ffb8b0e8027cd70e8361542ff5650f195fca4fdf4ece8e0f1331e987dcef9e2d1106c7125925a43d16403e6e9ed0a78
|
7
|
+
data.tar.gz: 8fabc79d074c2491c49a3cdc1b0caf24f009dbab3e81b7cdcb84ac4b6d563d6ac7e32c83ec6494a3df81d8293afa01c7674e87b0b05878515177e757a4df0fe3
|
@@ -73,7 +73,26 @@ module CodeOwnership
|
|
73
73
|
|
74
74
|
next if ownership_entries.none?
|
75
75
|
|
76
|
-
|
76
|
+
# When we have a special character at the beginning of a folder name, then this character
|
77
|
+
# may be prioritized over *. However, we want the most specific folder to be listed last
|
78
|
+
# in the CODEOWNERS file, so we should prioritize any character above an asterisk in the
|
79
|
+
# same position.
|
80
|
+
if mapper_description == OwnershipMappers::FileAnnotations::DESCRIPTION
|
81
|
+
# individually owned files definitely won't have globs so we don't need to do special sorting
|
82
|
+
sorted_ownership_entries = ownership_entries.sort
|
83
|
+
else
|
84
|
+
sorted_ownership_entries = ownership_entries.sort do |entry1, entry2|
|
85
|
+
if entry2.start_with?(entry1.split('**').first)
|
86
|
+
-1
|
87
|
+
elsif entry1.start_with?(entry2.split('**').first)
|
88
|
+
1
|
89
|
+
else
|
90
|
+
entry1 <=> entry2
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
codeowners_file_lines += ['', "# #{mapper_description}", *sorted_ownership_entries]
|
77
96
|
end
|
78
97
|
|
79
98
|
[
|
@@ -39,7 +39,8 @@ module CodeOwnership
|
|
39
39
|
owner = file_annotation_based_owner(filename_relative_to_root)
|
40
40
|
next unless owner
|
41
41
|
|
42
|
-
|
42
|
+
escaped_filename = escaped_path_for_codeowners_file(filename_relative_to_root)
|
43
|
+
mapping[escaped_filename] = owner
|
43
44
|
end
|
44
45
|
end
|
45
46
|
|
@@ -55,7 +56,8 @@ module CodeOwnership
|
|
55
56
|
|
56
57
|
invalid_files = cache.keys.select do |file|
|
57
58
|
# If a file is not tracked, it should be removed from the cache
|
58
|
-
|
59
|
+
unescaped_file = unescaped_path_for_codeowners_file(file)
|
60
|
+
!Private.file_tracked?(unescaped_file) ||
|
59
61
|
# If a file no longer has a file annotation (i.e. `globs_to_owner` doesn't map it)
|
60
62
|
# it should be removed from the cache
|
61
63
|
# We make sure to only apply this to the input files since otherwise `updated_cache_for_files.key?(file)` would always return `false` when files == []
|
@@ -126,6 +128,32 @@ module CodeOwnership
|
|
126
128
|
|
127
129
|
sig { override.void }
|
128
130
|
def bust_caches!; end
|
131
|
+
|
132
|
+
sig { params(filename: String).returns(String) }
|
133
|
+
def escaped_path_for_codeowners_file(filename)
|
134
|
+
# Globs can contain certain regex characters, like "[" and "]".
|
135
|
+
# However, when we are generating a glob from a file annotation, we
|
136
|
+
# need to escape bracket characters and interpret them literally.
|
137
|
+
# Otherwise the resulting glob will not actually match the directory
|
138
|
+
# containing the file.
|
139
|
+
#
|
140
|
+
# Example
|
141
|
+
# filename: "/some/[xId]/myfile.tsx"
|
142
|
+
# matches: "/some/1/file"
|
143
|
+
# matches: "/some/2/file"
|
144
|
+
# matches: "/some/3/file"
|
145
|
+
# does not match!: "/some/[xId]/myfile.tsx"
|
146
|
+
filename.gsub(/[\[\]]/) { |x| "\\#{x}" }
|
147
|
+
end
|
148
|
+
|
149
|
+
sig { params(filename: String).returns(String) }
|
150
|
+
def unescaped_path_for_codeowners_file(filename)
|
151
|
+
# Globs can contain certain regex characters, like "[" and "]".
|
152
|
+
# We escape bracket characters and interpret them literally for
|
153
|
+
# the CODEOWNERS file. However, we want to compare the unescaped
|
154
|
+
# glob to the actual file path when we check if the file was deleted.
|
155
|
+
filename.gsub(/\\([\[\]])/, '\1')
|
156
|
+
end
|
129
157
|
end
|
130
158
|
end
|
131
159
|
end
|
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.
|
4
|
+
version: 1.38.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gusto Engineers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-11-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: code_teams
|
@@ -220,7 +220,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
220
220
|
- !ruby/object:Gem::Version
|
221
221
|
version: '0'
|
222
222
|
requirements: []
|
223
|
-
rubygems_version: 3.5.
|
223
|
+
rubygems_version: 3.5.22
|
224
224
|
signing_key:
|
225
225
|
specification_version: 4
|
226
226
|
summary: A gem to help engineering teams declare ownership of code
|