git_ownership_insights 2.0.5 → 2.0.7

Sign up to get free protection for your applications and to get access to all the features.
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