overcommit-jeygeethanmedia 0.53.1.2 → 0.58.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/bin/overcommit +6 -5
  3. data/config/default.yml +37 -5
  4. data/lib/overcommit/cli.rb +14 -13
  5. data/lib/overcommit/command_splitter.rb +2 -0
  6. data/lib/overcommit/configuration.rb +1 -1
  7. data/lib/overcommit/configuration_loader.rb +11 -8
  8. data/lib/overcommit/exceptions.rb +19 -16
  9. data/lib/overcommit/git_config.rb +1 -0
  10. data/lib/overcommit/git_repo.rb +14 -13
  11. data/lib/overcommit/hook/commit_msg/base.rb +1 -1
  12. data/lib/overcommit/hook/commit_msg/spell_check.rb +1 -1
  13. data/lib/overcommit/hook/commit_msg/text_width.rb +1 -1
  14. data/lib/overcommit/hook/post_checkout/base.rb +1 -0
  15. data/lib/overcommit/hook/post_commit/git_guilt.rb +2 -1
  16. data/lib/overcommit/hook/pre_commit/author_name.rb +2 -2
  17. data/lib/overcommit/hook/pre_commit/bundle_audit.rb +1 -1
  18. data/lib/overcommit/hook/pre_commit/chamber_compare.rb +5 -5
  19. data/lib/overcommit/hook/pre_commit/chamber_security.rb +1 -0
  20. data/lib/overcommit/hook/pre_commit/coffee_lint.rb +1 -1
  21. data/lib/overcommit/hook/pre_commit/css_lint.rb +1 -1
  22. data/lib/overcommit/hook/pre_commit/dart_analyzer.rb +22 -0
  23. data/lib/overcommit/hook/pre_commit/erb_lint.rb +20 -0
  24. data/lib/overcommit/hook/pre_commit/es_lint.rb +3 -6
  25. data/lib/overcommit/hook/pre_commit/fasterer.rb +1 -1
  26. data/lib/overcommit/hook/pre_commit/foodcritic.rb +3 -1
  27. data/lib/overcommit/hook/pre_commit/hlint.rb +1 -1
  28. data/lib/overcommit/hook/pre_commit/html_tidy.rb +1 -1
  29. data/lib/overcommit/hook/pre_commit/java_checkstyle.rb +1 -1
  30. data/lib/overcommit/hook/pre_commit/js_lint.rb +1 -1
  31. data/lib/overcommit/hook/pre_commit/jsl.rb +1 -1
  32. data/lib/overcommit/hook/pre_commit/kt_lint.rb +1 -1
  33. data/lib/overcommit/hook/pre_commit/license_finder.rb +1 -0
  34. data/lib/overcommit/hook/pre_commit/line_endings.rb +3 -2
  35. data/lib/overcommit/hook/pre_commit/nginx_test.rb +1 -1
  36. data/lib/overcommit/hook/pre_commit/php_cs.rb +1 -1
  37. data/lib/overcommit/hook/pre_commit/php_cs_fixer.rb +1 -1
  38. data/lib/overcommit/hook/pre_commit/php_lint.rb +3 -3
  39. data/lib/overcommit/hook/pre_commit/php_stan.rb +1 -1
  40. data/lib/overcommit/hook/pre_commit/puppet_lint.rb +1 -1
  41. data/lib/overcommit/hook/pre_commit/puppet_metadata_json_lint.rb +1 -1
  42. data/lib/overcommit/hook/pre_commit/pyflakes.rb +1 -1
  43. data/lib/overcommit/hook/pre_commit/pylint.rb +1 -1
  44. data/lib/overcommit/hook/pre_commit/python_flake8.rb +1 -1
  45. data/lib/overcommit/hook/pre_commit/rails_best_practices.rb +1 -1
  46. data/lib/overcommit/hook/pre_commit/rails_schema_up_to_date.rb +2 -2
  47. data/lib/overcommit/hook/pre_commit/rst_lint.rb +1 -1
  48. data/lib/overcommit/hook/pre_commit/scalariform.rb +1 -1
  49. data/lib/overcommit/hook/pre_commit/scalastyle.rb +1 -1
  50. data/lib/overcommit/hook/pre_commit/scss_lint.rb +3 -3
  51. data/lib/overcommit/hook/pre_commit/semi_standard.rb +1 -1
  52. data/lib/overcommit/hook/pre_commit/sqlint.rb +1 -1
  53. data/lib/overcommit/hook/pre_commit/standard.rb +1 -1
  54. data/lib/overcommit/hook/pre_commit/stylelint.rb +2 -1
  55. data/lib/overcommit/hook/pre_commit/swift_lint.rb +1 -1
  56. data/lib/overcommit/hook/pre_commit/ts_lint.rb +4 -4
  57. data/lib/overcommit/hook/pre_commit/w3c_css.rb +4 -4
  58. data/lib/overcommit/hook/pre_commit/w3c_html.rb +4 -4
  59. data/lib/overcommit/hook/pre_commit/xml_lint.rb +1 -1
  60. data/lib/overcommit/hook/pre_commit/yaml_lint.rb +25 -4
  61. data/lib/overcommit/hook/pre_commit/yaml_syntax.rb +7 -3
  62. data/lib/overcommit/hook/pre_commit/yard_coverage.rb +0 -1
  63. data/lib/overcommit/hook/pre_push/cargo_test.rb +1 -0
  64. data/lib/overcommit/hook/pre_push/flutter_test.rb +16 -0
  65. data/lib/overcommit/hook/pre_push/pub_test.rb +16 -0
  66. data/lib/overcommit/hook/prepare_commit_msg/base.rb +1 -0
  67. data/lib/overcommit/hook/prepare_commit_msg/replace_branch.rb +38 -4
  68. data/lib/overcommit/hook/shared/bower_install.rb +1 -0
  69. data/lib/overcommit/hook/shared/bundle_install.rb +1 -0
  70. data/lib/overcommit/hook/shared/composer_install.rb +1 -0
  71. data/lib/overcommit/hook/shared/npm_install.rb +1 -0
  72. data/lib/overcommit/hook/shared/pronto.rb +7 -3
  73. data/lib/overcommit/hook/shared/yarn_install.rb +1 -0
  74. data/lib/overcommit/hook_context/commit_msg.rb +7 -0
  75. data/lib/overcommit/hook_context/helpers/file_modifications.rb +79 -0
  76. data/lib/overcommit/hook_context/helpers/stash_unstaged_changes.rb +144 -0
  77. data/lib/overcommit/hook_context/post_commit.rb +1 -0
  78. data/lib/overcommit/hook_context/pre_commit.rb +5 -199
  79. data/lib/overcommit/hook_context/pre_push.rb +1 -0
  80. data/lib/overcommit/hook_context/run_all.rb +1 -0
  81. data/lib/overcommit/hook_context.rb +3 -3
  82. data/lib/overcommit/hook_loader/base.rb +3 -3
  83. data/lib/overcommit/hook_loader/plugin_hook_loader.rb +3 -3
  84. data/lib/overcommit/hook_runner.rb +8 -7
  85. data/lib/overcommit/hook_signer.rb +1 -0
  86. data/lib/overcommit/installer.rb +2 -1
  87. data/lib/overcommit/subprocess.rb +24 -2
  88. data/lib/overcommit/utils/messages_utils.rb +1 -0
  89. data/lib/overcommit/version.rb +1 -1
  90. data/libexec/index-tags +6 -4
  91. data/template-dir/hooks/commit-msg +27 -20
  92. data/template-dir/hooks/overcommit-hook +27 -20
  93. data/template-dir/hooks/post-checkout +27 -20
  94. data/template-dir/hooks/post-commit +27 -20
  95. data/template-dir/hooks/post-merge +27 -20
  96. data/template-dir/hooks/post-rewrite +27 -20
  97. data/template-dir/hooks/pre-commit +27 -20
  98. data/template-dir/hooks/pre-push +27 -20
  99. data/template-dir/hooks/pre-rebase +27 -20
  100. data/template-dir/hooks/prepare-commit-msg +27 -20
  101. metadata +27 -7
@@ -5,7 +5,7 @@ module Overcommit::Hook::PreCommit
5
5
  #
6
6
  # @see http://www.jslint.com/
7
7
  class JsLint < Base
8
- MESSAGE_REGEX = /(?<file>(?:\w:)?[^:]+):(?<line>\d+)/
8
+ MESSAGE_REGEX = /(?<file>(?:\w:)?[^:]+):(?<line>\d+)/.freeze
9
9
 
10
10
  def run
11
11
  result = execute(command, args: applicable_files)
@@ -5,7 +5,7 @@ module Overcommit::Hook::PreCommit
5
5
  #
6
6
  # @see http://www.javascriptlint.com/
7
7
  class Jsl < Base
8
- MESSAGE_REGEX = /(?<file>(?:\w:)?.+)\((?<line>\d+)\):(?<type>[^:]+)/
8
+ MESSAGE_REGEX = /(?<file>(?:\w:)?.+)\((?<line>\d+)\):(?<type>[^:]+)/.freeze
9
9
 
10
10
  MESSAGE_TYPE_CATEGORIZER = lambda do |type|
11
11
  type.match?(/warning/) ? :warning : :error
@@ -4,7 +4,7 @@ module Overcommit::Hook::PreCommit
4
4
  # Runs `ktlint` against modified Kotlin files.
5
5
  # @see https://github.com/shyiko/ktlint
6
6
  class KtLint < Base
7
- MESSAGE_REGEX = /((?<file>[^:]+):(?<line>\d+):(\d+):(?<message>.+))/
7
+ MESSAGE_REGEX = /((?<file>[^:]+):(?<line>\d+):(\d+):(?<message>.+))/.freeze
8
8
 
9
9
  def run
10
10
  result = execute(command, args: applicable_files)
@@ -7,6 +7,7 @@ module Overcommit::Hook::PreCommit
7
7
  def run
8
8
  result = execute(command)
9
9
  return :pass if result.success?
10
+
10
11
  output = result.stdout + result.stderr
11
12
  [:fail, output]
12
13
  end
@@ -12,14 +12,14 @@ module Overcommit::Hook::PreCommit
12
12
  file = File.open(file_name)
13
13
  begin
14
14
  messages += check_file(file, file_name)
15
- rescue ArgumentError => ex
15
+ rescue ArgumentError => e
16
16
  # File is likely a binary file which this check should ignore, but
17
17
  # print a warning just in case
18
18
  messages << Overcommit::Hook::Message.new(
19
19
  :warning,
20
20
  file_name,
21
21
  file.lineno,
22
- "#{file_name}:#{file.lineno}:#{ex.message}"
22
+ "#{file_name}:#{file.lineno}:#{e.message}"
23
23
  )
24
24
  end
25
25
  end
@@ -59,6 +59,7 @@ module Overcommit::Hook::PreCommit
59
59
  i = info.split.first
60
60
  next if i == 'l/-text' # ignore binary files
61
61
  next if i == "l/#{eol}"
62
+
62
63
  path
63
64
  end.compact
64
65
  end
@@ -5,7 +5,7 @@ module Overcommit::Hook::PreCommit
5
5
  #
6
6
  # @see https://www.nginx.com/resources/wiki/start/topics/tutorials/commandline/
7
7
  class NginxTest < Base
8
- MESSAGE_REGEX = /^nginx: .+ in (?<file>.+):(?<line>\d+)$/
8
+ MESSAGE_REGEX = /^nginx: .+ in (?<file>.+):(?<line>\d+)$/.freeze
9
9
 
10
10
  def run
11
11
  messages = []
@@ -4,7 +4,7 @@ module Overcommit::Hook::PreCommit
4
4
  # Runs `phpcs` against any modified PHP files.
5
5
  class PhpCs < Base
6
6
  # Parse `phpcs` csv mode output
7
- MESSAGE_REGEX = /^\"(?<file>.+)\",(?<line>\d+),\d+,(?<type>.+),\"(?<msg>.+)\"/
7
+ MESSAGE_REGEX = /^\"(?<file>.+)\",(?<line>\d+),\d+,(?<type>.+),\"(?<msg>.+)\"/.freeze
8
8
  MESSAGE_TYPE_CATEGORIZER = lambda do |type|
9
9
  'error'.include?(type) ? :error : :warning
10
10
  end
@@ -3,7 +3,7 @@
3
3
  module Overcommit::Hook::PreCommit
4
4
  # Runs `php-cs-fixer` against any modified PHP files.
5
5
  class PhpCsFixer < Base
6
- MESSAGE_REGEX = /\s+\d+\)\s+(?<file>.*\.php)(?<violated_rules>\s+\(\w+(?:,\s+)?\))?/
6
+ MESSAGE_REGEX = /\s+\d+\)\s+(?<file>.*\.php)(?<violated_rules>\s+\(\w+(?:,\s+)?\))?/.freeze
7
7
 
8
8
  def run
9
9
  messages = []
@@ -4,10 +4,10 @@ module Overcommit::Hook::PreCommit
4
4
  # Runs `php -l` against any modified PHP files.
5
5
  class PhpLint < Base
6
6
  # Sample String
7
- # rubocop:disable Metrics/LineLength
7
+ # rubocop:disable Layout/LineLength
8
8
  # PHP Parse error: syntax error, unexpected 'require_once' (T_REQUIRE_ONCE) in site/sumo.php on line 12
9
- # rubocop:enable Metrics/LineLength
10
- MESSAGE_REGEX = /^(?<type>.+)\:\s+(?<message>.+) in (?<file>.+) on line (?<line>\d+)/
9
+ # rubocop:enable Layout/LineLength
10
+ MESSAGE_REGEX = /^(?<type>.+)\:\s+(?<message>.+) in (?<file>.+) on line (?<line>\d+)/.freeze
11
11
 
12
12
  def run
13
13
  # A list of error messages
@@ -8,7 +8,7 @@ module Overcommit::Hook::PreCommit
8
8
  # https://github.com/phpstan/phpstan/issues/239
9
9
  # https://gist.github.com/edmondscommerce/89695c9cd2584fefdf540fb1c528d2c2
10
10
  class PhpStan < Base
11
- MESSAGE_REGEX = /^(?<file>.+)\:(?<line>\d+)\:(?<message>.+)/
11
+ MESSAGE_REGEX = /^(?<file>.+)\:(?<line>\d+)\:(?<message>.+)/.freeze
12
12
 
13
13
  def run
14
14
  messages = []
@@ -5,7 +5,7 @@ module Overcommit::Hook::PreCommit
5
5
  #
6
6
  # @see http://puppet-lint.com/
7
7
  class PuppetLint < Base
8
- MESSAGE_REGEX = /(?<file>(?:\w:)?.+):(?<line>\d+):\d+:(?<type>\w+)/
8
+ MESSAGE_REGEX = /(?<file>(?:\w:)?.+):(?<line>\d+):\d+:(?<type>\w+)/.freeze
9
9
 
10
10
  MESSAGE_TYPE_CATEGORIZER = lambda do |type|
11
11
  type == 'ERROR' ? :error : :warning
@@ -8,7 +8,7 @@ module Overcommit::Hook::PreCommit
8
8
  # @see https://voxpupuli.org/blog/2014/11/06/linting-metadata-json/
9
9
  #
10
10
  class PuppetMetadataJsonLint < Base
11
- MESSAGE_REGEX = /\((?<type>.*)\).*/
11
+ MESSAGE_REGEX = /\((?<type>.*)\).*/.freeze
12
12
 
13
13
  MESSAGE_TYPE_CATEGORIZER = lambda do |type|
14
14
  type == 'WARN' ? :warning : :error
@@ -5,7 +5,7 @@ module Overcommit::Hook::PreCommit
5
5
  #
6
6
  # @see https://pypi.python.org/pypi/pyflakes
7
7
  class Pyflakes < Base
8
- MESSAGE_REGEX = /^(?<file>(?:\w:)?[^:]+):(?<line>\d+):/
8
+ MESSAGE_REGEX = /^(?<file>(?:\w:)?[^:]+):(?<line>\d+):/.freeze
9
9
 
10
10
  def run
11
11
  result = execute(command, args: applicable_files)
@@ -5,7 +5,7 @@ module Overcommit::Hook::PreCommit
5
5
  #
6
6
  # @see http://www.pylint.org/
7
7
  class Pylint < Base
8
- MESSAGE_REGEX = /^(?<file>(?:\w:)?.+):(?<line>\d+):(?<type>[CEFRW])/
8
+ MESSAGE_REGEX = /^(?<file>(?:\w:)?.+):(?<line>\d+):(?<type>[CEFRW])/.freeze
9
9
 
10
10
  # Classify 'E' and 'F' message codes as errors,
11
11
  # everything else as warnings.
@@ -5,7 +5,7 @@ module Overcommit::Hook::PreCommit
5
5
  #
6
6
  # @see https://pypi.python.org/pypi/flake8
7
7
  class PythonFlake8 < Base
8
- MESSAGE_REGEX = /^(?<file>(?:\w:)?.+):(?<line>\d+):\d+:\s(?<type>\w\d+)/
8
+ MESSAGE_REGEX = /^(?<file>(?:\w:)?.+):(?<line>\d+):\d+:\s(?<type>\w\d+)/.freeze
9
9
 
10
10
  # Classify 'Exxx' and 'Fxxx' message codes as errors,
11
11
  # everything else as warnings.
@@ -7,7 +7,7 @@ module Overcommit
7
7
  #
8
8
  # @see https://github.com/railsbp/rails_best_practices
9
9
  class RailsBestPractices < Base
10
- ERROR_REGEXP = /^(?<file>(?:\w:)?[^:]+):(?<line>\d+)\s-\s(?<type>.+)/
10
+ ERROR_REGEXP = /^(?<file>(?:\w:)?[^:]+):(?<line>\d+)\s-\s(?<type>.+)/.freeze
11
11
 
12
12
  def run
13
13
  result = execute(command, args: applicable_files)
@@ -6,7 +6,7 @@ module Overcommit::Hook::PreCommit
6
6
  # failure. The exception is if the schema is at version 0 (i.e before any
7
7
  # migrations have been run). In this case it is OK if there are no migrations.
8
8
  class RailsSchemaUpToDate < Base
9
- def run # rubocop:disable CyclomaticComplexity, PerceivedComplexity
9
+ def run # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
10
10
  if migration_files.any? && schema_files.none?
11
11
  return :fail, "It looks like you're adding a migration, but did not update the schema file"
12
12
  elsif migration_files.none? && schema_files.any? && non_zero_schema_version?
@@ -18,7 +18,7 @@ module Overcommit::Hook::PreCommit
18
18
  # their username.
19
19
  latest_version = migration_files.map do |file|
20
20
  File.basename(file)[/\d+/]
21
- end.sort.last
21
+ end.max
22
22
 
23
23
  up_to_date = schema.include?(latest_version)
24
24
 
@@ -7,7 +7,7 @@ module Overcommit::Hook::PreCommit
7
7
  class RstLint < Base
8
8
  MESSAGE_REGEX = /
9
9
  ^(?<type>INFO|WARNING|ERROR|SEVERE)(?<file>(?:\w:)?[^:]+):(?<line>\d+)\s(?<msg>.+)
10
- /x
10
+ /x.freeze
11
11
 
12
12
  def run
13
13
  result = execute(command, args: applicable_files)
@@ -5,7 +5,7 @@ module Overcommit::Hook::PreCommit
5
5
  #
6
6
  # @see https://github.com/mdr/scalariform
7
7
  class Scalariform < Base
8
- MESSAGE_REGEX = /^\[(?<type>FAILED|ERROR)\]\s+(?<file>(?:\w:)?.+)/
8
+ MESSAGE_REGEX = /^\[(?<type>FAILED|ERROR)\]\s+(?<file>(?:\w:)?.+)/.freeze
9
9
 
10
10
  def run
11
11
  result = execute(command, args: applicable_files)
@@ -10,7 +10,7 @@ module Overcommit::Hook::PreCommit
10
10
  file=(?<file>(?:\w:)?.+)\s
11
11
  message=.+\s*
12
12
  (line=(?<line>\d+))?
13
- /x
13
+ /x.freeze
14
14
 
15
15
  def run
16
16
  result = execute(command, args: applicable_files)
@@ -18,9 +18,9 @@ module Overcommit::Hook::PreCommit
18
18
 
19
19
  begin
20
20
  collect_lint_messages(JSON.parse(result.stdout))
21
- rescue JSON::ParserError => ex
22
- return :fail, "Unable to parse JSON returned by SCSS-Lint: #{ex.message}\n" \
23
- "STDOUT: #{result.stdout}\nSTDERR: #{result.stderr}"
21
+ rescue JSON::ParserError => e
22
+ [:fail, "Unable to parse JSON returned by SCSS-Lint: #{e.message}\n" \
23
+ "STDOUT: #{result.stdout}\nSTDERR: #{result.stderr}"]
24
24
  end
25
25
  end
26
26
 
@@ -5,7 +5,7 @@ module Overcommit::Hook::PreCommit
5
5
  #
6
6
  # @see https://github.com/Flet/semistandard
7
7
  class SemiStandard < Base
8
- MESSAGE_REGEX = /^\s*(?<file>(?:\w:)?[^:]+):(?<line>\d+)/
8
+ MESSAGE_REGEX = /^\s*(?<file>(?:\w:)?[^:]+):(?<line>\d+)/.freeze
9
9
 
10
10
  def run
11
11
  result = execute(command, args: applicable_files)
@@ -5,7 +5,7 @@ module Overcommit::Hook::PreCommit
5
5
  #
6
6
  # @see https://github.com/purcell/sqlint
7
7
  class Sqlint < Base
8
- MESSAGE_REGEX = /(?<file>(?:\w:)?.+):(?<line>\d+):\d+:(?<type>\w+)/
8
+ MESSAGE_REGEX = /(?<file>(?:\w:)?.+):(?<line>\d+):\d+:(?<type>\w+)/.freeze
9
9
 
10
10
  MESSAGE_TYPE_CATEGORIZER = lambda do |type|
11
11
  type == 'ERROR' ? :error : :warning
@@ -5,7 +5,7 @@ module Overcommit::Hook::PreCommit
5
5
  #
6
6
  # @see https://github.com/feross/standard
7
7
  class Standard < Base
8
- MESSAGE_REGEX = /^\s*(?<file>(?:\w:)?[^:]+):(?<line>\d+)/
8
+ MESSAGE_REGEX = /^\s*(?<file>(?:\w:)?[^:]+):(?<line>\d+)/.freeze
9
9
 
10
10
  def run
11
11
  result = execute(command, args: applicable_files)
@@ -8,12 +8,13 @@ module Overcommit::Hook::PreCommit
8
8
  # example of output:
9
9
  # index.css: line 4, col 4, error - Expected indentation of 2 spaces (indentation)
10
10
 
11
- MESSAGE_REGEX = /^(?<file>.+):\D*(?<line>\d+).*$/
11
+ MESSAGE_REGEX = /^(?<file>[^:]+):\D*(?<line>\d+).*$/.freeze
12
12
 
13
13
  def run
14
14
  result = execute(command, args: applicable_files)
15
15
  output = result.stdout.chomp
16
16
  return :pass if result.success? && output.empty?
17
+
17
18
  extract_messages(
18
19
  output.split("\n"),
19
20
  MESSAGE_REGEX
@@ -4,7 +4,7 @@ module Overcommit::Hook::PreCommit
4
4
  # Runs `swiftlint lint` against modified Swift files.
5
5
  # @see https://github.com/realm/SwiftLint
6
6
  class SwiftLint < Base
7
- MESSAGE_REGEX = /^(?<file>(?:\w:)?[^:]+):(?<line>\d+)[^ ]* (?<type>[^ ]+):(?<message>.*)/
7
+ MESSAGE_REGEX = /^(?<file>(?:\w:)?[^:]+):(?<line>\d+)[^ ]* (?<type>[^ ]+):(?<message>.*)/.freeze
8
8
 
9
9
  def run
10
10
  result = execute(command, args: applicable_files)
@@ -8,7 +8,7 @@ module Overcommit::Hook::PreCommit
8
8
  # "src/file/anotherfile.ts[298, 1]: exceeds maximum line length of 140"
9
9
  # or
10
10
  # "ERROR: src/AccountController.ts[4, 28]: expected call-signature to have a typedef"
11
- MESSAGE_REGEX = /^(?<type>.+: )?(?<file>.+?(?=\[))[^\d]+(?<line>\d+).*?/
11
+ MESSAGE_REGEX = /^(?<type>.+: )?(?<file>.+?(?=\[))[^\d]+(?<line>\d+).*?/.freeze
12
12
 
13
13
  def run
14
14
  result = execute(command, args: applicable_files)
@@ -19,9 +19,9 @@ module Overcommit::Hook::PreCommit
19
19
  type_categorizer = ->(type) { type.nil? || type.include?('ERROR') ? :error : :warning }
20
20
 
21
21
  extract_messages(
22
- output_lines,
23
- MESSAGE_REGEX,
24
- type_categorizer
22
+ output_lines,
23
+ MESSAGE_REGEX,
24
+ type_categorizer
25
25
  )
26
26
  end
27
27
  end
@@ -42,10 +42,10 @@ module Overcommit::Hook::PreCommit
42
42
  def opts
43
43
  @opts ||= {
44
44
  validator_uri: config['validator_uri'],
45
- proxy_server: config['proxy_server'],
46
- proxy_port: config['proxy_port'],
47
- proxy_user: config['proxy_user'],
48
- proxy_pass: config['proxy_pass']
45
+ proxy_server: config['proxy_server'],
46
+ proxy_port: config['proxy_port'],
47
+ proxy_user: config['proxy_user'],
48
+ proxy_pass: config['proxy_pass']
49
49
  }
50
50
  end
51
51
 
@@ -42,10 +42,10 @@ module Overcommit::Hook::PreCommit
42
42
  def opts
43
43
  @opts ||= {
44
44
  validator_uri: config['validator_uri'],
45
- proxy_server: config['proxy_server'],
46
- proxy_port: config['proxy_port'],
47
- proxy_user: config['proxy_user'],
48
- proxy_pass: config['proxy_pass']
45
+ proxy_server: config['proxy_server'],
46
+ proxy_port: config['proxy_port'],
47
+ proxy_user: config['proxy_user'],
48
+ proxy_pass: config['proxy_pass']
49
49
  }
50
50
  end
51
51
 
@@ -5,7 +5,7 @@ module Overcommit::Hook::PreCommit
5
5
  #
6
6
  # @see http://xmlsoft.org/xmllint.html
7
7
  class XmlLint < Base
8
- MESSAGE_REGEX = /^(?<file>(?:\w:)?[^:]+):(?<line>\d+):/
8
+ MESSAGE_REGEX = /^(?<file>(?:\w:)?[^:]+):(?<line>\d+):/.freeze
9
9
 
10
10
  def run
11
11
  result = execute(command, args: applicable_files)
@@ -5,13 +5,34 @@ module Overcommit::Hook::PreCommit
5
5
  #
6
6
  # @see https://github.com/adrienverge/yamllint
7
7
  class YamlLint < Base
8
+ MESSAGE_REGEX = /
9
+ ^(?<file>.+)
10
+ :(?<line>\d+)
11
+ :(?<col>\d+)
12
+ :\s\[(?<type>\w+)\]
13
+ \s(?<msg>.+)$
14
+ /x.freeze
15
+
8
16
  def run
9
17
  result = execute(command, args: applicable_files)
18
+ parse_messages(result.stdout)
19
+ end
20
+
21
+ private
22
+
23
+ def parse_messages(output)
24
+ repo_root = Overcommit::Utils.repo_root
25
+
26
+ output.scan(MESSAGE_REGEX).map do |file, line, col, type, msg|
27
+ line = line.to_i
28
+ type = type.to_sym
29
+ # Obtain the path relative to the root of the repository
30
+ # for nicer output:
31
+ relpath = file.dup
32
+ relpath.slice!("#{repo_root}/")
10
33
 
11
- if result.success?
12
- :pass
13
- else
14
- return [:warn, result.stdout]
34
+ text = "#{relpath}:#{line}:#{col}:#{type} #{msg}"
35
+ Overcommit::Hook::Message.new(type, file, line, text)
15
36
  end
16
37
  end
17
38
  end
@@ -8,9 +8,13 @@ module Overcommit::Hook::PreCommit
8
8
 
9
9
  applicable_files.each do |file|
10
10
  begin
11
- YAML.load_file(file)
12
- rescue ArgumentError, Psych::SyntaxError => e
13
- messages << Overcommit::Hook::Message.new(:error, file, nil, e.message)
11
+ YAML.load_file(file, aliases: true)
12
+ rescue ArgumentError
13
+ begin
14
+ YAML.load_file(file)
15
+ rescue ArgumentError, Psych::SyntaxError => e
16
+ messages << Overcommit::Hook::Message.new(:error, file, nil, e.message)
17
+ end
14
18
  end
15
19
  end
16
20
 
@@ -1,4 +1,3 @@
1
-
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module Overcommit::Hook::PreCommit
@@ -6,6 +6,7 @@ module Overcommit::Hook::PrePush
6
6
  def run
7
7
  result = execute(command)
8
8
  return :pass if result.success?
9
+
9
10
  [:fail, result.stdout]
10
11
  end
11
12
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit::Hook::PrePush
4
+ # Runs Flutter test suite (`flutter test`) before push
5
+ #
6
+ # @see https://api.flutter.dev/flutter/flutter_test/flutter_test-library.html
7
+ class FlutterTest < Base
8
+ def run
9
+ result = execute(command)
10
+ return :pass if result.success?
11
+
12
+ output = result.stdout + result.stderr
13
+ [:fail, output]
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit::Hook::PrePush
4
+ # Runs Dart test suite (`pub run test`) before push
5
+ #
6
+ # @see https://pub.dev/packages/test#running-tests
7
+ class PubTest < Base
8
+ def run
9
+ result = execute(command)
10
+ return :pass if result.success?
11
+
12
+ output = result.stdout + result.stderr
13
+ [:fail, output]
14
+ end
15
+ end
16
+ end
@@ -12,6 +12,7 @@ module Overcommit::Hook::PrepareCommitMsg
12
12
 
13
13
  def modify_commit_message
14
14
  raise 'This expects a block!' unless block_given?
15
+
15
16
  # NOTE: this assumes all the hooks of the same type share the context's
16
17
  # memory. If that's not the case, this won't work.
17
18
  lock.synchronize do
@@ -2,11 +2,37 @@
2
2
 
3
3
  module Overcommit::Hook::PrepareCommitMsg
4
4
  # Prepends the commit message with a message based on the branch name.
5
+ #
6
+ # === What to prepend
7
+ #
5
8
  # It's possible to reference parts of the branch name through the captures in
6
9
  # the `branch_pattern` regex.
10
+ #
11
+ # For instance, if your current branch is `123-topic` then this config
12
+ #
13
+ # branch_pattern: '(\d+)-(\w+)'
14
+ # replacement_text: '[#\1]'
15
+ #
16
+ # would make this hook prepend commit messages with `[#123]`.
17
+ #
18
+ # Similarly, a replacement text of `[\1][\2]` would result in `[123][topic]`.
19
+ #
20
+ # == When to run this hook
21
+ #
22
+ # You can configure this to run only for specific types of commits by setting
23
+ # the `skipped_commit_types`. The allowed types are
24
+ #
25
+ # - 'message' - if message is given via `-m`, `-F`
26
+ # - 'template' - if `-t` is given or `commit.template` is set
27
+ # - 'commit' - if `-c`, `-C`, or `--amend` is given
28
+ # - 'merge' - if merging
29
+ # - 'squash' - if squashing
30
+ #
7
31
  class ReplaceBranch < Base
32
+ DEFAULT_BRANCH_PATTERN = /\A(\d+)-(\w+).*\z/.freeze
33
+
8
34
  def run
9
- return :pass if skipped_commit_types.include? commit_message_source
35
+ return :pass if skip?
10
36
 
11
37
  Overcommit::Utils.log.debug(
12
38
  "Checking if '#{Overcommit::GitRepo.current_branch}' matches #{branch_pattern}"
@@ -17,21 +43,25 @@ module Overcommit::Hook::PrepareCommitMsg
17
43
  Overcommit::Utils.log.debug("Writing #{commit_message_filename} with #{new_template}")
18
44
 
19
45
  modify_commit_message do |old_contents|
20
- "#{new_template} #{old_contents}"
46
+ "#{new_template}#{old_contents}"
21
47
  end
22
48
 
23
49
  :pass
24
50
  end
25
51
 
26
52
  def new_template
27
- @new_template ||= Overcommit::GitRepo.current_branch.gsub(branch_pattern, replacement_text)
53
+ @new_template ||=
54
+ begin
55
+ curr_branch = Overcommit::GitRepo.current_branch
56
+ curr_branch.gsub(branch_pattern, replacement_text).strip
57
+ end
28
58
  end
29
59
 
30
60
  def branch_pattern
31
61
  @branch_pattern ||=
32
62
  begin
33
63
  pattern = config['branch_pattern']
34
- Regexp.new((pattern || '').empty? ? '\A.*\w+[-_](\d+).*\z' : pattern)
64
+ Regexp.new((pattern || '').empty? ? DEFAULT_BRANCH_PATTERN : pattern)
35
65
  end
36
66
  end
37
67
 
@@ -53,5 +83,9 @@ module Overcommit::Hook::PrepareCommitMsg
53
83
  def skipped_commit_types
54
84
  @skipped_commit_types ||= config['skipped_commit_types'].map(&:to_sym)
55
85
  end
86
+
87
+ def skip?
88
+ skipped_commit_types.include?(commit_message_source)
89
+ end
56
90
  end
57
91
  end
@@ -9,6 +9,7 @@ module Overcommit::Hook::Shared
9
9
  def run
10
10
  result = execute(command)
11
11
  return :fail, result.stderr unless result.success?
12
+
12
13
  :pass
13
14
  end
14
15
  end
@@ -9,6 +9,7 @@ module Overcommit::Hook::Shared
9
9
  def run
10
10
  result = execute(command)
11
11
  return :fail, result.stdout unless result.success?
12
+
12
13
  :pass
13
14
  end
14
15
  end
@@ -9,6 +9,7 @@ module Overcommit::Hook::Shared
9
9
  def run
10
10
  result = execute(command)
11
11
  return :fail, result.stdout unless result.success?
12
+
12
13
  :pass
13
14
  end
14
15
  end
@@ -9,6 +9,7 @@ module Overcommit::Hook::Shared
9
9
  def run
10
10
  result = execute(command)
11
11
  return :fail, result.stderr unless result.success?
12
+
12
13
  :pass
13
14
  end
14
15
  end
@@ -1,19 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Overcommit::Hook::Shared
4
- # Shared code used by all Pronto hooks. Runs pronto linter.
4
+ # Shared code used by all Pronto hooks. Runs pronto linters.
5
+
6
+ # @see https://github.com/prontolabs/pronto
5
7
  module Pronto
6
8
  MESSAGE_TYPE_CATEGORIZER = lambda do |type|
7
9
  type.include?('E') ? :error : :warning
8
10
  end
9
11
 
12
+ MESSAGE_REGEX = /^(?<file>(?:\w:)?[^:]+):(?<line>\d+) (?<type>[^ ]+)/.freeze
13
+
10
14
  def run
11
15
  result = execute(command)
12
16
  return :pass if result.success?
13
17
 
14
18
  extract_messages(
15
- result.stdout.split("\n"),
16
- /^(?<file>(?:\w:)?[^:]+):(?<line>\d+) (?<type>[^ ]+)/,
19
+ result.stdout.split("\n").select { |line| line.match?(MESSAGE_REGEX) },
20
+ MESSAGE_REGEX,
17
21
  MESSAGE_TYPE_CATEGORIZER,
18
22
  )
19
23
  end
@@ -9,6 +9,7 @@ module Overcommit::Hook::Shared
9
9
  def run
10
10
  result = execute(command)
11
11
  return :fail, result.stderr unless result.success?
12
+
12
13
  :pass
13
14
  end
14
15
  end