overcommit 0.21.0 → 0.22.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ea70d2648519c5c2f90bfa96c690a45414c1df2a
4
- data.tar.gz: 65e1c6ccda24f2eb76fa6982439112964414dd4e
3
+ metadata.gz: be12e52142407d34b856e8cf7c3b9e1743f9318b
4
+ data.tar.gz: cbbf986c4d3e2a45d26b281e9716de2ef15cd2c2
5
5
  SHA512:
6
- metadata.gz: bae413ee48cbf60e6de660988fbdc8dc2c3a8044249d7089618500a033629df0b0fb6d22a8465732d774c043c2a8fd0abba3d0f30c618041f99b8292885303af
7
- data.tar.gz: 26f3e6ffb0999a3f25573a53b48b8e2f236ba880423598845c43e0609e0c8aeec9c9236d7caee8f659e01b886f38461931e99781d20920e0690119cbddfc9ae4
6
+ metadata.gz: 9ccfb37216d910e8c14b7d935c42a74b2ab372016bfe2b3e8eee4f63195028db62d34dbedec808d9b704d49f75991951eeabcdc3a857bbddccd8ebd55c4f00ee
7
+ data.tar.gz: 2fe6b8c2563e6f709e7d844f4055386fd8a60f4239e82dedf9792b8efeb59d46ecf761c4f2c28998d1628cab1452c35cb125226090c29e35359776ebf83bbfe0
@@ -52,6 +52,7 @@ PreCommit:
52
52
  BerksfileCheck:
53
53
  description: 'Checking Berksfile lock'
54
54
  required_executable: 'berks'
55
+ flags: ['list', '--quiet']
55
56
  install_command: 'gem install berks'
56
57
  include:
57
58
  - 'Berksfile'
@@ -61,6 +62,7 @@ PreCommit:
61
62
  enabled: false
62
63
  description: 'Checking for security vulnerabilities'
63
64
  required_executable: 'brakeman'
65
+ flags: ['--exit-on-warn', '--quiet', '--summary', '--only-files']
64
66
  install_command: 'gem install brakeman'
65
67
  include:
66
68
  - '**/*.rb'
@@ -72,6 +74,7 @@ PreCommit:
72
74
  BundleCheck:
73
75
  description: 'Checking Gemfile dependencies'
74
76
  required_executable: 'bundle'
77
+ flags: ['check']
75
78
  install_command: 'gem install bundler'
76
79
  include:
77
80
  - 'Gemfile'
@@ -82,6 +85,7 @@ PreCommit:
82
85
  enabled: false
83
86
  description: 'Checking that settings have been secured with Chamber'
84
87
  required_executable: 'chamber'
88
+ flags: ['secure', '--files']
85
89
  install_command: 'gem install chamber'
86
90
  include:
87
91
  - 'config/settings.yml'
@@ -90,12 +94,14 @@ PreCommit:
90
94
  CoffeeLint:
91
95
  description: 'Analyzing with coffeelint'
92
96
  required_executable: 'coffeelint'
97
+ flags: ['--quiet']
93
98
  install_command: 'npm install -g coffeelint'
94
99
  include: '**/*.coffee'
95
100
 
96
101
  CssLint:
97
102
  description: 'Analyzing with csslint'
98
103
  required_executable: 'csslint'
104
+ flags: ['--quiet', '--format=compact']
99
105
  install_command: 'npm install -g csslint'
100
106
  include: '**/*.css'
101
107
 
@@ -114,6 +120,8 @@ PreCommit:
114
120
  HardTabs:
115
121
  description: 'Checking for hard tabs'
116
122
  quiet: true
123
+ required_executable: 'grep'
124
+ flags: ['-IHn', "\t"]
117
125
  exclude:
118
126
  - '**/*.go'
119
127
  - '**/Makefile'
@@ -130,12 +138,14 @@ PreCommit:
130
138
  Jscs:
131
139
  description: 'Analyzing with JSCS'
132
140
  required_executable: 'jscs'
141
+ flags: ['--reporter=inline', '--verbose']
133
142
  install_command: 'npm install -g jscs'
134
143
  include: '**/*.js'
135
144
 
136
145
  Jsxcs:
137
146
  description: 'Analyzing with JSXCS'
138
147
  required_executable: 'jsxcs'
148
+ flags: ['--reporter=inline']
139
149
  install_command: 'npm install -g jsxcs'
140
150
  include: '**/*.jsx'
141
151
 
@@ -157,11 +167,15 @@ PreCommit:
157
167
 
158
168
  LocalPathsInGemfile:
159
169
  description: 'Checking for local paths in Gemfile'
170
+ required_executable: 'grep'
171
+ flags: ['-IHnE', '(\bpath:)|(:path\s*=>)']
160
172
  include: '**/Gemfile'
161
173
 
162
174
  MergeConflicts:
163
175
  description: 'Checking for merge conflicts'
164
176
  quiet: true
177
+ required_executable: 'grep'
178
+ flags: ['-IHn', '^<<<<<<<\s']
165
179
 
166
180
  PryBinding:
167
181
  description: 'Checking for instances of binding.pry'
@@ -184,8 +198,10 @@ PreCommit:
184
198
  - 'db/structure.sql'
185
199
 
186
200
  Reek:
201
+ enabled: false
187
202
  description: 'Analyzing with Reek'
188
203
  required_executable: 'reek'
204
+ flags: ['--single-line', '--no-color']
189
205
  install_command: 'gem install reek'
190
206
  include:
191
207
  - '**/*.gemspec'
@@ -197,6 +213,7 @@ PreCommit:
197
213
  Rubocop:
198
214
  description: 'Analyzing with Rubocop'
199
215
  required_executable: 'rubocop'
216
+ flags: ['--format=emacs', '--force-exclusion']
200
217
  install_command: 'gem install rubocop'
201
218
  include:
202
219
  - '**/*.gemspec'
@@ -214,16 +231,20 @@ PreCommit:
214
231
  ShellCheck:
215
232
  description: 'Analyzing with ShellCheck'
216
233
  required_executable: 'shellcheck'
234
+ flags: ['--format=gcc']
217
235
  include: '**/*.sh'
218
236
 
219
237
  TrailingWhitespace:
220
238
  description: 'Checking for trailing whitespace'
239
+ required_executable: 'grep'
240
+ flags: ['-IHn', '\s$']
221
241
  exclude:
222
242
  - '**/db/structure.sql'
223
243
 
224
244
  TravisLint:
225
245
  description: 'Checking Travis CI configuration'
226
246
  required_executable: 'travis'
247
+ flags: ['lint']
227
248
  install_command: 'gem install travis'
228
249
  include: '.travis.yml'
229
250
 
@@ -14,7 +14,7 @@ module Overcommit::Hook
14
14
  MESSAGE_TYPES = [:error, :warning]
15
15
 
16
16
  # Functionality common to all hooks.
17
- class Base
17
+ class Base # rubocop:disable Metrics/ClassLength
18
18
  extend Forwardable
19
19
 
20
20
  def_delegators :@context, :modified_files
@@ -111,10 +111,42 @@ module Overcommit::Hook
111
111
  Overcommit::Utils.execute(cmd)
112
112
  end
113
113
 
114
- def executable
114
+ def required_executable
115
115
  @config['required_executable']
116
116
  end
117
117
 
118
+ # Return command to execute for this hook.
119
+ #
120
+ # This is intended to be configurable so hooks can prefix their commands
121
+ # with `bundle exec` or similar. It will appends the command line flags
122
+ # specified by the `flags` option after.
123
+ #
124
+ # Note that any files intended to be passed must be handled by the hook
125
+ # itself.
126
+ #
127
+ # @return [Array<String>]
128
+ def command
129
+ Array(@config['command'] || required_executable) + flags
130
+ end
131
+
132
+ # Return command line flags to be passed to the command.
133
+ #
134
+ # This excludes the list of files, as that must be handled by the hook
135
+ # itself.
136
+ #
137
+ # The intention here is to provide flexibility for when a tool
138
+ # removes/renames its flags. Rather than wait for Overcommit to update the
139
+ # flags it uses, you can update your configuration to use the new flags
140
+ # right away without being blocked.
141
+ #
142
+ # Also note that any flags containing dynamic content must be passed in the
143
+ # hook's {#run} method.
144
+ #
145
+ # @return [Array<String>]
146
+ def flags
147
+ Array(@config['flags'])
148
+ end
149
+
118
150
  # Gets a list of staged files that apply to this hook based on its
119
151
  # configured `include` and `exclude` lists.
120
152
  def applicable_files
@@ -146,9 +178,9 @@ module Overcommit::Hook
146
178
  # If the hook defines a required executable, check if it's in the path and
147
179
  # display the install command if one exists.
148
180
  def check_for_executable
149
- return unless executable && !in_path?(executable)
181
+ return unless required_executable && !in_path?(required_executable)
150
182
 
151
- output = "'#{executable}' is not installed (or is not in your PATH)"
183
+ output = "'#{required_executable}' is not installed (or is not in your PATH)"
152
184
 
153
185
  if install_command = @config['install_command']
154
186
  output += "\nInstall it by running: #{install_command}"
@@ -9,7 +9,7 @@ module Overcommit::Hook::PreCommit
9
9
  ignored_files = execute(%w[git ls-files -o -i --exclude-standard]).stdout.split("\n")
10
10
  return :pass if ignored_files.include?(LOCK_FILE)
11
11
 
12
- result = execute(%W[#{executable} list --quiet])
12
+ result = execute(command)
13
13
  unless result.success?
14
14
  return :fail, result.stderr
15
15
  end
@@ -2,8 +2,7 @@ module Overcommit::Hook::PreCommit
2
2
  # Runs `brakeman` against any modified Ruby/Rails files.
3
3
  class Brakeman < Base
4
4
  def run
5
- result = execute(%W[#{executable} --exit-on-warn --quiet --summary --only-files] <<
6
- applicable_files.join(','))
5
+ result = execute(command + [applicable_files.join(',')])
7
6
  return :pass if result.success?
8
7
 
9
8
  [:fail, result.stdout]
@@ -9,14 +9,14 @@ module Overcommit::Hook::PreCommit
9
9
  ignored_files = execute(%w[git ls-files -o -i --exclude-standard]).stdout.split("\n")
10
10
  return :pass if ignored_files.include?(LOCK_FILE)
11
11
 
12
- result = execute(%W[#{executable} check])
12
+ result = execute(command)
13
13
  unless result.success?
14
14
  return :fail, result.stdout
15
15
  end
16
16
 
17
17
  result = execute(%w[git diff --quiet --] + [LOCK_FILE])
18
18
  unless result.success?
19
- return :fail, "#{LOCK_FILE} is not up-to-date -- run `#{executable} check`"
19
+ return :fail, "#{LOCK_FILE} is not up-to-date -- run `#{command.join(' ')} check`"
20
20
  end
21
21
 
22
22
  :pass
@@ -2,7 +2,7 @@ module Overcommit::Hook::PreCommit
2
2
  # Runs `chamber secure` against any modified Chamber settings files
3
3
  class ChamberSecurity < Base
4
4
  def run
5
- result = execute(%W[#{executable} secure --files] + applicable_files)
5
+ result = execute(command + applicable_files)
6
6
 
7
7
  return :pass if result.stdout.empty?
8
8
  [:fail, "These settings appear to need to be secured but were not: #{result.stdout}"]
@@ -2,7 +2,7 @@ module Overcommit::Hook::PreCommit
2
2
  # Runs `coffeelint` against any modified CoffeeScript files.
3
3
  class CoffeeLint < Base
4
4
  def run
5
- result = execute(%W[#{executable} --quiet] + applicable_files)
5
+ result = execute(command + applicable_files)
6
6
  return :pass if result.success?
7
7
 
8
8
  [:fail, result.stdout]
@@ -2,7 +2,7 @@ module Overcommit::Hook::PreCommit
2
2
  # Runs `csslint` against any modified CSS files.
3
3
  class CssLint < Base
4
4
  def run
5
- result = execute(%W[#{executable} --quiet --format=compact] + applicable_files)
5
+ result = execute(command + applicable_files)
6
6
  return :pass if result.stdout !~ /Error - (?!Unknown @ rule)/
7
7
 
8
8
  [:fail, result.stdout]
@@ -2,7 +2,7 @@ module Overcommit::Hook::PreCommit
2
2
  # Runs `golint` against any modified Golang files.
3
3
  class GoLint < Base
4
4
  def run
5
- result = execute([executable] + applicable_files)
5
+ result = execute(command + applicable_files)
6
6
  # Unfortunately the exit code is always 0
7
7
  return :pass if result.stdout.empty?
8
8
 
@@ -6,7 +6,7 @@ module Overcommit::Hook::PreCommit
6
6
  end
7
7
 
8
8
  def run
9
- result = execute([executable] + applicable_files)
9
+ result = execute(command + applicable_files)
10
10
  return :pass if result.success?
11
11
 
12
12
  extract_messages(
@@ -3,7 +3,7 @@ module Overcommit::Hook::PreCommit
3
3
  class HardTabs < Base
4
4
  def run
5
5
  # Catches hard tabs
6
- result = execute(%w[grep -IHn] + ["\t"] + applicable_files)
6
+ result = execute(command + applicable_files)
7
7
  unless result.stdout.empty?
8
8
  return :fail, "Hard tabs detected:\n#{result.stdout}"
9
9
  end
@@ -2,7 +2,7 @@ module Overcommit::Hook::PreCommit
2
2
  # Runs `jshint` against any modified JavaScript files.
3
3
  class JsHint < Base
4
4
  def run
5
- result = execute([executable] + applicable_files)
5
+ result = execute(command + applicable_files)
6
6
  output = result.stdout
7
7
 
8
8
  return :pass if output.empty?
@@ -3,7 +3,7 @@ module Overcommit::Hook::PreCommit
3
3
  # files.
4
4
  class Jscs < Base
5
5
  def run
6
- result = execute(%W[#{executable} --reporter=inline --verbose] + applicable_files)
6
+ result = execute(command + applicable_files)
7
7
  return :pass if result.success?
8
8
 
9
9
  if result.status == 1
@@ -2,7 +2,7 @@ module Overcommit::Hook::PreCommit
2
2
  # Runs `jsxhint` against any modified JSX files.
3
3
  class JsxHint < Base
4
4
  def run
5
- result = execute([executable] + applicable_files)
5
+ result = execute(command + applicable_files)
6
6
  output = result.stdout
7
7
 
8
8
  return :pass if output.empty?
@@ -3,7 +3,7 @@ module Overcommit::Hook::PreCommit
3
3
  # against any modified JavaScript files.
4
4
  class Jsxcs < Base
5
5
  def run
6
- result = execute(%W[#{executable} --reporter=inline] + applicable_files)
6
+ result = execute(command + applicable_files)
7
7
  return :pass if result.success?
8
8
 
9
9
  if result.status == 1
@@ -2,7 +2,7 @@ module Overcommit::Hook::PreCommit
2
2
  # Checks for local paths in files and issues a warning
3
3
  class LocalPathsInGemfile < Base
4
4
  def run
5
- result = execute(%w[grep -IHnE (\s*path:\s*)|(\s*:path\s*=>)] + applicable_files)
5
+ result = execute(command + applicable_files)
6
6
 
7
7
  unless result.stdout.empty?
8
8
  return :warn, "Avoid pointing to local paths in Gemfiles:\n#{result.stdout}"
@@ -2,7 +2,7 @@ module Overcommit::Hook::PreCommit
2
2
  # Checks for unresolved merge conflicts
3
3
  class MergeConflicts < Base
4
4
  def run
5
- result = execute(%w[grep -IHn ^<<<<<<<\s] + applicable_files)
5
+ result = execute(command + applicable_files)
6
6
 
7
7
  unless result.stdout.empty?
8
8
  return :fail, "Merge conflict markers detected:\n#{result.stdout}"
@@ -2,7 +2,7 @@ module Overcommit::Hook::PreCommit
2
2
  # Runs `flake8` against any modified Python files.
3
3
  class PythonFlake8 < Base
4
4
  def run
5
- result = execute([executable] + applicable_files)
5
+ result = execute(command + applicable_files)
6
6
  return :pass if result.success?
7
7
 
8
8
  [:fail, result.stdout]
@@ -2,7 +2,7 @@ module Overcommit::Hook::PreCommit
2
2
  # Runs `reek` against any modified Ruby files.
3
3
  class Reek < Base
4
4
  def run
5
- result = execute(%W[#{executable} --single-line --no-color] + applicable_files)
5
+ result = execute(command + applicable_files)
6
6
  return :pass if result.success?
7
7
 
8
8
  output = scrub_output(result.stdout + result.stderr)
@@ -6,7 +6,7 @@ module Overcommit::Hook::PreCommit
6
6
  end
7
7
 
8
8
  def run
9
- result = execute(%W[#{executable} --format=emacs --force-exclusion] + applicable_files)
9
+ result = execute(command + applicable_files)
10
10
  return :pass if result.success?
11
11
 
12
12
  extract_messages(
@@ -6,7 +6,7 @@ module Overcommit::Hook::PreCommit
6
6
  end
7
7
 
8
8
  def run
9
- result = execute([executable] + applicable_files)
9
+ result = execute(command + applicable_files)
10
10
  return :pass if result.success?
11
11
 
12
12
  extract_messages(
@@ -6,7 +6,7 @@ module Overcommit::Hook::PreCommit
6
6
  end
7
7
 
8
8
  def run
9
- result = execute(%W[#{executable} --format=gcc] + applicable_files)
9
+ result = execute(command + applicable_files)
10
10
  return :pass if result.success?
11
11
 
12
12
  extract_messages(
@@ -2,7 +2,7 @@ module Overcommit::Hook::PreCommit
2
2
  # Checks for trailing whitespace in files.
3
3
  class TrailingWhitespace < Base
4
4
  def run
5
- result = execute(%w[grep -IHn \s$] + applicable_files)
5
+ result = execute(command + applicable_files)
6
6
  unless result.stdout.empty?
7
7
  return :fail, "Trailing whitespace detected:\n#{result.stdout}"
8
8
  end
@@ -2,7 +2,7 @@ module Overcommit::Hook::PreCommit
2
2
  # Runs `travis-lint` against any modified Travis CI files.
3
3
  class TravisLint < Base
4
4
  def run
5
- result = execute([executable, 'lint'] + applicable_files)
5
+ result = execute(command + applicable_files)
6
6
  return :pass if result.success?
7
7
 
8
8
  [:fail, (result.stdout + result.stderr).strip]
@@ -83,10 +83,16 @@ module Overcommit
83
83
  end
84
84
  end
85
85
 
86
- # Returns whether a command can be found given the current environment path.
86
+ # @param cmd [String]
87
+ # @return [true,false] whether a command can be found given the current
88
+ # environment path.
87
89
  def in_path?(cmd)
88
- exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
89
- ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
90
+ # ENV['PATH'] doesn't include the repo root, but that is a valid
91
+ # location for executables, so we want to add it to the list of places
92
+ # we are checking for the executable.
93
+ paths = [repo_root] + ENV['PATH'].split(File::PATH_SEPARATOR)
94
+ exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
95
+ paths.each do |path|
90
96
  exts.each do |ext|
91
97
  exe = File.join(path, "#{cmd}#{ext}")
92
98
  return true if File.executable?(exe)
@@ -1,4 +1,4 @@
1
1
  # Defines the gem version.
2
2
  module Overcommit
3
- VERSION = '0.21.0'
3
+ VERSION = '0.22.0'
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: overcommit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.21.0
4
+ version: 0.22.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Causes Engineering
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-01-06 00:00:00.000000000 Z
12
+ date: 2015-02-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: childprocess
@@ -179,4 +179,3 @@ signing_key:
179
179
  specification_version: 4
180
180
  summary: Git hook manager
181
181
  test_files: []
182
- has_rdoc: