git_ownership_insights 2.0.5 → 2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b90e3d2355601c1711367b299fe90656b7f51e1996bff55167a58fb03281fb17
4
- data.tar.gz: bb5e35f34321125a6c1d81e8c83da66c57baa9788e2e5fc4dfe5922c6b69e563
3
+ metadata.gz: 9e95410a234ad6fdf3d9684a28da2dcd3515cb77c3f949fa0c2e97723cb6e76f
4
+ data.tar.gz: e212afe069ae204cd8f2eb8b07a49774dd64de590945940da812e6c4048ab111
5
5
  SHA512:
6
- metadata.gz: 107ce0fca4900d0ffb548d261d9537d5c43bdeb67ac66803a99f431049613ce86025593d575b718ce7ff2ba77f169c32ab55e7aa94434dd114804ba7f2ad8a59
7
- data.tar.gz: becb170bb5ebf8adba77ce1fda76cca504288fffb1e13c86e94c6e8e2db0db9ad6a9ca8f264faf60b65c4f6f9beb680b50701d6cb75847bca8bdf2d948501bc1
6
+ metadata.gz: 3b9ea8b6441df0167ff471a2118a293c5e250dbecc817a330985a29ab950d12b59d8de1c24cb2b2b275fbfc842500174deeb906d792e6d51338adc905c62d919
7
+ data.tar.gz: d08540070983653aa3216aab3a3e7b01d46e36e35666cc7ca0e7d4307e7d7995742628b781704397a8dcfa633cfce82cd8d34d2f78f33eb13bed559aaa7d810a
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.6)
5
5
  date
6
6
  pry
7
7
 
@@ -83,6 +83,11 @@ OptionParser.new do |opts|
83
83
  options[:code_extension] = code_extension
84
84
  end
85
85
 
86
+ opts.on('--output-to-files',
87
+ 'Puts the output for hotspot and codeowners into files instead of the STDOUT (useful for CI and big amount of data) [default:false]') do
88
+ options[:file_output] = true
89
+ end
90
+
86
91
  opts.on('-v', '--version', 'Display the version of the gem') do
87
92
  puts "git_ownership_insights version #{GitOwnershipInsights::VERSION}"
88
93
  exit
@@ -110,6 +115,7 @@ CI = options[:ci] || false
110
115
  DEFAULT_BRANCH = options[:default_branch] || 'master'
111
116
  CODEOWNERS = options[:codeowners] || false
112
117
  HOTSPOT = options[:hotspot_files] || false
118
+ FILE_OUTPUT = options[:file_output] || false
113
119
  CODE_EXTENSIONS = options[:code_extension] ? options[:code_extension].split(',') : ['.swift', '.kt']
114
120
  EXCLUDED_FILES = options[:excluded_files]
115
121
 
@@ -127,6 +133,7 @@ unless CI
127
133
  puts "CODEOWNERS output is: #{options[:codeowners] ? 'on' : 'off'}\n"
128
134
  puts "Limit of the teams shown in codeownership data: #{TOP_CONTRIBUTED_TEAMS}"
129
135
  puts "Limit of the files shown in codeownership data: #{TOP_TOUCHED_FILES}"
136
+ puts "Output to file mode is: #{options[:file_output] ? 'on' : 'off'}\n"
130
137
  puts "CI mode is: #{options[:ci] ? 'on' : 'off'}\n"
131
138
  puts "Debug mode is: #{options[:debug] ? 'on' : 'off'}\n\n"
132
139
  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|
@@ -82,19 +81,26 @@ class GitOwnershipInsights
82
81
 
83
82
  converted_team_map = file_team_map.transform_keys { |key| File.basename(key) }
84
83
 
85
- puts ' Codeownership data:'
86
84
  top_owners_data.each do |owner, data|
87
- puts " #{owner.split('/').last}:\n Total Count: #{data[:churn_count]}"
85
+ output += "\n #{owner.split('/').last}:\n Total Count: #{data[:churn_count]}\n"
88
86
  data[:directories].each do |dir, dir_data|
89
- puts " Directory: #{dir}\n Top files:"
87
+ output += " Directory: #{dir}\n Top files:\n"
90
88
  dir_data[:files].each do |file_data|
91
89
  next if converted_team_map[File.basename(file_data[:name])].nil?
92
90
 
93
91
  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}}"
92
+ output += " #{File.basename(file_data[:name])} - #{file_data[:count].last} #{contributors}}"
95
93
  end
96
94
  end
97
95
  end
96
+
97
+ if FILE_OUTPUT
98
+ File.open('codeowners.txt', 'w') do |f|
99
+ f.puts output
100
+ end
101
+ else
102
+ puts output
103
+ end
98
104
  end
99
105
 
100
106
  def find_owner(file:)
@@ -255,14 +261,22 @@ class GitOwnershipInsights
255
261
  puts " *Contributors:* #{contributors}"
256
262
 
257
263
  if HOTSPOT
258
- puts "\n"
259
- puts ' *Hotspot changes:*'
264
+ hotspot_output = "\n *Hotspot files(#{filtered_top_touched_files.count}):*\n"
265
+
260
266
  filtered_top_touched_files.each do |line|
261
- puts "\n"
267
+ hotspot_output += "\n"
262
268
  file = line.first
263
269
  contributors = line.last.first
264
270
  commits = line.last.last
265
- puts " #{file.gsub(@directory_path, '')} Contributors: #{contributors} Commits: #{commits} Owner: #{find_owner(file:)}"
271
+ hotspot_output += " #{file.gsub(@directory_path, '')} Contributors: #{contributors} Commits: #{commits} Owner: #{find_owner(file:)}"
272
+ end
273
+
274
+ if FILE_OUTPUT
275
+ File.open('hotspot.txt', 'w') do |f|
276
+ f.puts hotspot_output
277
+ end
278
+ else
279
+ puts hotspot_output
266
280
  end
267
281
  end
268
282
 
@@ -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.6'
5
5
  end
@@ -15,6 +15,7 @@ RSpec.describe GitOwnershipInsights do
15
15
  HOTSPOT = true
16
16
  CODE_EXTENSIONS = ['.swift', '.kt'].freeze
17
17
  EXCLUDED_FILES = 'ignore'
18
+ FILE_OUTPUT = false
18
19
 
19
20
  let(:dummy_directory_path) { 'spec/fixtures' }
20
21
  let(:duration_in_days) { 7 }
@@ -56,11 +57,12 @@ RSpec.describe GitOwnershipInsights do
56
57
  *Current total of [".swift", ".kt"] files in the folder:* 4
57
58
  *Contributors:* {"FIOS"=>5, "FAND"=>2}
58
59
 
59
- *Hotspot changes:*
60
- /file1.swift Contributors: ["FIOS", "FAND"] Commits: 3
60
+ *Hotspot files(1):*
61
+
62
+ /file1.swift Contributors: ["FIOS", "FAND"] Commits: 3 Owner: ["FIOS"]
63
+
64
+ *Code ownership data:*
61
65
 
62
- *Code ownership data:*
63
- Codeownership data:
64
66
  FIOS:
65
67
  Total Count: 3
66
68
  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.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-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