git-lint 1.1.1 → 2.1.0

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.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/README.adoc +64 -15
  5. data/lib/git/lint.rb +2 -3
  6. data/lib/git/lint/analyzers/abstract.rb +3 -3
  7. data/lib/git/lint/analyzers/commit_author_name.rb +1 -1
  8. data/lib/git/lint/analyzers/commit_body_leading_line.rb +3 -3
  9. data/lib/git/lint/analyzers/commit_subject_prefix.rb +1 -1
  10. data/lib/git/lint/analyzers/commit_trailer_collaborator_capitalization.rb +2 -2
  11. data/lib/git/lint/analyzers/commit_trailer_collaborator_duplication.rb +3 -3
  12. data/lib/git/lint/analyzers/commit_trailer_collaborator_email.rb +2 -2
  13. data/lib/git/lint/analyzers/commit_trailer_collaborator_key.rb +2 -2
  14. data/lib/git/lint/analyzers/commit_trailer_collaborator_name.rb +2 -2
  15. data/lib/git/lint/branches/environments/circle_ci.rb +6 -6
  16. data/lib/git/lint/branches/environments/git_hub_action.rb +28 -0
  17. data/lib/git/lint/branches/environments/local.rb +6 -6
  18. data/lib/git/lint/branches/environments/netlify_ci.rb +8 -8
  19. data/lib/git/lint/branches/environments/travis_ci.rb +10 -10
  20. data/lib/git/lint/branches/feature.rb +7 -7
  21. data/lib/git/lint/cli.rb +9 -11
  22. data/lib/git/lint/collector.rb +2 -2
  23. data/lib/git/lint/identity.rb +1 -1
  24. data/lib/git/lint/parsers/trailers/collaborator.rb +2 -2
  25. data/lib/git/lint/reporters/branch.rb +14 -14
  26. data/lib/git/lint/runner.rb +5 -4
  27. data/lib/git/lint/validators/capitalization.rb +1 -1
  28. data/lib/git/lint/validators/name.rb +1 -1
  29. metadata +21 -191
  30. metadata.gz.sig +0 -0
  31. data/lib/git/kit/repo.rb +0 -30
  32. data/lib/git/lint/commits/saved.rb +0 -104
  33. data/lib/git/lint/commits/unsaved.rb +0 -120
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "forwardable"
4
+ require "refinements/strings"
4
5
 
5
6
  module Git
6
7
  module Lint
@@ -9,9 +10,11 @@ module Git
9
10
  class Feature
10
11
  extend Forwardable
11
12
 
12
- def_delegators :selected_environment, :name, :shas
13
+ using ::Refinements::Strings
13
14
 
14
- def initialize environment: ENV, git_repo: Git::Kit::Repo.new
15
+ def_delegators :selected_environment, :name, :commits
16
+
17
+ def initialize environment: ENV, git_repo: GitPlus::Repository.new
15
18
  message = "Invalid repository. Are you within a Git-enabled project?"
16
19
  fail Errors::Base, message unless git_repo.exist?
17
20
 
@@ -19,16 +22,13 @@ module Git
19
22
  @selected_environment = load_environment
20
23
  end
21
24
 
22
- def commits
23
- shas.map { |sha| Commits::Saved.new sha: sha }
24
- end
25
-
26
25
  private
27
26
 
28
27
  attr_reader :current_environment, :selected_environment
29
28
 
30
29
  def load_environment
31
30
  if key? "CIRCLECI" then Environments::CircleCI.new
31
+ elsif key? "GITHUB_ACTIONS" then Environments::GitHubAction.new
32
32
  elsif key? "NETLIFY" then Environments::NetlifyCI.new environment: current_environment
33
33
  elsif key? "TRAVIS" then Environments::TravisCI.new environment: current_environment
34
34
  else Environments::Local.new
@@ -36,7 +36,7 @@ module Git
36
36
  end
37
37
 
38
38
  def key? key
39
- current_environment[key] == "true"
39
+ current_environment.fetch(key, "false").to_bool
40
40
  end
41
41
  end
42
42
  end
@@ -3,6 +3,7 @@
3
3
  require "thor"
4
4
  require "thor/actions"
5
5
  require "runcom"
6
+ require "pathname"
6
7
  require "pastel"
7
8
 
8
9
  module Git
@@ -60,7 +61,9 @@ module Git
60
61
  type: :array,
61
62
  default: []
62
63
  def analyze
63
- collector = analyze_commits options.commits
64
+ # FIX: Need to accept SHAs.
65
+ # collector = analyze_commits options.commits
66
+ collector = analyze_commits
64
67
  abort if collector.errors?
65
68
  rescue Errors::Base => error
66
69
  abort colorizer.red("#{Identity::LABEL}: #{error.message}")
@@ -78,7 +81,7 @@ module Git
78
81
  else
79
82
  help "--hook"
80
83
  end
81
- rescue Errors::Base => error
84
+ rescue Errors::Base, GitPlus::Errors::Base => error
82
85
  abort colorizer.red("#{Identity::LABEL}: #{error.message}")
83
86
  end
84
87
 
@@ -98,21 +101,16 @@ module Git
98
101
 
99
102
  attr_reader :configuration, :runner, :colorizer
100
103
 
101
- def load_collector shas
102
- commits = shas.map { |sha| Commits::Saved.new sha: sha }
103
- commits.empty? ? runner.call : runner.call(commits: commits)
104
- end
105
-
106
- def analyze_commits shas
107
- load_collector(shas).tap do |collector|
104
+ def analyze_commits
105
+ runner.call.tap do |collector|
108
106
  reporter = Reporters::Branch.new collector: collector
109
107
  say reporter.to_s
110
108
  end
111
109
  end
112
110
 
113
111
  def check_commit_message path
114
- commit = Commits::Unsaved.new path: path
115
- collector = runner.call commits: commit
112
+ commit = GitPlus::Repository.new.unsaved Pathname(path)
113
+ collector = runner.call commits: [commit]
116
114
  reporter = Reporters::Branch.new collector: collector
117
115
  say reporter.to_s
118
116
  abort if collector.errors?
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/strings"
3
+ require "refinements/hashes"
4
4
 
5
5
  module Git
6
6
  module Lint
7
7
  class Collector
8
- using Refinements::Strings
8
+ using ::Refinements::Hashes
9
9
 
10
10
  def initialize
11
11
  @collection = Hash.new { |default, missing_id| default[missing_id] = [] }
@@ -6,7 +6,7 @@ module Git
6
6
  module Identity
7
7
  NAME = "git-lint"
8
8
  LABEL = "Git Lint"
9
- VERSION = "1.1.1"
9
+ VERSION = "2.1.0"
10
10
  VERSION_LABEL = "#{LABEL} #{VERSION}"
11
11
  end
12
12
  end
@@ -5,7 +5,7 @@ module Git
5
5
  module Parsers
6
6
  module Trailers
7
7
  class Collaborator
8
- DEFAULT_KEY_PATTERN = /\ACo.*Authored.*By.*\Z/i.freeze
8
+ DEFAULT_KEY_PATTERN = /\ACo.*Authored.*By.*\Z/i
9
9
 
10
10
  DEFAULT_MATCH_PATTERN = /
11
11
  (?<key>\A.+) # Key (anchored to start of line).
@@ -15,7 +15,7 @@ module Git
15
15
  (?<name_space>\s?) # Space delimiter (optional).
16
16
  (?<email><.+>)? # Collaborator email (optional).
17
17
  \Z # End of line.
18
- /x.freeze
18
+ /x
19
19
 
20
20
  def initialize text,
21
21
  key_pattern: DEFAULT_KEY_PATTERN,
@@ -23,22 +23,30 @@ module Git
23
23
 
24
24
  attr_reader :collector, :colorizer
25
25
 
26
+ def branch_report
27
+ return "" unless collector.issues?
28
+
29
+ "\n\n#{commit_report}".chomp
30
+ end
31
+
26
32
  def commit_report
27
33
  collector.to_h.reduce "" do |details, (commit, analyzers)|
28
34
  details + Commit.new(commit: commit, analyzers: analyzers).to_s
29
35
  end
30
36
  end
31
37
 
32
- def branch_report
33
- return "" unless collector.issues?
34
-
35
- "\n\n#{commit_report}".chomp "\n"
36
- end
37
-
38
38
  def commit_total
39
39
  %(#{"commit".pluralize count: collector.total_commits} inspected)
40
40
  end
41
41
 
42
+ def issue_totals
43
+ if collector.issues?
44
+ "#{issue_total} detected (#{warning_total}, #{error_total})"
45
+ else
46
+ colorizer.green("0 issues") + " detected"
47
+ end
48
+ end
49
+
42
50
  def issue_total
43
51
  color = collector.errors? ? :red : :yellow
44
52
  colorizer.public_send color, "issue".pluralize(count: collector.total_issues)
@@ -53,14 +61,6 @@ module Git
53
61
  color = collector.errors? ? :red : :green
54
62
  colorizer.public_send color, "error".pluralize(count: collector.total_errors)
55
63
  end
56
-
57
- def issue_totals
58
- if collector.issues?
59
- "#{issue_total} detected (#{warning_total}, #{error_total})"
60
- else
61
- colorizer.green("0 issues") + " detected"
62
- end
63
- end
64
64
  end
65
65
  end
66
66
  end
@@ -3,19 +3,20 @@
3
3
  module Git
4
4
  module Lint
5
5
  class Runner
6
- def initialize configuration:, collector: Collector.new
6
+ def initialize configuration:, branch: Branches::Feature.new, collector: Collector.new
7
7
  @configuration = configuration
8
+ @branch = branch
8
9
  @collector = collector
9
10
  end
10
11
 
11
- def call commits: Branches::Feature.new.commits
12
- Array(commits).map { |commit| check commit }
12
+ def call commits: branch.commits
13
+ commits.map { |commit| check commit }
13
14
  collector
14
15
  end
15
16
 
16
17
  private
17
18
 
18
- attr_reader :configuration, :collector
19
+ attr_reader :configuration, :branch, :collector
19
20
 
20
21
  def check commit
21
22
  configuration.map { |id, settings| load_analyzer id, commit, settings }
@@ -4,7 +4,7 @@ module Git
4
4
  module Lint
5
5
  module Validators
6
6
  class Capitalization
7
- DEFAULT_PATTERN = /\A[[:upper:]].*\Z/.freeze
7
+ DEFAULT_PATTERN = /\A[[:upper:]].*\Z/
8
8
 
9
9
  def initialize text, delimiter: Name::DEFAULT_DELIMITER, pattern: DEFAULT_PATTERN
10
10
  @text = String text
@@ -4,7 +4,7 @@ module Git
4
4
  module Lint
5
5
  module Validators
6
6
  class Name
7
- DEFAULT_DELIMITER = /\s{1}/.freeze
7
+ DEFAULT_DELIMITER = /\s{1}/
8
8
  DEFAULT_MINIMUM = 2
9
9
 
10
10
  def initialize text, delimiter: DEFAULT_DELIMITER, minimum: DEFAULT_MINIMUM
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-lint
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brooke Kuhlmann
@@ -28,246 +28,78 @@ cert_chain:
28
28
  2XV8FRa7/JimI07sPLC13eLY3xd/aYTi85Z782KIA4j0G8XEEWAX0ouBhlXPocZv
29
29
  QWc=
30
30
  -----END CERTIFICATE-----
31
- date: 2020-10-18 00:00:00.000000000 Z
31
+ date: 2021-01-19 00:00:00.000000000 Z
32
32
  dependencies:
33
33
  - !ruby/object:Gem::Dependency
34
- name: pastel
34
+ name: git_plus
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '0.7'
39
+ version: '0.2'
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '0.7'
46
+ version: '0.2'
47
47
  - !ruby/object:Gem::Dependency
48
- name: refinements
48
+ name: pastel
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '7.11'
53
+ version: '0.7'
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '7.11'
60
+ version: '0.7'
61
61
  - !ruby/object:Gem::Dependency
62
- name: runcom
62
+ name: refinements
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '6.0'
67
+ version: '8.0'
68
68
  type: :runtime
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '6.0'
74
+ version: '8.0'
75
75
  - !ruby/object:Gem::Dependency
76
- name: thor
76
+ name: runcom
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '0.20'
81
+ version: '7.0'
82
82
  type: :runtime
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '0.20'
88
+ version: '7.0'
89
89
  - !ruby/object:Gem::Dependency
90
- name: bundler-audit
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '0.6'
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: '0.6'
103
- - !ruby/object:Gem::Dependency
104
- name: gemsmith
105
- requirement: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - "~>"
108
- - !ruby/object:Gem::Version
109
- version: '14.2'
110
- type: :development
111
- prerelease: false
112
- version_requirements: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - "~>"
115
- - !ruby/object:Gem::Version
116
- version: '14.2'
117
- - !ruby/object:Gem::Dependency
118
- name: guard-rspec
119
- requirement: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - "~>"
122
- - !ruby/object:Gem::Version
123
- version: '4.7'
124
- type: :development
125
- prerelease: false
126
- version_requirements: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - "~>"
129
- - !ruby/object:Gem::Version
130
- version: '4.7'
131
- - !ruby/object:Gem::Dependency
132
- name: pry
133
- requirement: !ruby/object:Gem::Requirement
134
- requirements:
135
- - - "~>"
136
- - !ruby/object:Gem::Version
137
- version: '0.13'
138
- type: :development
139
- prerelease: false
140
- version_requirements: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - "~>"
143
- - !ruby/object:Gem::Version
144
- version: '0.13'
145
- - !ruby/object:Gem::Dependency
146
- name: pry-byebug
147
- requirement: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - "~>"
150
- - !ruby/object:Gem::Version
151
- version: '3.9'
152
- type: :development
153
- prerelease: false
154
- version_requirements: !ruby/object:Gem::Requirement
155
- requirements:
156
- - - "~>"
157
- - !ruby/object:Gem::Version
158
- version: '3.9'
159
- - !ruby/object:Gem::Dependency
160
- name: rake
161
- requirement: !ruby/object:Gem::Requirement
162
- requirements:
163
- - - "~>"
164
- - !ruby/object:Gem::Version
165
- version: '13.0'
166
- type: :development
167
- prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- requirements:
170
- - - "~>"
171
- - !ruby/object:Gem::Version
172
- version: '13.0'
173
- - !ruby/object:Gem::Dependency
174
- name: reek
175
- requirement: !ruby/object:Gem::Requirement
176
- requirements:
177
- - - "~>"
178
- - !ruby/object:Gem::Version
179
- version: '6.0'
180
- type: :development
181
- prerelease: false
182
- version_requirements: !ruby/object:Gem::Requirement
183
- requirements:
184
- - - "~>"
185
- - !ruby/object:Gem::Version
186
- version: '6.0'
187
- - !ruby/object:Gem::Dependency
188
- name: rspec
189
- requirement: !ruby/object:Gem::Requirement
190
- requirements:
191
- - - "~>"
192
- - !ruby/object:Gem::Version
193
- version: '3.9'
194
- type: :development
195
- prerelease: false
196
- version_requirements: !ruby/object:Gem::Requirement
197
- requirements:
198
- - - "~>"
199
- - !ruby/object:Gem::Version
200
- version: '3.9'
201
- - !ruby/object:Gem::Dependency
202
- name: rubocop
203
- requirement: !ruby/object:Gem::Requirement
204
- requirements:
205
- - - "~>"
206
- - !ruby/object:Gem::Version
207
- version: '0.89'
208
- type: :development
209
- prerelease: false
210
- version_requirements: !ruby/object:Gem::Requirement
211
- requirements:
212
- - - "~>"
213
- - !ruby/object:Gem::Version
214
- version: '0.89'
215
- - !ruby/object:Gem::Dependency
216
- name: rubocop-performance
217
- requirement: !ruby/object:Gem::Requirement
218
- requirements:
219
- - - "~>"
220
- - !ruby/object:Gem::Version
221
- version: '1.5'
222
- type: :development
223
- prerelease: false
224
- version_requirements: !ruby/object:Gem::Requirement
225
- requirements:
226
- - - "~>"
227
- - !ruby/object:Gem::Version
228
- version: '1.5'
229
- - !ruby/object:Gem::Dependency
230
- name: rubocop-rake
231
- requirement: !ruby/object:Gem::Requirement
232
- requirements:
233
- - - "~>"
234
- - !ruby/object:Gem::Version
235
- version: '0.5'
236
- type: :development
237
- prerelease: false
238
- version_requirements: !ruby/object:Gem::Requirement
239
- requirements:
240
- - - "~>"
241
- - !ruby/object:Gem::Version
242
- version: '0.5'
243
- - !ruby/object:Gem::Dependency
244
- name: rubocop-rspec
245
- requirement: !ruby/object:Gem::Requirement
246
- requirements:
247
- - - "~>"
248
- - !ruby/object:Gem::Version
249
- version: '1.39'
250
- type: :development
251
- prerelease: false
252
- version_requirements: !ruby/object:Gem::Requirement
253
- requirements:
254
- - - "~>"
255
- - !ruby/object:Gem::Version
256
- version: '1.39'
257
- - !ruby/object:Gem::Dependency
258
- name: simplecov
90
+ name: thor
259
91
  requirement: !ruby/object:Gem::Requirement
260
92
  requirements:
261
93
  - - "~>"
262
94
  - !ruby/object:Gem::Version
263
- version: '0.19'
264
- type: :development
95
+ version: '0.20'
96
+ type: :runtime
265
97
  prerelease: false
266
98
  version_requirements: !ruby/object:Gem::Requirement
267
99
  requirements:
268
100
  - - "~>"
269
101
  - !ruby/object:Gem::Version
270
- version: '0.19'
102
+ version: '0.20'
271
103
  description:
272
104
  email:
273
105
  - brooke@alchemists.io
@@ -281,7 +113,6 @@ files:
281
113
  - LICENSE.adoc
282
114
  - README.adoc
283
115
  - bin/git-lint
284
- - lib/git/kit/repo.rb
285
116
  - lib/git/lint.rb
286
117
  - lib/git/lint/analyzers/abstract.rb
287
118
  - lib/git/lint/analyzers/commit_author_capitalization.rb
@@ -306,14 +137,13 @@ files:
306
137
  - lib/git/lint/analyzers/commit_trailer_collaborator_key.rb
307
138
  - lib/git/lint/analyzers/commit_trailer_collaborator_name.rb
308
139
  - lib/git/lint/branches/environments/circle_ci.rb
140
+ - lib/git/lint/branches/environments/git_hub_action.rb
309
141
  - lib/git/lint/branches/environments/local.rb
310
142
  - lib/git/lint/branches/environments/netlify_ci.rb
311
143
  - lib/git/lint/branches/environments/travis_ci.rb
312
144
  - lib/git/lint/branches/feature.rb
313
145
  - lib/git/lint/cli.rb
314
146
  - lib/git/lint/collector.rb
315
- - lib/git/lint/commits/saved.rb
316
- - lib/git/lint/commits/unsaved.rb
317
147
  - lib/git/lint/errors/base.rb
318
148
  - lib/git/lint/errors/severity.rb
319
149
  - lib/git/lint/errors/sha.rb
@@ -349,14 +179,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
349
179
  requirements:
350
180
  - - "~>"
351
181
  - !ruby/object:Gem::Version
352
- version: '2.7'
182
+ version: '3.0'
353
183
  required_rubygems_version: !ruby/object:Gem::Requirement
354
184
  requirements:
355
185
  - - ">="
356
186
  - !ruby/object:Gem::Version
357
187
  version: '0'
358
188
  requirements: []
359
- rubygems_version: 3.1.4
189
+ rubygems_version: 3.2.5
360
190
  signing_key:
361
191
  specification_version: 4
362
192
  summary: A command line interface for linting Git commits.