git_ownership_insights 1.0.4 → 1.0.6
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/Gemfile.lock +1 -1
- data/bin/git_ownership_insights +41 -6
- data/lib/git_ownership_insights/version.rb +1 -1
- 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: 6b7a7be3eb274378081cac3ffa1c7698dcc17dc1ea5e8dd61b3bfbdedfdee55c
|
4
|
+
data.tar.gz: 68011fb06d78d3eee4d47e3dcf3bf68e79c759d03acbfee3edaa525d8627d8bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2782093b040f0947b82f0ad29633628afda6ac83824e1532ba8157f569efc7199f11c29b8055ec11073b1436efcb890a5ccff44450aadf1ae17c5c3fcb48d1cc
|
7
|
+
data.tar.gz: 1e7017a0f1cb0bfe93ff9c6a1193de0fd78f59bf4d17fd0834c4a2390af8dd7fab16680aafd0bc5ffb04b175454c395a2cbea2d79f30f758f04e105335d0aabe
|
data/Gemfile.lock
CHANGED
data/bin/git_ownership_insights
CHANGED
@@ -167,12 +167,33 @@ def count_big_files(directory_path, size: BIG_FILE_SIZE)
|
|
167
167
|
end
|
168
168
|
end
|
169
169
|
|
170
|
-
puts " Total number of files longer than #{size} lines: #{count}"
|
170
|
+
puts " Total number of code files longer than #{size} lines: #{count}"
|
171
|
+
end
|
172
|
+
|
173
|
+
def count_hotspot_lines(files)
|
174
|
+
code_files = files.select {|f|
|
175
|
+
extension = File.extname(f)
|
176
|
+
valid_extensions = ['.swift', '.kt']
|
177
|
+
valid_extensions.include?(extension)
|
178
|
+
}
|
179
|
+
|
180
|
+
# Initialize a counter for files that meet the criteria
|
181
|
+
count = 0
|
182
|
+
|
183
|
+
# Iterate through each file and check the line count
|
184
|
+
code_files.each do |file|
|
185
|
+
lines_count = File.foreach(file).reject { |line| line.match(/^\s*(\/\/|\/\*.*\*\/|\s*$)/) }.count
|
186
|
+
|
187
|
+
count += lines_count
|
188
|
+
end
|
189
|
+
|
190
|
+
puts " Total lines of hotspot code: #{count}"
|
171
191
|
end
|
172
192
|
|
173
193
|
def contribution_message(directory_path:, duration_in_days:, begin_time:, debug: nil, steps: nil)
|
174
194
|
duration_in_days = duration_in_days.to_i
|
175
195
|
all_teams = []
|
196
|
+
teams_count = 0
|
176
197
|
files_changed_by_many_teams = 0
|
177
198
|
total_changes = 0
|
178
199
|
start_date = begin_time.to_time.to_i - duration_in_days * 86_400
|
@@ -213,6 +234,7 @@ def contribution_message(directory_path:, duration_in_days:, begin_time:, debug:
|
|
213
234
|
if teams.count > 1
|
214
235
|
files_changed_by_many_teams += 1
|
215
236
|
file_team_map.merge!("#{file}" => [teams, commit_count])
|
237
|
+
teams_count += teams.count
|
216
238
|
end
|
217
239
|
|
218
240
|
puts "\n#{filename} [#{commit_count}]:#{teams}\n" if debug
|
@@ -225,8 +247,6 @@ def contribution_message(directory_path:, duration_in_days:, begin_time:, debug:
|
|
225
247
|
churn_count = file_team_map.values.map { |value| value[1] }.sum
|
226
248
|
hotspot_changes_percentage = (churn_count.to_f / total_changes.to_f)*100
|
227
249
|
|
228
|
-
puts "Timeframe: #{(begin_time - duration_in_days).strftime('%Y-%m-%d')} to #{begin_time.strftime('%Y-%m-%d')}\n Code files with a single contributor: #{(100 - ((files_changed_by_many_teams.to_f / code_files_with_changes.count.to_f) * 100)).round(2)}%\n Hotspot code changes: #{churn_count} (#{hotspot_changes_percentage.round(2)}%)\n Amount of code changes: #{total_changes}\n Total files changed: #{code_files_with_changes.count}\n Total files in the folder: #{file_count}\n Contributors: #{contributors}\n"
|
229
|
-
|
230
250
|
# Filter files based on extension and size
|
231
251
|
filtered_files = file_team_map.select do |file_path|
|
232
252
|
next unless File.exist?(file_path)
|
@@ -236,16 +256,31 @@ def contribution_message(directory_path:, duration_in_days:, begin_time:, debug:
|
|
236
256
|
end
|
237
257
|
|
238
258
|
filtered_top_touched_files = filtered_files.sort_by { |element, count| [-count.last, element] }
|
259
|
+
|
260
|
+
puts "Timeframe: #{(begin_time - duration_in_days).strftime('%Y-%m-%d')} to #{begin_time.strftime('%Y-%m-%d')}"
|
261
|
+
puts " Hotspot Code Changes: #{churn_count} (#{hotspot_changes_percentage.round(2)}%)"
|
262
|
+
puts " Cross-Squad File Dependencies Count: #{teams_count}"
|
263
|
+
puts " Files exceeding #{BIG_FILE_SIZE} lines with multiple contributors: #{filtered_top_touched_files.count}"
|
264
|
+
count_hotspot_lines(filtered_files.keys)
|
239
265
|
count_big_files(directory_path)
|
240
|
-
puts "
|
266
|
+
puts " Code files with a single contributor: #{(100 - ((files_changed_by_many_teams.to_f / code_files_with_changes.count.to_f) * 100)).round(2)}%"
|
267
|
+
puts " Total amount of code changes: #{total_changes}"
|
268
|
+
puts " Total files changed: #{code_files_with_changes.count}"
|
269
|
+
puts " Total files in the folder: #{file_count}"
|
270
|
+
puts " Contributors: #{contributors}"
|
271
|
+
|
241
272
|
if HOTSPOT
|
273
|
+
puts "\n"
|
274
|
+
puts " Hotspot changes:"
|
242
275
|
filtered_top_touched_files.each do |line|
|
243
|
-
puts "
|
276
|
+
puts " #{line.first.gsub(directory_path, '')} Contributors: #{line.last.first} Commits: #{line.last.last}"
|
244
277
|
end
|
245
278
|
end
|
246
|
-
|
279
|
+
|
247
280
|
|
248
281
|
if CODEOWNERS
|
282
|
+
puts "\n"
|
283
|
+
puts "Code ownership data:"
|
249
284
|
codeowners = read_codeowners_file
|
250
285
|
|
251
286
|
owners_data = Hash.new do |hash, key|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git_ownership_insights
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Serghei Moret
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-01-
|
11
|
+
date: 2024-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: date
|