git-age 0.1.8 → 0.1.9

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: 51555542566fad38ca8c70e69bf5a3d0757a42258f5f6603495c1a143d2889ad
4
- data.tar.gz: 8dba7887aad69063dc21457988f134ec961ff7e3013b9ec16ebf2a6e39b6d63d
3
+ metadata.gz: d8f167bd15895d9b201bca6d730d85fc3ace6e0c8a777fbc3020714811badc03
4
+ data.tar.gz: 94bb60f0da0eb5839236775248e7133f615208eb4e841939270d92e3969c42cd
5
5
  SHA512:
6
- metadata.gz: 51a5902b883b763678e02ed52d0df361a1f79552acb467f40cdf8ce5ef21e553a2214a46b68ed9008fda43b0aff7039b8c1ce49d0ccade784d5eab2bbc4aae0c
7
- data.tar.gz: f4484ef6332d6ccea5dc6b94dcf2ad296cb5ee30f7b81b7c738b6775af384769be8f70e38d242bff35565f5a5caf45ad860cdf8cb4bc265a34694831b161acca
6
+ metadata.gz: 38054b5f89fb3f1befb4423ec430837637041b8dca54cad3625a01aeb4d204b61bfa89a75aabef4bdf2772a7a212e7de923c4186ae316a3310f4d682fc286431
7
+ data.tar.gz: ac6a88494df9b68ed0c95d1bb2838ab4051ef76994513cf4afb0427f6381ee32d7188b5dd70b51f8d45b2f27112bac6458194a96518878181fe55a8daedd6b73
checksums.yaml.gz.sig CHANGED
Binary file
data/.gitignore CHANGED
@@ -6,3 +6,4 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ *.gem
data/Gemfile.lock CHANGED
@@ -1,16 +1,17 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- git-age (0.1.8)
4
+ git-age (0.1.9)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
- minitest (5.14.4)
9
+ minitest (5.25.5)
10
10
  rake (12.3.3)
11
11
 
12
12
  PLATFORMS
13
13
  ruby
14
+ x86_64-linux
14
15
 
15
16
  DEPENDENCIES
16
17
  git-age!
@@ -18,4 +19,4 @@ DEPENDENCIES
18
19
  rake (~> 12.0)
19
20
 
20
21
  BUNDLED WITH
21
- 2.1.4
22
+ 2.6.9
data/gem-public_cert.pem CHANGED
@@ -1,27 +1,27 @@
1
1
  -----BEGIN CERTIFICATE-----
2
- MIIEjjCCAvagAwIBAgIBATANBgkqhkiG9w0BAQsFADBGMRgwFgYDVQQDDA9ldXN0
3
- YXF1aW9yYW5nZWwxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixk
4
- ARkWA2NvbTAeFw0yMjA4MjUxMjM1NDlaFw0yMzA4MjUxMjM1NDlaMEYxGDAWBgNV
5
- BAMMD2V1c3RhcXVpb3JhbmdlbDEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYK
6
- CZImiZPyLGQBGRYDY29tMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA
7
- 3YBFbveSL2/69Igp0dpsop8U9ZxMAHMK00ZpwX+sUDIQOEQ/y9D/sS0YM5vXKWSC
8
- +b9XVyhRZ62nF49HfcFK9EzZ3prs5N8NL1hel50l4B3U1z4fuiZ/DWZI1UcEc/Kn
9
- Mp18z484LDu8Ahh4SBzZ+VYJAh1LPt5NfUaOPvPiROJqJgOV1qcXO+6ZVA3y1h5U
10
- EeWBgkzyi0WkaUUyXqkDV4RBPpPvT590U3cd6ok4EwTJA4XNwlvQU10WoXjnLESn
11
- w1WvoA4zQCigAS7S1eVdR3UEbdef+bc7DXBRw7WVrainzjqiX+rKchQpCWSu/TMg
12
- tO8r3s0V+bG04/4yQXc1zAeFquyBTJy/PInHLbTwEmTiV/5XauSwjtOTAlZbn90x
13
- fe0srVN/hlzQIe5hOpGpV2CqCM8LTbM/shrK1jSZODvW9yDsxR2xOwbrxbxEVa3f
14
- +/VK8+F3xVhJEPz3A0IdtFcSHxBYbDy3x3BBBPNxxx16pFrqC9AF3fyce9lp8l/1
15
- AgMBAAGjgYYwgYMwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFIY3
16
- pLeLD3pErXWmpnX6YmuFkJpYMCQGA1UdEQQdMBuBGWV1c3RhcXVpb3JhbmdlbEBn
17
- bWFpbC5jb20wJAYDVR0SBB0wG4EZZXVzdGFxdWlvcmFuZ2VsQGdtYWlsLmNvbTAN
18
- BgkqhkiG9w0BAQsFAAOCAYEAUoZqEnK4qtASN9iSnAhbj/1h0Bd98YFYmmHwlc7q
19
- zOQ9FuxPHwK1Lfe540JY87mfGsCLNp+ePGHgkZUBIgtIVA427SYc0t5Tz76nJzOA
20
- eH8Aev8mKYkz319CuZexxFQBTGagpUAZN6/34jMPnA6/JPeuikMTeagm76WX4SMO
21
- 1dHKnul+R5pDABWL9x7+Ed4d9Cko83Y5CF8z4lyUleuxlxh22qYHw39diIA3lUqF
22
- AW6goHQVToZSxT4EFSNraft4HOuuGV8Kzw0+r8vWLIaCDhT7GZcOoTW7mdcgTAfb
23
- CYYXOb19ueiFFDMzwMIMS+hMNV8CUDhzlp4FdEOZmQcMwomwpc5EASQI/eLLo1sB
24
- wEEm2u37AJRyw/zKbLBX+mN/EySVht7IPVNeG4kOCv3o84AGZPiVZhQlypocjm9I
25
- 7NRJmY9c84Zb3sCf0DV6UH+d2id9Dndp9ewchgDOSwGznt+oJmjDFZ9gYd8IP2Ol
26
- 1eLrW8x4LHV+EVEIaiVTvmKt
2
+ MIIEhTCCAu2gAwIBAgIBATANBgkqhkiG9w0BAQsFADBEMQwwCgYDVQQDDAN0YXEx
3
+ HzAdBgoJkiaJk/IsZAEZFg9ldXN0YXF1aW9yYW5nZWwxEzARBgoJkiaJk/IsZAEZ
4
+ FgNjb20wHhcNMjUwNzAzMTEwNTQ0WhcNMjYwNzAzMTEwNTQ0WjBEMQwwCgYDVQQD
5
+ DAN0YXExHzAdBgoJkiaJk/IsZAEZFg9ldXN0YXF1aW9yYW5nZWwxEzARBgoJkiaJ
6
+ k/IsZAEZFgNjb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDFGxrA
7
+ XFlGTCSYCq7I3wSXk7s7MzobHtkBkPMllpy7GP1Fm+GCnBzKf8ydRCbrLTXJT1sj
8
+ 9pkRbUejqTuMpJIVkOBcDKOfi6q/giT+zsUeJFHM0frGE+Eou7fmu4R8b11HLV66
9
+ kdxpKLDEMikmiXt8slncXJtzrHXdwTGBOTcXq7zOcHCpJF+suk+v4/6voAxLchab
10
+ WTl5toZyDySurazkd5IkMYvnE9QbGvy2s7A97dUORiAfr9P+DyLUFcg8OykJcNla
11
+ Jn1ai1BSGCopl7s1zuxTUJkKIKx9emSVC5bHKz1LLL9v4D26UumXfz+3eZSw5Uw1
12
+ WWD7fDSm4eVJ0Nv9RpE/GCEKymQaxrMF0FClUmaWQqFue5rC5sd3GDKkED09kJfh
13
+ y6QtcfmgDQFn9Fw0Xjjr/5Z+Oe/YjySixPrsvPJtJsNPrA+JJpVAWXFteFVsjjgt
14
+ rVPQ+VOJ1/WuSjfHHMFrdQ03NgaQv8cGEFLC2nfYV87FxxYIfx7HQ8nEHeMCAwEA
15
+ AaOBgTB/MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQq3/CFnxue
16
+ ZKkpgoKtsqcQ1Tp30TAiBgNVHREEGzAZgRd0YXFAZXVzdGFxdWlvcmFuZ2VsLmNv
17
+ bTAiBgNVHRIEGzAZgRd0YXFAZXVzdGFxdWlvcmFuZ2VsLmNvbTANBgkqhkiG9w0B
18
+ AQsFAAOCAYEAKHqAxMgi8vdeI8u9Uc6u460DLvBCI38xSdo9i3BX8ZnIXlAuaYTG
19
+ W+hQc+BMAnTHOxicz93ItVAK8bGhLkJeqI6H0uVvDkANLAGRIXQSt/xj3Jnmy9tL
20
+ LEezYG53xST2riT4CHrJl9rXiyZZ8Q4AsrESDQ3caWAj2hLcrqE6NFQcV1At1lIy
21
+ 7fl+8gObBLn2u6qm/KrkYS8E42j4pDeZdkr7KG3Fm5QE3pJcb0M+bkapFaacSuCR
22
+ 6oRkinhNhcmNFnY4CWT9+UYVw7kZ/MB4PkiyDun0wwhKTIz6FcKEUZcD28+LJZhf
23
+ gH3nTc+lYcGf2ogfyI8zb2RD+IaTjPEZlz8Jb3SQ5xEebaHVIw1G8O2W7aVFv3Yx
24
+ ipay7GJOMMX24H8Cuwab6VR+XDmac11TWqxdxgMrnX/iEbFOvm4ATx4ex3WujfDg
25
+ t1N168XKmHLf0EONA7w6EVUkkgqBUODRq63vRithFLB3LTCzspKFG2ZkVYrNJGFP
26
+ z6BoxQhjecS+
27
27
  -----END CERTIFICATE-----
@@ -1,22 +1,21 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
1
4
  module Git
2
5
  module Age
3
6
  class GraphCli
4
7
  def self.present?
5
- IO.popen('which graph') do |io|
6
- io.read
7
- end.strip.size != 0
8
+ IO.popen('which graph', &:read).chomp.strip.size != 0
8
9
  end
9
10
 
10
11
  def self.create(input)
11
12
  options = Git::Age::Options.instance
12
13
  legend = options.test ? 'code' : ''
13
14
  type = options.type == 'bar' ? '--bar' : ''
14
- STDOUT.puts "Creating image #{options.image} ..."
15
+ puts "Creating image #{options.image} ..."
15
16
 
16
17
  cmd = "graph #{input} #{type} -o #{options.image} --title '#{options.title}' --xlabel='#{options.xtitle}' --ylabel='#{options.ytitle}' --xtick-fontsize 5 --time-format-output '%Y-%m' --legend='#{legend}' 2> /dev/null"
17
- IO.popen(cmd) do |io|
18
- io.read
19
- end
18
+ IO.popen(cmd, &:read)
20
19
  end
21
20
  end
22
21
  end
data/lib/git/age/main.rb CHANGED
@@ -1,3 +1,6 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
1
4
  require 'date'
2
5
  require 'io/console'
3
6
 
@@ -7,11 +10,13 @@ module Git
7
10
  attr_reader :dates, :files
8
11
 
9
12
  def initialize
10
- STDOUT.puts "Waiting, analysing your repository ..."
13
+ puts "Waiting, analysing your repository ..."
11
14
  options = Git::Age::Options.instance
12
15
 
13
- @dates = Hash.new { |hash, key| hash[key] = { code: 0, test: 0 } }
14
- @files = fill_files
16
+ @dates = Hash.new { |hash, key| hash[key] = { code: 0, test: 0 } }
17
+ @files = fill_files
18
+ raise "Seems you don't have any text files under Git control. Can't proceed." if @files.size <= 0
19
+
15
20
  @winsize = IO.console.winsize
16
21
  @test = options.test
17
22
  @code = options.code
@@ -20,6 +25,9 @@ module Git
20
25
 
21
26
  @test_regexp = @test ? %r{^#{@test}} : nil
22
27
  @code_regexp = @code ? %r{^#{@code}} : nil
28
+ rescue StandardError => e
29
+ warn e.message
30
+ exit 1
23
31
  end
24
32
 
25
33
  def run
@@ -28,9 +36,8 @@ module Git
28
36
  create_csv
29
37
  create_image
30
38
  show_stats
31
- rescue => e
32
- STDERR.puts "Error: #{e}"
33
- puts e.backtrace
39
+ rescue StarndardError => e
40
+ warn "Error: #{e}. Something is missing."
34
41
  end
35
42
 
36
43
  private
@@ -44,13 +51,11 @@ module Git
44
51
  end
45
52
 
46
53
  def read_files
47
- cnt = 0
48
- total = @files.size
54
+ cnt = 0
55
+ total = @files.size
49
56
 
50
57
  @files.each do |file|
51
58
  cnt += 1
52
- next unless text?(file)
53
-
54
59
  print "Checking [#{cnt}/#{total}] #{file} ...".ljust(@winsize[1]) + "\r"
55
60
 
56
61
  begin
@@ -72,20 +77,20 @@ module Git
72
77
 
73
78
  @authors[matches[:author].strip.chomp] += 1 if @authors
74
79
  end
75
- rescue => exc
76
- print "Error on file: #{file}: #{exc}\r"
80
+ rescue => e
81
+ print "Error on file: #{file}: #{e}\r"
77
82
  end
78
83
  end
79
84
 
80
- @mapfile.close if @mapfile
85
+ @mapfile&.close
81
86
  write_authors if @authors
82
- rescue => e
83
- STDERR.puts "Error reading files: #{e}"
87
+ rescue StandardError => e
88
+ warn "Error reading files: #{e}"
84
89
  end
85
90
 
86
91
  def write_authors
87
92
  path = Git::Age::Options.instance.authors
88
- STDOUT.puts "\nWriting authors file #{path} ..."
93
+ puts "\nWriting authors file #{path} ..."
89
94
 
90
95
  File.open(path, 'w') do |file|
91
96
  @authors.each do |author, lines|
@@ -95,26 +100,26 @@ module Git
95
100
  end
96
101
 
97
102
  def sort_dates
98
- @dates = @dates.sort_by { |k, v| k }
103
+ @dates = @dates.sort_by { |k, _| k }
99
104
  end
100
105
 
101
106
  def create_csv
102
107
  output = Git::Age::Options.instance.output
103
- STDOUT.puts "Creating CSV file #{output} with #{@dates.size} lines ...".ljust(@winsize[1])
108
+ puts "Creating CSV file #{output} with #{@dates.size} lines ...".ljust(@winsize[1])
104
109
 
105
110
  File.open(output, 'w') do |file|
106
- header = "\"date\",\"code\""
111
+ header = ["\"date\",\"code\""]
107
112
  header << ",\"test\"" if @test
108
- file << "#{header}\n"
113
+ file << "#{header.join}\n"
109
114
 
110
115
  @dates.each do |key, data|
111
- line = "\"#{key}\",#{data[:code]}"
116
+ line = ["\"#{key}\",#{data[:code]}"]
112
117
  line << ",#{data[:test]}" if @test
113
- file << "#{line}\n"
118
+ file << "#{line.join}\n"
114
119
  end
115
120
  end
116
- rescue => e
117
- STDERR.puts "Error creating CSV file: #{e}"
121
+ rescue StandardError => e
122
+ warn "Error creating CSV file: #{e}"
118
123
  end
119
124
 
120
125
  def create_image
@@ -124,12 +129,12 @@ module Git
124
129
  }[options.processor]
125
130
 
126
131
  unless processor
127
- STDERR.puts "Image processor not supported: #{options.processor}"
132
+ warn "Image processor not supported: #{options.processor}"
128
133
  return
129
134
  end
130
135
 
131
136
  unless processor.present?
132
- STDERR.puts "Image processor #{options.processor} is not installed"
137
+ warn "Image processor #{options.processor} is not installed"
133
138
  return
134
139
  end
135
140
 
@@ -138,22 +143,22 @@ module Git
138
143
 
139
144
  def fill_files
140
145
  branch = Git::Age::Options.instance.branch
141
- STDOUT.puts "Reading files info from #{branch} branch ..."
146
+ puts "Reading text files info from #{branch} branch ..."
142
147
 
143
148
  IO.popen("git ls-tree -r #{branch} --name-only") do |io|
144
149
  io.read.split("\n")
150
+ end.select do |file|
151
+ text?(file)
145
152
  end
146
- rescue => e
147
- STDERR.puts "Error while searching for Git controlled files: #{e}"
153
+ rescue StandardError => e
154
+ warn "Error while searching for Git controlled files: #{e}"
148
155
  end
149
156
 
150
157
  def text?(file)
151
158
  return false unless File.exist?(file)
152
159
 
153
- IO.popen("file -i -b \"#{file}\" 2> /dev/null") do |io|
154
- io.read
155
- end.match?(/\Atext/)
156
- rescue
160
+ IO.popen("file -i -b \"#{file}\" 2> /dev/null", &:read).match?(/\Atext/)
161
+ rescue StandardError
157
162
  false
158
163
  end
159
164
 
@@ -167,12 +172,17 @@ module Git
167
172
  puts "First commit in: #{first}"
168
173
  puts "Last commit in: #{last}"
169
174
  puts "Repository has #{diff} days with commits"
170
- puts "Month with more code lines unchanged: #{ustats[:bigger][:date]} (#{ustats[:bigger][:lines]} lines)"
171
175
 
172
- if @test_regexp && @code_regexp
173
- ratio = stats.code_to_test_ratio
174
- puts "Code to test ratio: 1:#{ratio[:ratio]} (#{ratio[:code]}/#{ratio[:test]})"
176
+ if ustats
177
+ puts "Month with more code lines unchanged: #{ustats[:bigger][:date]} (#{ustats[:bigger][:lines]} lines)"
178
+ else
179
+ puts "Could not find unchanged statistics for this repo"
175
180
  end
181
+
182
+ return unless @test_regexp && @code_regexp
183
+
184
+ ratio = stats.code_to_test_ratio
185
+ puts "Code to test ratio: 1:#{ratio[:ratio]} (#{ratio[:code]}/#{ratio[:test]})"
176
186
  end
177
187
  end
178
188
  end
@@ -1,3 +1,6 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
1
4
  require 'singleton'
2
5
 
3
6
  module Git
@@ -5,7 +8,7 @@ module Git
5
8
  class Options
6
9
  include Singleton
7
10
  attr_accessor :branch, :output, :title, :processor, :image, :xtitle,
8
- :ytitle, :map, :test, :code, :type, :authors
11
+ :ytitle, :map, :test, :code, :type, :authors
9
12
 
10
13
  def initialize
11
14
  @branch = 'master'
data/lib/git/age/stats.rb CHANGED
@@ -1,3 +1,6 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
1
4
  module Git
2
5
  module Age
3
6
  class Stats
@@ -14,30 +17,35 @@ module Git
14
17
  end
15
18
 
16
19
  def unchanged_stats
17
- max = @data.dates.max_by { |key, value| value[:code] }
20
+ max = dates.max_by { |_, value| value[:code] }
18
21
  { bigger: { date: max[0], lines: max[1][:code] } }
22
+ rescue StandardError
23
+ nil
19
24
  end
20
25
 
21
26
  def code_to_test_ratio
22
- stats = @data.dates.reduce({code: 0, test: 0}) do |memo, data|
27
+ stats = dates.reduce({ code: 0, test: 0 }) do |memo, data|
23
28
  memo[:code] += data[1][:code]
24
29
  memo[:test] += data[1][:test]
25
30
  memo
26
31
  end
27
32
 
28
- { code: stats[:code], test: stats[:test], ratio: (stats[:test].to_f / stats[:code].to_f).round(2) }
29
- rescue
33
+ { code: stats[:code], test: stats[:test], ratio: (stats[:test] / stats[:code].to_f).round(2) }
34
+ rescue StandardError
30
35
  { code: 0, test: 0, ratio: 0.0 }
31
36
  end
32
37
 
33
38
  private
34
39
 
40
+ def dates
41
+ @data.dates
42
+ rescue StandardError
43
+ []
44
+ end
45
+
35
46
  def commit_date(order = nil)
36
47
  cmd = "git log #{order} --pretty=format:%ad --date=short | head -n1"
37
-
38
- IO.popen(cmd) do |io|
39
- io.read.chomp.strip
40
- end
48
+ IO.popen(cmd, &:read).chomp.strip
41
49
  end
42
50
  end
43
51
  end
@@ -1,5 +1,8 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
1
4
  module Git
2
5
  module Age
3
- VERSION = "0.1.8"
6
+ VERSION = "0.1.9"
4
7
  end
5
8
  end
data/lib/git/age.rb CHANGED
@@ -1,3 +1,6 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
1
4
  require_relative 'age/main'
2
5
  require_relative 'age/options'
3
6
  require_relative 'age/stats'
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,42 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-age
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eustaquio Rangel
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain:
11
10
  - |
12
11
  -----BEGIN CERTIFICATE-----
13
- MIIEjjCCAvagAwIBAgIBATANBgkqhkiG9w0BAQsFADBGMRgwFgYDVQQDDA9ldXN0
14
- YXF1aW9yYW5nZWwxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixk
15
- ARkWA2NvbTAeFw0yMjA4MjUxMjM1NDlaFw0yMzA4MjUxMjM1NDlaMEYxGDAWBgNV
16
- BAMMD2V1c3RhcXVpb3JhbmdlbDEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYK
17
- CZImiZPyLGQBGRYDY29tMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA
18
- 3YBFbveSL2/69Igp0dpsop8U9ZxMAHMK00ZpwX+sUDIQOEQ/y9D/sS0YM5vXKWSC
19
- +b9XVyhRZ62nF49HfcFK9EzZ3prs5N8NL1hel50l4B3U1z4fuiZ/DWZI1UcEc/Kn
20
- Mp18z484LDu8Ahh4SBzZ+VYJAh1LPt5NfUaOPvPiROJqJgOV1qcXO+6ZVA3y1h5U
21
- EeWBgkzyi0WkaUUyXqkDV4RBPpPvT590U3cd6ok4EwTJA4XNwlvQU10WoXjnLESn
22
- w1WvoA4zQCigAS7S1eVdR3UEbdef+bc7DXBRw7WVrainzjqiX+rKchQpCWSu/TMg
23
- tO8r3s0V+bG04/4yQXc1zAeFquyBTJy/PInHLbTwEmTiV/5XauSwjtOTAlZbn90x
24
- fe0srVN/hlzQIe5hOpGpV2CqCM8LTbM/shrK1jSZODvW9yDsxR2xOwbrxbxEVa3f
25
- +/VK8+F3xVhJEPz3A0IdtFcSHxBYbDy3x3BBBPNxxx16pFrqC9AF3fyce9lp8l/1
26
- AgMBAAGjgYYwgYMwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFIY3
27
- pLeLD3pErXWmpnX6YmuFkJpYMCQGA1UdEQQdMBuBGWV1c3RhcXVpb3JhbmdlbEBn
28
- bWFpbC5jb20wJAYDVR0SBB0wG4EZZXVzdGFxdWlvcmFuZ2VsQGdtYWlsLmNvbTAN
29
- BgkqhkiG9w0BAQsFAAOCAYEAUoZqEnK4qtASN9iSnAhbj/1h0Bd98YFYmmHwlc7q
30
- zOQ9FuxPHwK1Lfe540JY87mfGsCLNp+ePGHgkZUBIgtIVA427SYc0t5Tz76nJzOA
31
- eH8Aev8mKYkz319CuZexxFQBTGagpUAZN6/34jMPnA6/JPeuikMTeagm76WX4SMO
32
- 1dHKnul+R5pDABWL9x7+Ed4d9Cko83Y5CF8z4lyUleuxlxh22qYHw39diIA3lUqF
33
- AW6goHQVToZSxT4EFSNraft4HOuuGV8Kzw0+r8vWLIaCDhT7GZcOoTW7mdcgTAfb
34
- CYYXOb19ueiFFDMzwMIMS+hMNV8CUDhzlp4FdEOZmQcMwomwpc5EASQI/eLLo1sB
35
- wEEm2u37AJRyw/zKbLBX+mN/EySVht7IPVNeG4kOCv3o84AGZPiVZhQlypocjm9I
36
- 7NRJmY9c84Zb3sCf0DV6UH+d2id9Dndp9ewchgDOSwGznt+oJmjDFZ9gYd8IP2Ol
37
- 1eLrW8x4LHV+EVEIaiVTvmKt
12
+ MIIEhTCCAu2gAwIBAgIBATANBgkqhkiG9w0BAQsFADBEMQwwCgYDVQQDDAN0YXEx
13
+ HzAdBgoJkiaJk/IsZAEZFg9ldXN0YXF1aW9yYW5nZWwxEzARBgoJkiaJk/IsZAEZ
14
+ FgNjb20wHhcNMjUwNzAzMTEwNTQ0WhcNMjYwNzAzMTEwNTQ0WjBEMQwwCgYDVQQD
15
+ DAN0YXExHzAdBgoJkiaJk/IsZAEZFg9ldXN0YXF1aW9yYW5nZWwxEzARBgoJkiaJ
16
+ k/IsZAEZFgNjb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDFGxrA
17
+ XFlGTCSYCq7I3wSXk7s7MzobHtkBkPMllpy7GP1Fm+GCnBzKf8ydRCbrLTXJT1sj
18
+ 9pkRbUejqTuMpJIVkOBcDKOfi6q/giT+zsUeJFHM0frGE+Eou7fmu4R8b11HLV66
19
+ kdxpKLDEMikmiXt8slncXJtzrHXdwTGBOTcXq7zOcHCpJF+suk+v4/6voAxLchab
20
+ WTl5toZyDySurazkd5IkMYvnE9QbGvy2s7A97dUORiAfr9P+DyLUFcg8OykJcNla
21
+ Jn1ai1BSGCopl7s1zuxTUJkKIKx9emSVC5bHKz1LLL9v4D26UumXfz+3eZSw5Uw1
22
+ WWD7fDSm4eVJ0Nv9RpE/GCEKymQaxrMF0FClUmaWQqFue5rC5sd3GDKkED09kJfh
23
+ y6QtcfmgDQFn9Fw0Xjjr/5Z+Oe/YjySixPrsvPJtJsNPrA+JJpVAWXFteFVsjjgt
24
+ rVPQ+VOJ1/WuSjfHHMFrdQ03NgaQv8cGEFLC2nfYV87FxxYIfx7HQ8nEHeMCAwEA
25
+ AaOBgTB/MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQq3/CFnxue
26
+ ZKkpgoKtsqcQ1Tp30TAiBgNVHREEGzAZgRd0YXFAZXVzdGFxdWlvcmFuZ2VsLmNv
27
+ bTAiBgNVHRIEGzAZgRd0YXFAZXVzdGFxdWlvcmFuZ2VsLmNvbTANBgkqhkiG9w0B
28
+ AQsFAAOCAYEAKHqAxMgi8vdeI8u9Uc6u460DLvBCI38xSdo9i3BX8ZnIXlAuaYTG
29
+ W+hQc+BMAnTHOxicz93ItVAK8bGhLkJeqI6H0uVvDkANLAGRIXQSt/xj3Jnmy9tL
30
+ LEezYG53xST2riT4CHrJl9rXiyZZ8Q4AsrESDQ3caWAj2hLcrqE6NFQcV1At1lIy
31
+ 7fl+8gObBLn2u6qm/KrkYS8E42j4pDeZdkr7KG3Fm5QE3pJcb0M+bkapFaacSuCR
32
+ 6oRkinhNhcmNFnY4CWT9+UYVw7kZ/MB4PkiyDun0wwhKTIz6FcKEUZcD28+LJZhf
33
+ gH3nTc+lYcGf2ogfyI8zb2RD+IaTjPEZlz8Jb3SQ5xEebaHVIw1G8O2W7aVFv3Yx
34
+ ipay7GJOMMX24H8Cuwab6VR+XDmac11TWqxdxgMrnX/iEbFOvm4ATx4ex3WujfDg
35
+ t1N168XKmHLf0EONA7w6EVUkkgqBUODRq63vRithFLB3LTCzspKFG2ZkVYrNJGFP
36
+ z6BoxQhjecS+
38
37
  -----END CERTIFICATE-----
39
- date: 2023-01-12 00:00:00.000000000 Z
38
+ date: 2025-07-03 00:00:00.000000000 Z
40
39
  dependencies: []
41
40
  description: Check all the repository files lines dates and group it by year and month,
42
41
  allowing check how old code is still in use
@@ -70,7 +69,6 @@ licenses: []
70
69
  metadata:
71
70
  homepage_uri: https://github.com/taq/git-age
72
71
  source_code_uri: https://github.com/taq/git-age
73
- post_install_message:
74
72
  rdoc_options: []
75
73
  require_paths:
76
74
  - lib
@@ -85,8 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
83
  - !ruby/object:Gem::Version
86
84
  version: '0'
87
85
  requirements: []
88
- rubygems_version: 3.3.3
89
- signing_key:
86
+ rubygems_version: 3.6.6
90
87
  specification_version: 4
91
88
  summary: Create a CSV file with line year and month from your Git repository
92
89
  test_files: []
metadata.gz.sig CHANGED
Binary file