fit-commit 3.7.0 → 3.8.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a0b95d59622579ff58ddc0443293c4be66ae71b9
4
- data.tar.gz: 9a8d5cca328a035aa802c9e5514ed5c0c1e07c11
3
+ metadata.gz: 5f18c1fdd99e92a81ce99b52089165e3b789551b
4
+ data.tar.gz: 73268b23af0112f5640f4f1ddcc39ea6f24a0349
5
5
  SHA512:
6
- metadata.gz: 271657b39d8a59e5f9c8e537a8cd6c972f5e73e68cf289bfdebd9860585b4ef344e9a8b517c80615ac6791d0fe843f72cd32ed5a56491d09e6cd079e95f80b6a
7
- data.tar.gz: a38474d9139609b5672926e3c8e05069c1c655707fed2eaca6a2223cd01aa51067ceca1719247582498c2c37c6e8556fb50bb68623954e040c76db651106ac55
6
+ metadata.gz: bba6727a6122f9a3b3c2d0ecd40ee527492b65b104b2f55e169077f6d93f0ac03c7e52aee53f7f22676cf895a2e219147d473b8a7a78112f041d73d9d0fcf2fb
7
+ data.tar.gz: 3c4b885485f5f1abde6772d5f6eb0d953f0891f104c4d96a89683f14d69b908a834da93d1baa337bbe1cbc7dfc92b1a13e4aced522045c45bd46b7a5e63b8d0a
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ### v3.8.0 (2018-08-06)
4
+ - Add CapitalizeSubject config option to warn on WIPlikes
5
+
6
+ ### v3.7.0 (2017-01-07)
7
+ - Run via Bundler if available
8
+
9
+ ### v3.6.0 (2016-11-18)
10
+ - Disable WIP check by default
11
+
3
12
  ### v3.5.0 (2016-04-05)
4
13
  - All validations are enabled on all branches by default
5
14
 
data/README.md CHANGED
@@ -61,6 +61,7 @@ Validators/SubjectPeriod:
61
61
  Enabled: true
62
62
  Validators/CapitalizeSubject:
63
63
  Enabled: true
64
+ WarnOnWiplikes: true
64
65
  Validators/Frathouse:
65
66
  Enabled: true
66
67
  Validators/Wip:
@@ -161,10 +162,15 @@ $ git init
161
162
  Fit Commit can be run outside of a Git hook context with a simple shell script:
162
163
 
163
164
  ```sh
164
- $ GIT_BRANCH_NAME=branch_name COMMIT_MESSAGE_PATH=path/to/message rbenv exec ruby -rrubygems -e 'require "fit_commit"; FitCommit.run'
165
+ $ export GIT_BRANCH_NAME=branch_name
166
+ $ export COMMIT_MESSAGE_PATH=path/to/message
167
+ # Using Bundler
168
+ $ bundle exec ruby -e 'require "fit_commit"; FitCommit.run'
169
+ # Not using Bundler
170
+ $ rbenv exec ruby -rrubygems -e 'require "fit_commit"; FitCommit.run'
165
171
  ```
166
172
 
167
- It exits with an error code if any errors are present, which will fail a build if it's part of a CI run. The configuration should be modified for CI to be more lenient, otherwise false positives will break the build too often.
173
+ It exits with an error code if any errors are present, which will fail a build if it's part of a CI run.
168
174
 
169
175
  ### Who decided these rules?
170
176
  Fit Commit aims to enforce *community standards*. The two influential guides are:
data/TODO.md ADDED
@@ -0,0 +1,3 @@
1
+ # TODO
2
+
3
+ - Ideas from: https://github.com/bkuhlmann/git-cop
@@ -2,47 +2,58 @@ require "yaml"
2
2
 
3
3
  module FitCommit
4
4
  class ConfigurationLoader
5
- def global_configuration
6
- all_filepaths.each_with_object({}) do |filepath, config|
5
+ SYSTEM_FILEPATH = "/etc/fit_commit.yml"
6
+ LOCAL_FILEPATH = ".fit_commit.yml"
7
+
8
+ def initialize(filepaths)
9
+ self.filepaths = filepaths
10
+ end
11
+
12
+ def self.default_configuration
13
+ new(default_filepaths).configuration
14
+ end
15
+
16
+ def configuration
17
+ filepaths.each_with_object({}) do |filepath, config|
7
18
  config.merge!(read_config(filepath)) do |_key, oldval, newval|
8
19
  oldval.merge(newval)
9
20
  end
10
21
  end
11
22
  end
12
23
 
13
- private
14
-
15
- def all_filepaths
16
- # sorted by increasing precedence
17
- [default_filepath, system_filepath, user_filepath, config_filepath, local_filepath]
24
+ def self.default_filepaths
25
+ [
26
+ gem_default_filepath,
27
+ SYSTEM_FILEPATH,
28
+ user_filepath,
29
+ config_filepath,
30
+ LOCAL_FILEPATH
31
+ ]
18
32
  end
19
33
 
20
- def default_filepath
34
+ def self.gem_default_filepath
21
35
  File.expand_path("../../../templates/config/fit_commit.default.yml", __FILE__)
22
36
  end
23
37
 
24
- def system_filepath
25
- "/etc/fit_commit.yml"
26
- end
27
-
28
- def user_filepath
38
+ def self.user_filepath
29
39
  File.join(ENV["HOME"], ".fit_commit.yml")
30
40
  end
31
41
 
32
- def config_filepath
42
+ def self.config_filepath
33
43
  File.join(git_top_level, "config", "fit_commit.yml")
34
44
  end
35
45
 
36
- def local_filepath
37
- ".fit_commit.yml"
38
- end
39
-
40
- def git_top_level
46
+ def self.git_top_level
41
47
  top_level = `git rev-parse --show-toplevel`.chomp.strip
42
48
  fail "Git repo not found! Please submit a bug report." if top_level == ""
43
49
  top_level
44
50
  end
45
51
 
52
+ private
53
+
54
+ # sorted by increasing precedence
55
+ attr_accessor :filepaths
56
+
46
57
  def read_config(path)
47
58
  load_yaml(path).each_with_object({}) do |(key, value), config|
48
59
  translated_key = translate_config_key(key)
@@ -2,7 +2,6 @@ require "fit_commit/configuration_loader"
2
2
 
3
3
  module FitCommit
4
4
  class ValidatorLoader
5
- attr_accessor :branch_name, :configuration
6
5
  def initialize(branch_name, configuration = load_configuration)
7
6
  self.branch_name = branch_name
8
7
  self.configuration = configuration
@@ -14,8 +13,10 @@ module FitCommit
14
13
 
15
14
  private
16
15
 
16
+ attr_accessor :branch_name, :configuration
17
+
17
18
  def load_configuration
18
- FitCommit::ConfigurationLoader.new.global_configuration
19
+ FitCommit::ConfigurationLoader.default_configuration
19
20
  end
20
21
 
21
22
  def all_validators
@@ -3,13 +3,29 @@ require "fit_commit/validators/base"
3
3
  module FitCommit
4
4
  module Validators
5
5
  class CapitalizeSubject < Base
6
+ MESSAGE = "Begin all subject lines with a capital letter."
7
+ SINGLE_WORD = /\A\w+\z/
6
8
  AUTOSQUASH = /\A(fixup|squash)! /
7
9
 
8
- def validate_line(lineno, text)
9
- if lineno == 1 && text[0] =~ /[[:lower:]]/ && text !~ AUTOSQUASH
10
- add_error(lineno, "Begin all subject lines with a capital letter.")
10
+ def validate(lines)
11
+ if lines[0].text =~ /\A[[:lower:]]/ && lines[0].text !~ AUTOSQUASH
12
+ if ignore_on_wiplikes? && wiplike?(lines)
13
+ add_warning(1, MESSAGE)
14
+ else
15
+ add_error(1, MESSAGE)
16
+ end
11
17
  end
12
18
  end
19
+
20
+ private
21
+
22
+ def wiplike?(lines)
23
+ lines[0].text =~ SINGLE_WORD && lines[1..-1].all?(&:empty?)
24
+ end
25
+
26
+ def ignore_on_wiplikes?
27
+ config.fetch("WarnOnWiplikes")
28
+ end
13
29
  end
14
30
  end
15
31
  end
@@ -45,6 +45,7 @@ module FitCommit
45
45
  removes removing removed
46
46
  renames renaming renamed
47
47
  reorders reordering reordered
48
+ replaces replacing replaced
48
49
  requires requiring required
49
50
  restores restoring restored
50
51
  sends sending sent
@@ -1,3 +1,3 @@
1
1
  module FitCommit
2
- VERSION = "3.7.0"
2
+ VERSION = "3.8.0"
3
3
  end
@@ -10,6 +10,7 @@ Validators/SubjectPeriod:
10
10
  Enabled: true
11
11
  Validators/CapitalizeSubject:
12
12
  Enabled: true
13
+ WarnOnWiplikes: true
13
14
  Validators/Frathouse:
14
15
  Enabled: true
15
16
  Validators/Wip:
data/test/test_helper.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require "minitest/autorun"
2
2
 
3
- def create_tempfile(filename, content)
3
+ def create_tempfile(content, filename="")
4
4
  Tempfile.new(filename).tap do |f|
5
5
  f.write(content)
6
6
  f.close
@@ -2,81 +2,109 @@ require "test_helper"
2
2
  require "fit_commit/configuration_loader"
3
3
 
4
4
  describe FitCommit::ConfigurationLoader do
5
- subject { FitCommit::ConfigurationLoader.new }
6
-
7
- after do
8
- [system_file, user_file].compact.each(&:unlink)
9
- end
10
-
11
- let(:global_configuration) do
12
- subject.stub :default_filepath, "/dev/null" do
13
- subject.stub :system_filepath, (system_file ? system_file.path : "/dev/null") do
14
- subject.stub :user_filepath, (user_file ? user_file.path : "/dev/null") do
15
- subject.stub :config_filepath, "/dev/null" do
16
- subject.stub :local_filepath, "/dev/null" do
17
- subject.stub :git_top_level, "." do
18
- subject.global_configuration
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
26
-
27
5
  describe "no configuration files present" do
28
- let(:system_file) { nil }
29
- let(:user_file) { nil }
30
6
  it "is empty" do
31
- assert_equal({}, global_configuration)
7
+ config = FitCommit::ConfigurationLoader.new(["/dev/null"]).configuration
8
+ assert_equal({}, config)
32
9
  end
33
10
  end
34
11
 
35
12
  describe "just one configuration file present" do
36
- let(:system_file) { nil }
37
- let(:user_file) { create_tempfile("user_file", user_file_content) }
38
- let(:user_file_content) do
39
- "Foo/Bar:\n Baz: false\nQux/Norf/Blah:\n - !ruby/regexp /\\Afoo/"
40
- end
41
-
42
13
  it "is a configuration equal to that file" do
43
- expected = {
14
+ config_content = <<~EOF
15
+ Foo/Bar:
16
+ Baz: false
17
+ Qux/Norf/Blah:
18
+ - !ruby/regexp /\\Afoo/
19
+ EOF
20
+ config_file_path = create_tempfile(config_content).path
21
+
22
+ expected_config = {
44
23
  "FitCommit::Foo::Bar" => { "Baz" => false },
45
24
  "FitCommit::Qux::Norf::Blah" => [/\Afoo/]
46
25
  }
47
- assert_equal expected, global_configuration
26
+
27
+ config = FitCommit::ConfigurationLoader.new([config_file_path]).configuration
28
+ assert_equal expected_config, config
48
29
  end
49
30
 
50
- describe "has a non-validation key" do
51
- let(:user_file_content) do
52
- "FitCommit:\n Require:\n - foo/bar"
53
- end
31
+ describe "has a key without a slash" do
54
32
  it "doesn't try to namespace the key" do
55
- expected = {
33
+ config_content = <<~EOF
34
+ FitCommit:
35
+ Require:
36
+ - foo/bar
37
+ EOF
38
+ config_file_path = create_tempfile(config_content).path
39
+
40
+ expected_config = {
56
41
  "FitCommit" => { "Require" => ["foo/bar"] }
57
42
  }
58
- assert_equal expected, global_configuration
43
+
44
+ config = FitCommit::ConfigurationLoader.new([config_file_path]).configuration
45
+ assert_equal expected_config, config
59
46
  end
60
47
  end
61
48
  end
62
49
 
63
50
  describe "multiple configuration files present" do
64
- let(:system_file) { create_tempfile("system_file", system_file_content) }
65
- let(:user_file) { create_tempfile("user_file", user_file_content) }
66
- let(:system_file_content) do
67
- "Foo/Bar:\n Baz: false\nQux/Norf/Blah:\n Foobar:\n - !ruby/regexp /\\Afoo/\n Booyah: false"
68
- end
69
- let(:user_file_content) do
70
- "Qux/Norf/Blah:\n Foobar: true\nAbc/Buz:\n - hi"
71
- end
72
-
73
51
  it "is a merged configuration that takes precedence into account" do
74
- expected = {
52
+ config1_content = <<~EOF
53
+ Foo/Bar:
54
+ Baz: false
55
+ Qux/Norf/Blah:
56
+ Foobar:
57
+ - !ruby/regexp /\\Afoo/
58
+ Booyah: false
59
+ EOF
60
+
61
+ config2_content = <<~EOF
62
+ Qux/Norf/Blah:
63
+ Foobar: true
64
+ Abc/Buz:
65
+ - hi
66
+ EOF
67
+
68
+ config_file_paths = [
69
+ create_tempfile(config1_content).path,
70
+ create_tempfile(config2_content).path
71
+ ]
72
+
73
+ expected_config = {
75
74
  "FitCommit::Foo::Bar" => { "Baz" => false },
76
75
  "FitCommit::Qux::Norf::Blah" => { "Foobar" => true, "Booyah" => false },
77
76
  "FitCommit::Abc::Buz" => ["hi"]
78
77
  }
79
- assert_equal expected, global_configuration
78
+
79
+ config = FitCommit::ConfigurationLoader.new(config_file_paths).configuration
80
+ assert_equal expected_config, config
81
+ end
82
+ end
83
+
84
+ describe "default_configuration" do
85
+ it "loads configuration from default filepaths" do
86
+ config_content = <<~EOF
87
+ FitCommit:
88
+ Require:
89
+ - foo/bar
90
+ EOF
91
+ config_file_path = create_tempfile(config_content).path
92
+
93
+ expected_config = {
94
+ "FitCommit" => { "Require" => ["foo/bar"] }
95
+ }
96
+
97
+ config = FitCommit::ConfigurationLoader.stub(:default_filepaths, [config_file_path]) do
98
+ FitCommit::ConfigurationLoader.default_configuration
99
+ end
100
+ assert_equal expected_config, config
101
+ end
102
+ end
103
+
104
+ describe "gem_default_filepath" do
105
+ it "returns a valid filepath" do
106
+ gem_default_filepath = FitCommit::ConfigurationLoader.gem_default_filepath
107
+ assert File.exist?(gem_default_filepath)
80
108
  end
81
109
  end
82
110
  end
@@ -2,12 +2,8 @@ require "test_helper"
2
2
  require "fit_commit/message_parser"
3
3
 
4
4
  describe FitCommit::MessageParser do
5
- after do
6
- commit_msg_file.unlink
7
- end
8
-
9
- let(:commit_msg_file) { create_tempfile("test-commit-msg", commit_msg) }
10
- let(:lines) { FitCommit::MessageParser.new(commit_msg_file.path).lines }
5
+ let(:commit_msg_file_path) { create_tempfile(commit_msg).path }
6
+ let(:lines) { FitCommit::MessageParser.new(commit_msg_file_path).lines }
11
7
 
12
8
  describe "empty commit msg" do
13
9
  let(:commit_msg) { "" }
@@ -2,15 +2,12 @@ require "test_helper"
2
2
  require "fit_commit/runner"
3
3
 
4
4
  describe FitCommit::Runner do
5
- after do
6
- commit_msg_file.unlink
7
- end
8
- let(:commit_msg_file) { create_tempfile("test-commit-msg", commit_msg) }
5
+ let(:commit_msg_file_path) { create_tempfile(commit_msg).path }
9
6
  let(:stderr) { StringIO.new }
10
7
  let(:stdin) { StringIO.new }
11
8
  let(:branch_name) { "any" }
12
9
  let(:runner) do
13
- FitCommit::Runner.new(commit_msg_file.path, branch_name, stderr, stdin)
10
+ FitCommit::Runner.new(commit_msg_file_path, branch_name, stderr, stdin)
14
11
  end
15
12
 
16
13
  def call_runner
@@ -3,81 +3,71 @@ require "fit_commit/validator_loader"
3
3
  Dir[File.dirname(__FILE__) + "/validators/*.rb"].each { |file| require file }
4
4
 
5
5
  describe FitCommit::ValidatorLoader do
6
- let(:validators) { loader.validators }
7
- let(:loader) { FitCommit::ValidatorLoader.new(branch_name, configuration) }
8
- let(:branch_name) { "foo" }
9
- let(:configuration) do
6
+ def simple_validators(branch_name: "mybranch")
10
7
  # Starting with all disabled because every validator needs at least a
11
8
  # default entry.
12
9
  # The ones specified here are the ones we care about testing.
13
- all_disabled_configuration.merge(
10
+ configuration = all_disabled_configuration.merge(
14
11
  FitCommit::Validators::LineLength.name => { "Enabled" => false },
15
12
  FitCommit::Validators::Wip.name => { "Enabled" => true },
16
13
  FitCommit::Validators::Frathouse.name => { "Enabled" => ["bar", /\Abaz+/] }
17
14
  )
15
+ FitCommit::ValidatorLoader.new(branch_name, configuration).validators
18
16
  end
19
- let(:all_disabled_configuration) do
17
+
18
+ def all_disabled_configuration
20
19
  FitCommit::Validators::Base.all.each_with_object({}) do |v, config|
21
20
  config[v.name] = { "Enabled" => false }
22
21
  end
23
22
  end
24
23
 
25
24
  it "loads enabled validators" do
26
- assert validators.one? { |v| v.is_a? FitCommit::Validators::Wip }
25
+ assert simple_validators.grep(FitCommit::Validators::Wip).one?
27
26
  end
28
27
 
29
28
  it "doesn't load disabled validators" do
30
- assert validators.none? { |v| v.is_a? FitCommit::Validators::LineLength }
29
+ assert simple_validators.grep(FitCommit::Validators::LineLength).none?
31
30
  end
32
31
 
33
32
  describe "non-boolean options for Enabled" do
34
33
  describe "branch_name does not match validator" do
35
34
  it "doesn't load validator" do
36
- assert validators.none? { |v| v.is_a? FitCommit::Validators::Frathouse }
35
+ assert simple_validators.grep(FitCommit::Validators::Frathouse).none?
37
36
  end
38
37
  end
39
38
 
40
39
  describe "branch_name matches validator via String" do
41
- let(:branch_name) { "bar" }
42
40
  it "loads validator" do
43
- assert validators.one? { |v| v.is_a? FitCommit::Validators::Frathouse }
41
+ assert simple_validators(branch_name: "bar").
42
+ grep(FitCommit::Validators::Frathouse).one?
44
43
  end
45
44
  end
46
45
 
47
46
  describe "branch_name matches validator via regex" do
48
- let(:branch_name) { "bazzz" }
49
47
  it "loads validator" do
50
- assert validators.one? { |v| v.is_a? FitCommit::Validators::Frathouse }
48
+ assert simple_validators(branch_name: "bazzz").
49
+ grep(FitCommit::Validators::Frathouse).one?
51
50
  end
52
51
  end
53
52
  end
54
53
 
55
54
  describe "branch_name is blank" do
56
- let(:branch_name) { "" }
57
55
  it "loads enabled validators" do
58
- assert validators.one? { |v| v.is_a? FitCommit::Validators::Wip }
56
+ assert simple_validators(branch_name: "").grep(FitCommit::Validators::Wip).one?
59
57
  end
60
58
  it "doesn't load disabled validators" do
61
- assert validators.none? { |v| v.is_a? FitCommit::Validators::LineLength }
59
+ assert simple_validators(branch_name: "").grep(FitCommit::Validators::LineLength).none?
62
60
  end
63
61
  it "doesn't load validators that have non-boolean options for Enabled" do
64
- assert validators.none? { |v| v.is_a? FitCommit::Validators::Frathouse }
62
+ assert simple_validators(branch_name: "").grep(FitCommit::Validators::Frathouse).none?
65
63
  end
66
64
  end
67
65
 
68
66
  describe "custom validators required" do
69
- after do
70
- custom_validator_file.unlink
71
- end
72
-
73
- let(:custom_validator_file) do
74
- create_tempfile(["my_custom_validator", ".rb"], custom_validator_code)
75
- end
76
-
77
- # Not actually subclassing FitCommit::Validators::Base because
78
- # that affects the loaded validators for other tests.
79
- let(:custom_validator_code) do
80
- <<-EOF
67
+ it "loads enabled custom validator" do
68
+ # Not actually subclassing FitCommit::Validators::Base because
69
+ # that affects the loaded validators for other tests.
70
+ custom_validator_code = <<~EOF
81
71
  class MyCustomValidator
82
72
  attr_accessor :config
83
73
  def initialize(_branch_name, config)
@@ -88,23 +78,24 @@ describe FitCommit::ValidatorLoader do
88
78
  end
89
79
  end
90
80
  EOF
91
- end
92
81
 
93
- let(:configuration) do
94
- all_disabled_configuration.merge(
82
+ # rb extension is necessary to `require` it
83
+ custom_validator_file = create_tempfile(
84
+ custom_validator_code, ["custom_validator", ".rb"])
85
+
86
+ configuration = all_disabled_configuration.merge(
95
87
  "FitCommit" => { "Require" => [custom_validator_file.path] },
96
88
  "MyCustomValidator" => { "Enabled" => true }
97
89
  )
98
- end
99
90
 
100
- it "loads enabled custom validator" do
101
91
  # stub which will be overridden when the custom validator file is loaded
102
92
  MyCustomValidator = Class.new
103
93
 
104
- FitCommit::Validators::Base.stub(:all, [MyCustomValidator]) do
105
- assert_equal 1, validators.size
106
- assert validators.first.is_a?(MyCustomValidator)
94
+ validators = FitCommit::Validators::Base.stub(:all, [MyCustomValidator]) do
95
+ FitCommit::ValidatorLoader.new("mybranch", configuration).validators
107
96
  end
97
+ assert_equal 1, validators.size
98
+ assert validators.first.is_a?(MyCustomValidator)
108
99
  end
109
100
  end
110
101
  end
@@ -9,7 +9,7 @@ describe FitCommit::Validators::CapitalizeSubject do
9
9
  let(:config) { default_config }
10
10
  let(:branch_name) { "any" }
11
11
 
12
- describe "subject is not capitalized" do
12
+ describe "subject is uncapitalized" do
13
13
  let(:commit_msg) { "foo bar" }
14
14
  it "has error" do
15
15
  validator.validate(commit_lines)
@@ -17,6 +17,42 @@ describe FitCommit::Validators::CapitalizeSubject do
17
17
  assert_empty validator.warnings
18
18
  end
19
19
  end
20
+ describe "subject is WIPlike (single uncapitalized word with no body)" do
21
+ let(:commit_msg) { "foo" }
22
+
23
+ describe "WarnOnWiplikes is true" do
24
+ it "has a warning" do
25
+ validator.validate(commit_lines)
26
+ assert_empty validator.errors
27
+ assert_equal 1, validator.warnings[1].size
28
+ end
29
+ end
30
+
31
+ describe "WarnOnWiplikes is false" do
32
+ let(:config) { default_config.merge("WarnOnWiplikes" => false) }
33
+ it "has an error" do
34
+ validator.validate(commit_lines)
35
+ assert_equal 1, validator.errors[1].size
36
+ assert_empty validator.warnings
37
+ end
38
+ end
39
+ end
40
+ describe "test " do
41
+ let(:commit_msg) { "\nsdf" }
42
+ it "has a warning" do
43
+ validator.validate(commit_lines)
44
+ assert_empty validator.errors
45
+ assert_empty validator.warnings
46
+ end
47
+ end
48
+ describe "subject is a single uncapitalized word with a body" do
49
+ let(:commit_msg) { "foo\n\nbaz" }
50
+ it "has error" do
51
+ validator.validate(commit_lines)
52
+ assert_equal 1, validator.errors[1].size
53
+ assert_empty validator.warnings
54
+ end
55
+ end
20
56
  describe "subject is fixup commit" do
21
57
  let(:commit_msg) { "fixup! foo bar" }
22
58
  it "does not have errors/warnings" do
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: 3.7.0
4
+ version: 3.8.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: 2017-01-08 00:00:00.000000000 Z
11
+ date: 2018-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: swearjar
@@ -69,6 +69,7 @@ files:
69
69
  - LICENSE
70
70
  - README.md
71
71
  - Rakefile
72
+ - TODO.md
72
73
  - bin/fit-commit
73
74
  - fit-commit.gemspec
74
75
  - lib/fit_commit.rb
@@ -131,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
132
  version: '0'
132
133
  requirements: []
133
134
  rubyforge_project:
134
- rubygems_version: 2.2.3
135
+ rubygems_version: 2.6.14
135
136
  signing_key:
136
137
  specification_version: 4
137
138
  summary: A Git hook to validate your commit messages