fit-commit 3.8.2 → 3.8.4

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: 9b9ee059898dd05efeddc0f82670d3c3d7a12861fcee02100d532d895b5cce1a
4
- data.tar.gz: 5c5fe5c2784347d7a0b79e3fea0fe3bbfd70849e9d0682d2d308096a471b7ecf
3
+ metadata.gz: d208481fa7e6d24b87d13377174a9bf8cd24cb9216be8419af43de28fc95a743
4
+ data.tar.gz: 9bd15f6e38177245dc717eb8e47765b97802c67c4767ad520af784c32e1d22fb
5
5
  SHA512:
6
- metadata.gz: 5555c157f4f4cc3418e807aa5aa5f1ef897939d2963bc6d00335017b8ff7948f9f2a71d016957ad9c8c988d0696ac01bd42d439bf20f5912f8f48b9da7f516b2
7
- data.tar.gz: 22b8772ed37089bbb8671a2ea38492d4a3fe10591ff498d1f3a5ae4f23f730acc76b879145651d52e7402bc7d89afeb2a4e3836af0515426edc7f93a992ba038
6
+ metadata.gz: f77e6d5d22b3e5f5ccb77da1cb6e6dc0a7806ca47ae515866ce113fd0296ed6d9d90eaffea727bcb8139bdc062f89b4aa2ce1319df321c10db15e670a4806c92
7
+ data.tar.gz: 1fa6486fddcc4dde6553955f28fa25379225198667e1f574a1c571c842ff5d31b254fd889202cf9ae6bf20621dcadf770966738ccc93a9d392eb4e1ac6006feb
data/README.md CHANGED
@@ -14,7 +14,7 @@ foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar
14
14
  2: Error: Second line must be blank.
15
15
  3: Error: Lines should be <= 72 chars. (76)
16
16
 
17
- Force commit? [y/n/e] ▊
17
+ Commit anyway? [y/n/e] ▊
18
18
  ```
19
19
 
20
20
  ## Prerequisites
@@ -2,6 +2,9 @@ require "fit_commit/line"
2
2
 
3
3
  module FitCommit
4
4
  class MessageParser
5
+ GIT_VERBOSE_MARKER = "# ------------------------ >8 ------------------------"
6
+ COMMENT_REGEX = /\A#/
7
+
5
8
  attr_accessor :message_path
6
9
  def initialize(message_path)
7
10
  self.message_path = message_path
@@ -13,9 +16,6 @@ module FitCommit
13
16
 
14
17
  private
15
18
 
16
- GIT_VERBOSE_MARKER = "# ------------------------ >8 ------------------------"
17
- COMMENT_REGEX = /\A#/
18
-
19
19
  def relevant_lines
20
20
  message_text.lines.each_with_object([]) do |line, relevant_lines|
21
21
  line.chomp!
@@ -8,6 +8,7 @@ module FitCommit
8
8
 
9
9
  EXIT_CODE_ALLOW_COMMIT = 0
10
10
  EXIT_CODE_REJECT_COMMIT = 1
11
+ DEFAULT_EDITOR = "vim"
11
12
 
12
13
  attr_accessor :message_path, :branch_name, :stderr, :stdin
13
14
  def initialize(message_path, branch_name, stderr = $stderr, stdin = $stdin)
@@ -51,7 +52,7 @@ module FitCommit
51
52
 
52
53
  def ask_force_commit
53
54
  return unless interactive?
54
- stderr.print "\nForce commit? [y/n/e] "
55
+ stderr.print "\nCommit anyway? [y/n/e] "
55
56
  input = stdin.gets
56
57
  fail StartOverOnEditException if input =~ /e/i
57
58
  input =~ /y/i
@@ -105,8 +106,6 @@ module FitCommit
105
106
  system(editor, message_path)
106
107
  end
107
108
 
108
- DEFAULT_EDITOR = "vim"
109
-
110
109
  def editor
111
110
  editor = ENV["EDITOR"]
112
111
  editor = DEFAULT_EDITOR unless editor && editor != "none"
@@ -3,28 +3,32 @@ require "fit_commit/validators/base"
3
3
  module FitCommit
4
4
  module Validators
5
5
  class LineLength < Base
6
+ MERGE_COMMIT = /\AMerge branch '[^']+' into ./
7
+ URL = %r{[a-z]+://}
8
+
6
9
  def validate_line(lineno, text)
7
- if lineno == 1 && text.empty?
8
- add_error(lineno, "Subject line cannot be blank.")
9
- elsif lineno == 2 && !text.empty?
10
- add_error(lineno, "Second line must be blank.")
11
- elsif line_too_long?(text)
10
+ if lineno == 1
11
+ if text.empty?
12
+ add_error(lineno, "Subject line cannot be blank.")
13
+ elsif text !~ MERGE_COMMIT
14
+ if text.length > max_line_length
15
+ add_error(lineno, format("Lines should be <= %i chars. (%i)",
16
+ max_line_length, text.length))
17
+ elsif text.length > subject_warn_length
18
+ add_warning(lineno, format("Subject line should be <= %i chars. (%i)",
19
+ subject_warn_length, text.length))
20
+ end
21
+ end
22
+ elsif lineno == 2
23
+ unless text.empty?
24
+ add_error(lineno, "Second line must be blank.")
25
+ end
26
+ elsif text.length > max_line_length && !(allow_long_urls? && text =~ URL)
12
27
  add_error(lineno, format("Lines should be <= %i chars. (%i)",
13
28
  max_line_length, text.length))
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
29
  end
18
30
  end
19
31
 
20
- def line_too_long?(text)
21
- text.length > max_line_length && !(allow_long_urls? && contains_url?(text))
22
- end
23
-
24
- def contains_url?(text)
25
- text =~ %r{[a-z]+://}
26
- end
27
-
28
32
  def max_line_length
29
33
  config.fetch("MaxLineLength")
30
34
  end
@@ -1,3 +1,3 @@
1
1
  module FitCommit
2
- VERSION = "3.8.2"
2
+ VERSION = "3.8.4"
3
3
  end
@@ -14,7 +14,7 @@ describe "Install and run in a fresh Git repo" do
14
14
  Dir.mktmpdir do |gitdir|
15
15
  PTY.spawn(shell_commands(gitdir)) do |pty_out, _pty_in, _pty_pid|
16
16
  if user_input
17
- pty_out.expect(/Force commit\?/, 3) do |expect_out|
17
+ pty_out.expect(/Commit anyway\?/, 3) do |expect_out|
18
18
  output << Array(expect_out).join
19
19
  user_input
20
20
  end
@@ -74,7 +74,7 @@ describe FitCommit::Runner do
74
74
  assert_match(/\A2: Error: /, stderr_lines[5])
75
75
  if interactive
76
76
  assert_empty stderr_lines[6]
77
- assert_match(/\AForce commit\? \[y\/n\/e\] /, stderr_lines[7])
77
+ assert_match(/\ACommit anyway\? \[y\/n\/e\] /, stderr_lines[7])
78
78
  end
79
79
  end
80
80
 
@@ -37,14 +37,6 @@ describe FitCommit::Validators::CapitalizeSubject do
37
37
  end
38
38
  end
39
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
40
  describe "subject is a single uncapitalized word with a body" do
49
41
  let(:commit_msg) { "foo\n\nbaz" }
50
42
  it "has error" do
@@ -42,6 +42,22 @@ describe FitCommit::Validators::LineLength do
42
42
  assert_empty validator.warnings
43
43
  end
44
44
  end
45
+ describe "first line is over error limit and has an URL" do
46
+ let(:commit_msg) { "foo https://" + ("x" * 70) }
47
+ it "has an error and no warning" do
48
+ validator.validate(commit_lines)
49
+ assert_equal 1, validator.errors[1].size
50
+ assert_empty validator.warnings
51
+ end
52
+ end
53
+ describe "merge commit is over error limit" do
54
+ let(:commit_msg) { "Merge branch '#{"x" * 30}' into #{"y" * 30}" }
55
+ it "does not have error" do
56
+ validator.validate(commit_lines)
57
+ assert_empty validator.errors
58
+ assert_empty validator.warnings
59
+ end
60
+ end
45
61
  describe "SubjectWarnLength modified in config" do
46
62
  let(:config) { default_config.merge("SubjectWarnLength" => 5) }
47
63
  describe "first line is over modified warning limit" 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.8.2
4
+ version: 3.8.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Foley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-09 00:00:00.000000000 Z
11
+ date: 2023-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: swearjar
@@ -130,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  requirements: []
133
- rubygems_version: 3.1.4
133
+ rubygems_version: 3.4.13
134
134
  signing_key:
135
135
  specification_version: 4
136
136
  summary: A Git hook to validate your commit messages