git-lint 1.1.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/LICENSE.adoc +1 -1
- data/README.adoc +82 -30
- data/lib/git/lint.rb +2 -3
- data/lib/git/lint/analyzers/abstract.rb +3 -3
- data/lib/git/lint/analyzers/commit_author_name.rb +1 -1
- data/lib/git/lint/analyzers/commit_body_bullet_delimiter.rb +5 -1
- data/lib/git/lint/analyzers/commit_body_leading_line.rb +4 -3
- data/lib/git/lint/analyzers/commit_subject_prefix.rb +1 -1
- data/lib/git/lint/analyzers/commit_trailer_collaborator_capitalization.rb +2 -2
- data/lib/git/lint/analyzers/commit_trailer_collaborator_duplication.rb +3 -3
- data/lib/git/lint/analyzers/commit_trailer_collaborator_email.rb +2 -2
- data/lib/git/lint/analyzers/commit_trailer_collaborator_key.rb +2 -2
- data/lib/git/lint/analyzers/commit_trailer_collaborator_name.rb +2 -2
- data/lib/git/lint/branches/environments/circle_ci.rb +6 -6
- data/lib/git/lint/branches/environments/git_hub_action.rb +28 -0
- data/lib/git/lint/branches/environments/local.rb +6 -6
- data/lib/git/lint/branches/environments/netlify_ci.rb +8 -8
- data/lib/git/lint/branches/environments/travis_ci.rb +10 -10
- data/lib/git/lint/branches/feature.rb +7 -7
- data/lib/git/lint/cli.rb +9 -11
- data/lib/git/lint/collector.rb +3 -3
- data/lib/git/lint/identity.rb +1 -1
- data/lib/git/lint/parsers/trailers/collaborator.rb +2 -2
- data/lib/git/lint/reporters/branch.rb +14 -14
- data/lib/git/lint/runner.rb +5 -4
- data/lib/git/lint/validators/capitalization.rb +1 -1
- data/lib/git/lint/validators/name.rb +1 -1
- metadata +21 -191
- metadata.gz.sig +2 -2
- data/lib/git/kit/repo.rb +0 -30
- data/lib/git/lint/commits/saved.rb +0 -104
- data/lib/git/lint/commits/unsaved.rb +0 -120
metadata.gz.sig
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
�'p,"��/-�^'��,��q������If(-���_�CG ��Mل�r�j����-.
|
2
|
+
�Q9�d�v��Sc;�0Q<DH������n )`#��K��lN����բ��'8LRd[�P����먄�����֒$������'W�d*����W'�N����n�
|
data/lib/git/kit/repo.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Git
|
4
|
-
module Kit
|
5
|
-
class Repo
|
6
|
-
def initialize shell: Open3
|
7
|
-
@shell = shell
|
8
|
-
end
|
9
|
-
|
10
|
-
def exist?
|
11
|
-
shell.capture2e("git rev-parse --git-dir > /dev/null 2>&1")
|
12
|
-
.then { |result, status| result && status.success? }
|
13
|
-
end
|
14
|
-
|
15
|
-
def branch_name
|
16
|
-
shell.capture2e("git rev-parse --abbrev-ref HEAD | tr -d '\n'")
|
17
|
-
.then { |result, _status| result }
|
18
|
-
end
|
19
|
-
|
20
|
-
def shas start: "master", finish: branch_name
|
21
|
-
shell.capture2e(%(git log --pretty=format:"%H" #{start}..#{finish}))
|
22
|
-
.then { |result, _status| result.split "\n" }
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
attr_reader :shell
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,104 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "open3"
|
4
|
-
|
5
|
-
module Git
|
6
|
-
module Lint
|
7
|
-
module Commits
|
8
|
-
# Represents an existing commit.
|
9
|
-
# :reek:TooManyMethods
|
10
|
-
class Saved
|
11
|
-
using Refinements::Strings
|
12
|
-
|
13
|
-
FORMATS = {
|
14
|
-
sha: "%H",
|
15
|
-
author_name: "%an",
|
16
|
-
author_email: "%ae",
|
17
|
-
author_date_relative: "%ar",
|
18
|
-
subject: "%s",
|
19
|
-
body: "%b",
|
20
|
-
raw_body: "%B",
|
21
|
-
trailers: "%(trailers)"
|
22
|
-
}.freeze
|
23
|
-
|
24
|
-
def self.pattern
|
25
|
-
FORMATS.reduce("") { |pattern, (key, value)| pattern + "<#{key}>#{value}</#{key}>%n" }
|
26
|
-
end
|
27
|
-
|
28
|
-
def initialize sha:, shell: Open3
|
29
|
-
data, status = shell.capture2e show_command(sha)
|
30
|
-
fail Errors::SHA, sha unless status.success?
|
31
|
-
|
32
|
-
@data = data.scrub "?"
|
33
|
-
end
|
34
|
-
|
35
|
-
def == other
|
36
|
-
other.is_a?(self.class) && sha == other.sha
|
37
|
-
end
|
38
|
-
alias eql? ==
|
39
|
-
|
40
|
-
def <=> other
|
41
|
-
sha <=> other.sha
|
42
|
-
end
|
43
|
-
|
44
|
-
def hash
|
45
|
-
sha.hash
|
46
|
-
end
|
47
|
-
|
48
|
-
def body_lines
|
49
|
-
body_without_trailing_spaces
|
50
|
-
end
|
51
|
-
|
52
|
-
def body_paragraphs
|
53
|
-
body_without_trailers.split("\n\n").map(&:chomp).reject { |line| line.start_with? "#" }
|
54
|
-
end
|
55
|
-
|
56
|
-
def trailer_lines
|
57
|
-
trailers.split "\n"
|
58
|
-
end
|
59
|
-
|
60
|
-
def trailer_index
|
61
|
-
body.split("\n").index trailer_lines.first
|
62
|
-
end
|
63
|
-
|
64
|
-
def fixup?
|
65
|
-
subject.fixup?
|
66
|
-
end
|
67
|
-
|
68
|
-
def squash?
|
69
|
-
subject.squash?
|
70
|
-
end
|
71
|
-
|
72
|
-
private
|
73
|
-
|
74
|
-
attr_reader :data
|
75
|
-
|
76
|
-
def show_command sha
|
77
|
-
%(git show --stat --pretty=format:"#{self.class.pattern}" #{sha})
|
78
|
-
end
|
79
|
-
|
80
|
-
def body_without_trailing_spaces
|
81
|
-
body_without_comments.reverse.drop_while(&:empty?).reverse
|
82
|
-
end
|
83
|
-
|
84
|
-
def body_without_comments
|
85
|
-
body_without_trailers.split("\n").reject { |line| line.start_with? "#" }
|
86
|
-
end
|
87
|
-
|
88
|
-
def body_without_trailers
|
89
|
-
body.sub trailers, ""
|
90
|
-
end
|
91
|
-
|
92
|
-
def method_missing name, *arguments, &block
|
93
|
-
return super unless respond_to_missing? name
|
94
|
-
|
95
|
-
String data[%r(<#{name}>(?<content>.*?)</#{name}>)m, :content]
|
96
|
-
end
|
97
|
-
|
98
|
-
def respond_to_missing? name, include_private = false
|
99
|
-
FORMATS.key?(name.to_sym) || super
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
@@ -1,120 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "pathname"
|
4
|
-
require "open3"
|
5
|
-
require "securerandom"
|
6
|
-
|
7
|
-
module Git
|
8
|
-
module Lint
|
9
|
-
module Commits
|
10
|
-
# Represents a partially formed, unsaved commit.
|
11
|
-
# :reek:TooManyMethods
|
12
|
-
class Unsaved
|
13
|
-
using Refinements::Strings
|
14
|
-
|
15
|
-
SUBJECT_LINE = 1
|
16
|
-
SCISSOR_PATTERN = /\#\s-+\s>8\s-+\n.+/m.freeze
|
17
|
-
|
18
|
-
attr_reader :sha, :raw_body
|
19
|
-
|
20
|
-
def initialize path:, sha: SecureRandom.hex(20), shell: Open3
|
21
|
-
fail Errors::Base, %(Invalid commit message path: "#{path}".) unless File.exist? path
|
22
|
-
|
23
|
-
@path = Pathname path
|
24
|
-
@sha = sha
|
25
|
-
@shell = shell
|
26
|
-
@raw_body = File.read(path).scrub "?"
|
27
|
-
end
|
28
|
-
|
29
|
-
def author_name
|
30
|
-
shell.capture2e("git config --get user.name").then { |result, _status| result.chomp }
|
31
|
-
end
|
32
|
-
|
33
|
-
def author_email
|
34
|
-
shell.capture2e("git config --get user.email").then { |result, _status| result.chomp }
|
35
|
-
end
|
36
|
-
|
37
|
-
def author_date_relative
|
38
|
-
"0 seconds ago"
|
39
|
-
end
|
40
|
-
|
41
|
-
def subject
|
42
|
-
String raw_body.split("\n").first
|
43
|
-
end
|
44
|
-
|
45
|
-
# :reek:FeatureEnvy
|
46
|
-
def body
|
47
|
-
raw_body.sub(SCISSOR_PATTERN, "").split("\n").drop(SUBJECT_LINE).then do |lines|
|
48
|
-
computed_body = lines.join "\n"
|
49
|
-
lines.empty? ? computed_body : "#{computed_body}\n"
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def body_lines
|
54
|
-
body_without_trailing_spaces
|
55
|
-
end
|
56
|
-
|
57
|
-
# :reek:FeatureEnvy
|
58
|
-
def body_paragraphs
|
59
|
-
body_without_trailers.split("\n\n")
|
60
|
-
.map { |line| line.delete_prefix "\n" }
|
61
|
-
.map(&:chomp)
|
62
|
-
.reject { |line| line.start_with? "#" }
|
63
|
-
end
|
64
|
-
|
65
|
-
def trailers
|
66
|
-
trailers, status = shell.capture2e %(git interpret-trailers --only-trailers "#{path}")
|
67
|
-
|
68
|
-
return "" unless status.success?
|
69
|
-
|
70
|
-
trailers
|
71
|
-
end
|
72
|
-
|
73
|
-
def trailer_lines
|
74
|
-
trailers.split "\n"
|
75
|
-
end
|
76
|
-
|
77
|
-
def trailer_index
|
78
|
-
body.split("\n").index trailer_lines.first
|
79
|
-
end
|
80
|
-
|
81
|
-
def == other
|
82
|
-
other.is_a?(self.class) && raw_body == other.raw_body
|
83
|
-
end
|
84
|
-
alias eql? ==
|
85
|
-
|
86
|
-
def <=> other
|
87
|
-
raw_body <=> other.raw_body
|
88
|
-
end
|
89
|
-
|
90
|
-
def hash
|
91
|
-
raw_body.hash
|
92
|
-
end
|
93
|
-
|
94
|
-
def fixup?
|
95
|
-
subject.fixup?
|
96
|
-
end
|
97
|
-
|
98
|
-
def squash?
|
99
|
-
subject.squash?
|
100
|
-
end
|
101
|
-
|
102
|
-
private
|
103
|
-
|
104
|
-
attr_reader :path, :shell
|
105
|
-
|
106
|
-
def body_without_trailing_spaces
|
107
|
-
body_without_comments.reverse.drop_while(&:empty?).reverse
|
108
|
-
end
|
109
|
-
|
110
|
-
def body_without_comments
|
111
|
-
body_without_trailers.split("\n").reject { |line| line.start_with? "#" }
|
112
|
-
end
|
113
|
-
|
114
|
-
def body_without_trailers
|
115
|
-
body.sub trailers, ""
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|