fit-commit 2.2.2 → 3.0.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/CONTRIBUTING.md +24 -0
- data/README.md +10 -7
- data/fit-commit.gemspec +1 -1
- data/lib/fit_commit/validators/capitalize_subject.rb +13 -0
- data/lib/fit_commit/validators/line_length.rb +6 -6
- data/lib/fit_commit/validators/{summary_period.rb → subject_period.rb} +2 -2
- data/lib/fit_commit/version.rb +1 -1
- data/templates/config/fit_commit.default.yml +4 -2
- data/test/unit/runner_test.rb +7 -6
- data/test/unit/validator_loader_test.rb +13 -9
- data/test/unit/validators/capitalize_subject_test.rb +36 -0
- data/test/unit/validators/line_length_test.rb +2 -2
- data/test/unit/validators/{summary_period_test.rb → subject_period_test.rb} +6 -6
- metadata +10 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 993eadcd7440c4c9d90a439b33fe1267130b588e
|
4
|
+
data.tar.gz: 288bd8d1af9bcd4ad34b868019ef25e59d6c0005
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8657be275a9f8e7f1649b174fa01fc38e3f621eb546c138848f1269635b455e7f760dbfc38c653f2ea31feeb482ef40d0d1d4eb563a42afa976c9a1a04451509
|
7
|
+
data.tar.gz: 58084b2d2fb38dd72784ae8e44558c1b18f6b21caf51e190d1644a86fc0abe696c7cc7a583015a03cdf93d44d54ad6709e92821698b480f6aadc421903d42363
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,13 @@
|
|
3
3
|
### master
|
4
4
|
- N/A
|
5
5
|
|
6
|
+
### v3.0.0 (2015-09-18)
|
7
|
+
- Rename SummaryPeriod validator to SubjectPeriod (can break existing config files)
|
8
|
+
- Add CapitalizeSubject validator
|
9
|
+
|
10
|
+
### v2.2.2 (2015-09-11)
|
11
|
+
- Fix bug where it wasn't working on the first commit of a repo.
|
12
|
+
|
6
13
|
### v2.2.0 (2015-09-09)
|
7
14
|
- Configuration files to customize behavior.
|
8
15
|
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
## Reporting issues
|
4
|
+
|
5
|
+
We would love to help if you are having a problem. Feel free to open an issue. We ask that you please provide as much detail as possible.
|
6
|
+
|
7
|
+
## Contributing code
|
8
|
+
|
9
|
+
Contributions are encouraged through GitHub Pull Requests.
|
10
|
+
|
11
|
+
Guidelines when adding new code:
|
12
|
+
|
13
|
+
* Create tests when possible.
|
14
|
+
* Ensure the entire test suite still passes by running `rake`.
|
15
|
+
* Ensure code conventions are maintained by running `rubocop`.
|
16
|
+
|
17
|
+
### Adding validations
|
18
|
+
|
19
|
+
To submit your own validation:
|
20
|
+
|
21
|
+
* Create your new validation class in `lib/fit_commit/validators/`.
|
22
|
+
* Add an entry to the default config settings in `fit_commit.default.yml`. If it's a feature not everyone will want by default, set `Enabled: false`.
|
23
|
+
* Create a unit test in `test/unit/validators/`.
|
24
|
+
* Update the config defaults & validation descriptions in the README.
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Fit Commit
|
2
2
|
|
3
|
-
A Git hook to validate your commit messages
|
3
|
+
A Git hook to validate your commit messages based on [community standards](#who-decided-these-rules).
|
4
4
|
|
5
5
|
## Example
|
6
6
|
|
@@ -37,7 +37,8 @@ This creates a `.git/hooks/commit-msg` script which will automatically check you
|
|
37
37
|
|
38
38
|
* **Line Length**: All lines must be <= 72 chars (URLs excluded). First line should be <= 50 chars. Second line must be blank.
|
39
39
|
* **Tense**: Message must use imperative present tense: "Fix bug" and not "Fixed bug" or "Fixes bug."
|
40
|
-
* **
|
40
|
+
* **Subject Period**: Do not end your subject line with a period.
|
41
|
+
* **Capitalize Subject**: Begin all subject lines with a capital letter.
|
41
42
|
* **WIP**: Do not commit WIPs to shared branches.
|
42
43
|
* **Frat House**: No frat house commit messages in shared branches.
|
43
44
|
|
@@ -52,11 +53,13 @@ These are the default settings that can be overridden:
|
|
52
53
|
Validators/LineLength:
|
53
54
|
Enabled: true
|
54
55
|
MaxLineLength: 72
|
55
|
-
|
56
|
+
SubjectWarnLength: 50
|
56
57
|
AllowLongUrls: true
|
57
58
|
Validators/Tense:
|
58
59
|
Enabled: true
|
59
|
-
Validators/
|
60
|
+
Validators/SubjectPeriod:
|
61
|
+
Enabled: true
|
62
|
+
Validators/CapitalizeSubject:
|
60
63
|
Enabled: true
|
61
64
|
Validators/Wip:
|
62
65
|
Enabled:
|
@@ -103,15 +106,15 @@ $ git init
|
|
103
106
|
```
|
104
107
|
|
105
108
|
### Who decided these rules?
|
106
|
-
Fit Commit aims to enforce *community standards*. The two influential guides
|
109
|
+
Fit Commit aims to enforce *community standards*. The two influential guides are:
|
107
110
|
|
108
111
|
- [Tim Pope's blog](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html)
|
109
112
|
- [The official Git documentation](http://git.kernel.org/cgit/git/git.git/tree/Documentation/SubmittingPatches?id=HEAD)
|
110
113
|
|
111
114
|
The Git community has largely (but not completely) coalesced around these standards. [Chris Beams](http://chris.beams.io/posts/git-commit/) and the [Pro Git book](https://git-scm.com/book) also provide good summaries on why we have them.
|
112
115
|
|
113
|
-
###
|
114
|
-
Fit Commit aims to be useful to everyone. If you can suggest an improvement to make it useful to more people, please open a GitHub Issue or Pull Request.
|
116
|
+
### How can I improve Fit Commit?
|
117
|
+
Fit Commit aims to be useful to everyone. If you can suggest an improvement to make it useful to more people, please open a GitHub Issue or Pull Request. See [CONTRIBUTING.md](CONTRIBUTING.md) for more info.
|
115
118
|
|
116
119
|
|
117
120
|
## Credits
|
data/fit-commit.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |gem|
|
|
19
19
|
gem.rdoc_options = ["--main", "README.md"]
|
20
20
|
|
21
21
|
gem.post_install_message = <<-EOF
|
22
|
-
Thank you for installing
|
22
|
+
Thank you for installing Fit Commit!
|
23
23
|
Install the hook in each git repo you want to scan using:
|
24
24
|
|
25
25
|
> fit-commit install
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "fit_commit/validators/base"
|
2
|
+
|
3
|
+
module FitCommit
|
4
|
+
module Validators
|
5
|
+
class CapitalizeSubject < Base
|
6
|
+
def validate_line(lineno, text)
|
7
|
+
if lineno == 1 && text[0] =~ /[[:lower:]]/
|
8
|
+
add_error(lineno, "Begin all subject lines with a capital letter.")
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -5,15 +5,15 @@ module FitCommit
|
|
5
5
|
class LineLength < Base
|
6
6
|
def validate_line(lineno, text)
|
7
7
|
if lineno == 1 && text.empty?
|
8
|
-
add_error(lineno, "
|
8
|
+
add_error(lineno, "Subject line cannot be blank.")
|
9
9
|
elsif lineno == 2 && !text.empty?
|
10
10
|
add_error(lineno, "Second line must be blank.")
|
11
11
|
elsif line_too_long?(text)
|
12
12
|
add_error(lineno, format("Lines should be <= %i chars. (%i)",
|
13
13
|
max_line_length, text.length))
|
14
|
-
elsif lineno == 1 && text.length >
|
15
|
-
add_warning(lineno, format("
|
16
|
-
|
14
|
+
elsif lineno == 1 && text.length > subject_warn_length
|
15
|
+
add_warning(lineno, format("Subject line should be <= %i chars. (%i)",
|
16
|
+
subject_warn_length, text.length))
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -29,8 +29,8 @@ module FitCommit
|
|
29
29
|
config.fetch("MaxLineLength")
|
30
30
|
end
|
31
31
|
|
32
|
-
def
|
33
|
-
config.fetch("
|
32
|
+
def subject_warn_length
|
33
|
+
config.fetch("SubjectWarnLength")
|
34
34
|
end
|
35
35
|
|
36
36
|
def allow_long_urls?
|
@@ -2,10 +2,10 @@ require "fit_commit/validators/base"
|
|
2
2
|
|
3
3
|
module FitCommit
|
4
4
|
module Validators
|
5
|
-
class
|
5
|
+
class SubjectPeriod < Base
|
6
6
|
def validate_line(lineno, text)
|
7
7
|
if lineno == 1 && text.end_with?(".")
|
8
|
-
add_error(lineno, "Do not end your
|
8
|
+
add_error(lineno, "Do not end your subject line with a period.")
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
data/lib/fit_commit/version.rb
CHANGED
@@ -2,11 +2,13 @@
|
|
2
2
|
Validators/LineLength:
|
3
3
|
Enabled: true
|
4
4
|
MaxLineLength: 72
|
5
|
-
|
5
|
+
SubjectWarnLength: 50
|
6
6
|
AllowLongUrls: true
|
7
7
|
Validators/Tense:
|
8
8
|
Enabled: true
|
9
|
-
Validators/
|
9
|
+
Validators/SubjectPeriod:
|
10
|
+
Enabled: true
|
11
|
+
Validators/CapitalizeSubject:
|
10
12
|
Enabled: true
|
11
13
|
Validators/Wip:
|
12
14
|
Enabled:
|
data/test/unit/runner_test.rb
CHANGED
@@ -42,7 +42,7 @@ describe FitCommit::Runner do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
describe "commit msg is present but no errors" do
|
45
|
-
let(:commit_msg) { "
|
45
|
+
let(:commit_msg) { "Hello\n\nhi\n#" }
|
46
46
|
it "allows commit without printing to stderr" do
|
47
47
|
assert_equal FitCommit::Runner::EXIT_CODE_ALLOW_COMMIT, call_runner
|
48
48
|
assert stderr.read.empty?
|
@@ -51,7 +51,7 @@ describe FitCommit::Runner do
|
|
51
51
|
|
52
52
|
describe "commit msg in verbose format" do
|
53
53
|
let(:commit_msg) do
|
54
|
-
["
|
54
|
+
["Foo", "", "#",
|
55
55
|
"# ------------------------ >8 ------------------------",
|
56
56
|
"this difftext should be ignored." * 3
|
57
57
|
].join("\n")
|
@@ -67,13 +67,14 @@ describe FitCommit::Runner do
|
|
67
67
|
|
68
68
|
def assert_error_output
|
69
69
|
stderr_lines = stderr.read.lines.map(&:chomp)
|
70
|
-
assert_equal
|
70
|
+
assert_equal 8, stderr_lines.size
|
71
71
|
assert_equal commit_msg, stderr_lines[0..1].join("\n")
|
72
72
|
assert_empty stderr_lines[2]
|
73
73
|
assert_match(/\A1: Error: /, stderr_lines[3])
|
74
|
-
assert_match(/\
|
75
|
-
|
76
|
-
|
74
|
+
assert_match(/\A1: Error: /, stderr_lines[4])
|
75
|
+
assert_match(/\A2: Error: /, stderr_lines[5])
|
76
|
+
assert_empty stderr_lines[6]
|
77
|
+
assert_equal "Force commit? [y/n] ", stderr_lines[7]
|
77
78
|
end
|
78
79
|
|
79
80
|
describe "user does not force commit" do
|
@@ -7,23 +7,27 @@ describe FitCommit::ValidatorLoader do
|
|
7
7
|
let(:loader) { FitCommit::ValidatorLoader.new(branch_name, configuration) }
|
8
8
|
let(:branch_name) { "foo" }
|
9
9
|
let(:configuration) do
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
10
|
+
# Starting with all disabled because every validator needs at least a
|
11
|
+
# default entry.
|
12
|
+
# The ones specified here are the ones we care about testing.
|
13
|
+
all_disabled_configuration.merge(
|
14
|
+
FitCommit::Validators::LineLength.name => { "Enabled" => false },
|
15
|
+
FitCommit::Validators::Wip.name => { "Enabled" => true },
|
16
|
+
FitCommit::Validators::Frathouse.name => { "Enabled" => ["bar", /\Abaz+/] }
|
17
|
+
)
|
18
|
+
end
|
19
|
+
let(:all_disabled_configuration) do
|
20
|
+
FitCommit::Validators::Base.all.each_with_object({}) do |v, config|
|
21
|
+
config[v.name] = { "Enabled" => false }
|
22
|
+
end
|
17
23
|
end
|
18
24
|
|
19
25
|
it "loads enabled validators" do
|
20
|
-
assert validators.any? { |v| v.is_a? FitCommit::Validators::SummaryPeriod }
|
21
26
|
assert validators.any? { |v| v.is_a? FitCommit::Validators::Wip }
|
22
27
|
end
|
23
28
|
|
24
29
|
it "doesn't load disabled validators" do
|
25
30
|
assert validators.none? { |v| v.is_a? FitCommit::Validators::LineLength }
|
26
|
-
assert validators.none? { |v| v.is_a? FitCommit::Validators::Tense }
|
27
31
|
end
|
28
32
|
|
29
33
|
describe "non-boolean options for Enabled" do
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.expand_path "../validator_helper.rb", __FILE__
|
2
|
+
require "fit_commit/validators/capitalize_subject"
|
3
|
+
require "fit_commit/line"
|
4
|
+
|
5
|
+
describe FitCommit::Validators::CapitalizeSubject do
|
6
|
+
let(:validator) { FitCommit::Validators::CapitalizeSubject.new(branch_name, config) }
|
7
|
+
let(:commit_lines) { FitCommit::Line.from_text_array(commit_msg.split("\n")) }
|
8
|
+
let(:default_config) { default_config_for("Validators/CapitalizeSubject") }
|
9
|
+
let(:config) { default_config }
|
10
|
+
let(:branch_name) { "any" }
|
11
|
+
|
12
|
+
describe "subject is not capitalized" do
|
13
|
+
let(:commit_msg) { "foo bar" }
|
14
|
+
it "has error" do
|
15
|
+
validator.validate(commit_lines)
|
16
|
+
assert_equal 1, validator.errors[1].size
|
17
|
+
assert_empty validator.warnings
|
18
|
+
end
|
19
|
+
end
|
20
|
+
describe "subject is capitalized" do
|
21
|
+
let(:commit_msg) { "Foo bar" }
|
22
|
+
it "does not have errors/warnings" do
|
23
|
+
validator.validate(commit_lines)
|
24
|
+
assert_empty validator.errors
|
25
|
+
assert_empty validator.warnings
|
26
|
+
end
|
27
|
+
end
|
28
|
+
describe "subject is capitalized but body is not" do
|
29
|
+
let(:commit_msg) { "Foo bar\n\nbaz" }
|
30
|
+
it "does not have errors/warnings" do
|
31
|
+
validator.validate(commit_lines)
|
32
|
+
assert_empty validator.errors
|
33
|
+
assert_empty validator.warnings
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -42,8 +42,8 @@ describe FitCommit::Validators::LineLength do
|
|
42
42
|
assert_empty validator.warnings
|
43
43
|
end
|
44
44
|
end
|
45
|
-
describe "
|
46
|
-
let(:config) { default_config.merge("
|
45
|
+
describe "SubjectWarnLength modified in config" do
|
46
|
+
let(:config) { default_config.merge("SubjectWarnLength" => 5) }
|
47
47
|
describe "first line is over modified warning limit" do
|
48
48
|
let(:commit_msg) { "x" * 6 }
|
49
49
|
it "has a warning" do
|
@@ -1,15 +1,15 @@
|
|
1
1
|
require File.expand_path "../validator_helper.rb", __FILE__
|
2
|
-
require "fit_commit/validators/
|
2
|
+
require "fit_commit/validators/subject_period"
|
3
3
|
require "fit_commit/line"
|
4
4
|
|
5
|
-
describe FitCommit::Validators::
|
6
|
-
let(:validator) { FitCommit::Validators::
|
5
|
+
describe FitCommit::Validators::SubjectPeriod do
|
6
|
+
let(:validator) { FitCommit::Validators::SubjectPeriod.new(branch_name, config) }
|
7
7
|
let(:commit_lines) { FitCommit::Line.from_text_array(commit_msg.split("\n")) }
|
8
|
-
let(:default_config) { default_config_for("Validators/
|
8
|
+
let(:default_config) { default_config_for("Validators/SubjectPeriod") }
|
9
9
|
let(:config) { default_config }
|
10
10
|
let(:branch_name) { "any" }
|
11
11
|
|
12
|
-
describe "
|
12
|
+
describe "subject ends with period" do
|
13
13
|
let(:commit_msg) { "foo bar." }
|
14
14
|
it "has error" do
|
15
15
|
validator.validate(commit_lines)
|
@@ -17,7 +17,7 @@ describe FitCommit::Validators::SummaryPeriod do
|
|
17
17
|
assert_empty validator.warnings
|
18
18
|
end
|
19
19
|
end
|
20
|
-
describe "
|
20
|
+
describe "subject does not end with period" do
|
21
21
|
let(:commit_msg) { "foo bar\n\nhi." }
|
22
22
|
it "does not have errors/warnings" do
|
23
23
|
validator.validate(commit_lines)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fit-commit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Foley
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
11
|
+
date: 2015-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: swearjar
|
@@ -65,6 +65,7 @@ files:
|
|
65
65
|
- ".gitignore"
|
66
66
|
- ".rubocop.yml"
|
67
67
|
- CHANGELOG.md
|
68
|
+
- CONTRIBUTING.md
|
68
69
|
- Gemfile
|
69
70
|
- LICENSE
|
70
71
|
- README.md
|
@@ -81,9 +82,10 @@ files:
|
|
81
82
|
- lib/fit_commit/runner.rb
|
82
83
|
- lib/fit_commit/validator_loader.rb
|
83
84
|
- lib/fit_commit/validators/base.rb
|
85
|
+
- lib/fit_commit/validators/capitalize_subject.rb
|
84
86
|
- lib/fit_commit/validators/frathouse.rb
|
85
87
|
- lib/fit_commit/validators/line_length.rb
|
86
|
-
- lib/fit_commit/validators/
|
88
|
+
- lib/fit_commit/validators/subject_period.rb
|
87
89
|
- lib/fit_commit/validators/tense.rb
|
88
90
|
- lib/fit_commit/validators/wip.rb
|
89
91
|
- lib/fit_commit/version.rb
|
@@ -94,9 +96,10 @@ files:
|
|
94
96
|
- test/unit/message_parser_test.rb
|
95
97
|
- test/unit/runner_test.rb
|
96
98
|
- test/unit/validator_loader_test.rb
|
99
|
+
- test/unit/validators/capitalize_subject_test.rb
|
97
100
|
- test/unit/validators/frathouse_test.rb
|
98
101
|
- test/unit/validators/line_length_test.rb
|
99
|
-
- test/unit/validators/
|
102
|
+
- test/unit/validators/subject_period_test.rb
|
100
103
|
- test/unit/validators/tense_test.rb
|
101
104
|
- test/unit/validators/validator_helper.rb
|
102
105
|
- test/unit/validators/wip_test.rb
|
@@ -105,7 +108,7 @@ licenses:
|
|
105
108
|
- MIT
|
106
109
|
metadata: {}
|
107
110
|
post_install_message: |2
|
108
|
-
Thank you for installing
|
111
|
+
Thank you for installing Fit Commit!
|
109
112
|
Install the hook in each git repo you want to scan using:
|
110
113
|
|
111
114
|
> fit-commit install
|
@@ -138,9 +141,10 @@ test_files:
|
|
138
141
|
- test/unit/message_parser_test.rb
|
139
142
|
- test/unit/runner_test.rb
|
140
143
|
- test/unit/validator_loader_test.rb
|
144
|
+
- test/unit/validators/capitalize_subject_test.rb
|
141
145
|
- test/unit/validators/frathouse_test.rb
|
142
146
|
- test/unit/validators/line_length_test.rb
|
143
|
-
- test/unit/validators/
|
147
|
+
- test/unit/validators/subject_period_test.rb
|
144
148
|
- test/unit/validators/tense_test.rb
|
145
149
|
- test/unit/validators/validator_helper.rb
|
146
150
|
- test/unit/validators/wip_test.rb
|