git_ownership_insights 2.0.5 → 2.0.7

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: b90e3d2355601c1711367b299fe90656b7f51e1996bff55167a58fb03281fb17
4
- data.tar.gz: bb5e35f34321125a6c1d81e8c83da66c57baa9788e2e5fc4dfe5922c6b69e563
3
+ metadata.gz: b2f6a04d3018e987e2762a5037c474904cf6602fded2e27f08df2789f0dc99c3
4
+ data.tar.gz: 8ae4f2dc116cf482b4ff0f7a10225e1d6aeefa4a1f7219a7909eca541a4a51f1
5
5
  SHA512:
6
- metadata.gz: 107ce0fca4900d0ffb548d261d9537d5c43bdeb67ac66803a99f431049613ce86025593d575b718ce7ff2ba77f169c32ab55e7aa94434dd114804ba7f2ad8a59
7
- data.tar.gz: becb170bb5ebf8adba77ce1fda76cca504288fffb1e13c86e94c6e8e2db0db9ad6a9ca8f264faf60b65c4f6f9beb680b50701d6cb75847bca8bdf2d948501bc1
6
+ metadata.gz: ef5dc57fa25ac45c1732177686c947bd30f373fce422a1208993da14e52a104f15ceab0902005c48b789428c2fcd6edac2e851303457ab21aaa7664ffde0a853
7
+ data.tar.gz: 0ee6b4f127938b0d4daa4e3f6b1e35491e79698af297bec7f96321313180fd4a2cf2a553727c5da3559879bbc152e2be175deac9ada09ebd210ce9d4c03a1b65
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- git_ownership_insights (2.0.5)
4
+ git_ownership_insights (2.0.7)
5
5
  date
6
6
  pry
7
7
 
@@ -54,16 +54,6 @@ OptionParser.new do |opts|
54
54
  options[:team_regex] = team_regex
55
55
  end
56
56
 
57
- opts.on('--top-contributing-team STRING',
58
- 'Limit of top contributed to the directory teams in codeownership data [default: 5]') do |top_contributing_team|
59
- options[:top_contributing_team] = top_contributing_team
60
- end
61
-
62
- opts.on('--top-touched-files STRING',
63
- 'Limit of top touched files by individual contributors in codeownership data [default: 5]') do |top_touched_files|
64
- options[:top_touched_files] = top_touched_files
65
- end
66
-
67
57
  opts.on('--codeowners-path STRING', 'Path to CODEOWNERS file [default: .github/CODEOWNERS]') do |codeowners_path|
68
58
  options[:codeowners_path] = codeowners_path
69
59
  end
@@ -83,6 +73,11 @@ OptionParser.new do |opts|
83
73
  options[:code_extension] = code_extension
84
74
  end
85
75
 
76
+ opts.on('--output-to-files',
77
+ 'Puts the output for hotspot and codeowners into files instead of the STDOUT (useful for CI and big amount of data) [default:false]') do
78
+ options[:file_output] = true
79
+ end
80
+
86
81
  opts.on('-v', '--version', 'Display the version of the gem') do
87
82
  puts "git_ownership_insights version #{GitOwnershipInsights::VERSION}"
88
83
  exit
@@ -102,14 +97,13 @@ end.parse!
102
97
  EXCLUSIONS = options[:exclusions]&.split(',')
103
98
  REPO_PATH = options[:path] || '.'
104
99
  TEAM_REGEX = options[:team_regex] || '[A-Za-z]+'
105
- TOP_TOUCHED_FILES = options[:top_touched_files] || 5
106
- TOP_CONTRIBUTED_TEAMS = options[:top_contributing_team] || 5
107
100
  CODEOWNERS_PATH = options[:codeowners_path] || '.github/CODEOWNERS'
108
101
  BIG_FILE_SIZE = options[:big_file_size] || 250
109
102
  CI = options[:ci] || false
110
103
  DEFAULT_BRANCH = options[:default_branch] || 'master'
111
104
  CODEOWNERS = options[:codeowners] || false
112
105
  HOTSPOT = options[:hotspot_files] || false
106
+ FILE_OUTPUT = options[:file_output] || false
113
107
  CODE_EXTENSIONS = options[:code_extension] ? options[:code_extension].split(',') : ['.swift', '.kt']
114
108
  EXCLUDED_FILES = options[:excluded_files]
115
109
 
@@ -125,8 +119,7 @@ unless CI
125
119
  puts "Lines of code limit (big files) for the hotspot calculation: #{BIG_FILE_SIZE}"
126
120
  puts "Hotspot detailed output is: #{options[:hotspot_files] ? 'on' : 'off'}\n"
127
121
  puts "CODEOWNERS output is: #{options[:codeowners] ? 'on' : 'off'}\n"
128
- puts "Limit of the teams shown in codeownership data: #{TOP_CONTRIBUTED_TEAMS}"
129
- puts "Limit of the files shown in codeownership data: #{TOP_TOUCHED_FILES}"
122
+ puts "Output to file mode is: #{options[:file_output] ? 'on' : 'off'}\n"
130
123
  puts "CI mode is: #{options[:ci] ? 'on' : 'off'}\n"
131
124
  puts "Debug mode is: #{options[:debug] ? 'on' : 'off'}\n\n"
132
125
  end
@@ -54,8 +54,7 @@ class GitOwnershipInsights
54
54
  end
55
55
 
56
56
  def handle_codeowners(file_team_map:)
57
- puts "\n"
58
- puts '*Code ownership data:*'
57
+ output = "\n *Code ownership data:*\n"
59
58
  codeowners = read_codeowners_file
60
59
 
61
60
  owners_data = Hash.new do |hash, key|
@@ -76,25 +75,28 @@ class GitOwnershipInsights
76
75
 
77
76
  # Sort owners_data by total count in descending order
78
77
  sorted_owners_data = owners_data.sort_by { |_, data| -data[:churn_count] }
79
-
80
- # Take the last 5 elements
81
- top_owners_data = sorted_owners_data.last(TOP_CONTRIBUTED_TEAMS.to_i)
82
-
83
78
  converted_team_map = file_team_map.transform_keys { |key| File.basename(key) }
84
79
 
85
- puts ' Codeownership data:'
86
- top_owners_data.each do |owner, data|
87
- puts " #{owner.split('/').last}:\n Total Count: #{data[:churn_count]}"
80
+ sorted_owners_data.each do |owner, data|
81
+ output += "\n #{owner.split('/').last}:\n Total Count: #{data[:churn_count]}\n"
88
82
  data[:directories].each do |dir, dir_data|
89
- puts " Directory: #{dir}\n Top files:"
83
+ output += " Directory: #{dir}\n Top files:\n"
90
84
  dir_data[:files].each do |file_data|
91
85
  next if converted_team_map[File.basename(file_data[:name])].nil?
92
86
 
93
87
  contributors = converted_team_map[file_data[:name]]&.first&.empty? ? ['Excluded contributor'] : converted_team_map[file_data[:name]].first
94
- puts " #{File.basename(file_data[:name])} - #{file_data[:count].last} #{contributors}}"
88
+ output += " #{File.basename(file_data[:name])} - #{file_data[:count].last} #{contributors}}"
95
89
  end
96
90
  end
97
91
  end
92
+
93
+ if FILE_OUTPUT
94
+ File.open('codeowners.txt', 'w') do |f|
95
+ f.puts output
96
+ end
97
+ else
98
+ puts output
99
+ end
98
100
  end
99
101
 
100
102
  def find_owner(file:)
@@ -255,14 +257,22 @@ class GitOwnershipInsights
255
257
  puts " *Contributors:* #{contributors}"
256
258
 
257
259
  if HOTSPOT
258
- puts "\n"
259
- puts ' *Hotspot changes:*'
260
+ hotspot_output = "\n *Hotspot files(#{filtered_top_touched_files.count}):*\n"
261
+
260
262
  filtered_top_touched_files.each do |line|
261
- puts "\n"
263
+ hotspot_output += "\n"
262
264
  file = line.first
263
265
  contributors = line.last.first
264
266
  commits = line.last.last
265
- puts " #{file.gsub(@directory_path, '')} Contributors: #{contributors} Commits: #{commits} Owner: #{find_owner(file:)}"
267
+ hotspot_output += " #{file.gsub(@directory_path, '')} Contributors: #{contributors} Commits: #{commits} Owner: #{find_owner(file:)}"
268
+ end
269
+
270
+ if FILE_OUTPUT
271
+ File.open('hotspot.txt', 'w') do |f|
272
+ f.puts hotspot_output
273
+ end
274
+ else
275
+ puts hotspot_output
266
276
  end
267
277
  end
268
278
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class GitOwnershipInsights
4
- VERSION = '2.0.5'
4
+ VERSION = '2.0.7'
5
5
  end
@@ -5,8 +5,6 @@ require_relative '../lib/git_ownership_insights/git_ownership_insight'
5
5
  RSpec.describe GitOwnershipInsights do
6
6
  EXCLUSIONS = %w[exclusion1 exclusion2].freeze
7
7
  TEAM_REGEX = '[A-Za-z]+'
8
- TOP_TOUCHED_FILES = 5
9
- TOP_CONTRIBUTED_TEAMS = 5
10
8
  CODEOWNERS_PATH = '.github/CODEOWNERS'
11
9
  BIG_FILE_SIZE = 250
12
10
  CI = false
@@ -15,6 +13,7 @@ RSpec.describe GitOwnershipInsights do
15
13
  HOTSPOT = true
16
14
  CODE_EXTENSIONS = ['.swift', '.kt'].freeze
17
15
  EXCLUDED_FILES = 'ignore'
16
+ FILE_OUTPUT = false
18
17
 
19
18
  let(:dummy_directory_path) { 'spec/fixtures' }
20
19
  let(:duration_in_days) { 7 }
@@ -56,11 +55,12 @@ RSpec.describe GitOwnershipInsights do
56
55
  *Current total of [".swift", ".kt"] files in the folder:* 4
57
56
  *Contributors:* {"FIOS"=>5, "FAND"=>2}
58
57
 
59
- *Hotspot changes:*
60
- /file1.swift Contributors: ["FIOS", "FAND"] Commits: 3
58
+ *Hotspot files(1):*
59
+
60
+ /file1.swift Contributors: ["FIOS", "FAND"] Commits: 3 Owner: ["FIOS"]
61
+
62
+ *Code ownership data:*
61
63
 
62
- *Code ownership data:*
63
- Codeownership data:
64
64
  FIOS:
65
65
  Total Count: 3
66
66
  Directory: spec/fixtures
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: 2.0.5
4
+ version: 2.0.7
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-30 00:00:00.000000000 Z
11
+ date: 2024-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: date