Skip to content

Commit 5b5b9bc

Browse files
committed
Merge remote-tracking branch 'upstream/master' into marcosvm/separate_gofmt_and_go_build
2 parents 1ea632d + 5647085 commit 5b5b9bc

File tree

22 files changed

+10616
-4027
lines changed

22 files changed

+10616
-4027
lines changed

.travis.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,5 @@ rvm:
1414
- jruby
1515
matrix:
1616
fast_finish: true
17+
allow_failures:
18+
- rvm: jruby

README.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
A better pre-commit hook for git.
22

3-
[![Current version](https://badge.fury.io/rb/pre-commit.png)](https://rubygems.org/gems/pre-commit)
4-
[![Code Climate](https://codeclimate.com/github/jish/pre-commit.png)](https://codeclimate.com/github/jish/pre-commit)
5-
[![Coverage Status](https://coveralls.io/repos/jish/pre-commit/badge.png?branch=master)](https://coveralls.io/r/jish/pre-commit?branch=master)
6-
[![Build status](https://secure.travis-ci.org/jish/pre-commit.png?branch=master)](https://travis-ci.org/jish/pre-commit)
3+
[![Current version](https://badge.fury.io/rb/pre-commit.svg)](https://rubygems.org/gems/pre-commit)
4+
[![Code Climate](https://img.shields.io/codeclimate/github/jish/pre-commit.svg)](https://codeclimate.com/github/jish/pre-commit)
5+
[![Coverage Status](https://img.shields.io/coveralls/jish/pre-commit/master.svg)](https://coveralls.io/r/jish/pre-commit?branch=master)
6+
[![Build status](https://travis-ci.org/jish/pre-commit.svg?branch=master)](https://travis-ci.org/jish/pre-commit)
77
[![Dependency Status](https://gemnasium.com/jish/pre-commit.png)](https://gemnasium.com/jish/pre-commit)
8-
[![Documentation](http://b.repl.ca/v1/yard-docs-blue.png)](http://rubydoc.info/gems/pre-commit/frames)
8+
[![Documentation](https://img.shields.io/badge/yard-docs-blue.svg)](http://rubydoc.info/gems/pre-commit/frames)
99

1010
## Installation
1111

@@ -95,6 +95,7 @@ This functionality was added in version `0.17.0`
9595
```bash
9696
pre-commit run # run on the files added to index not yet commited
9797
pre-commit run all # run on all files in current directory
98+
pre-commit run git # run on all git-tracked files, respect gitignore (added in 0.19.0)
9899
pre-commit run <file-list> # run on the list of files, patterns not supported
99100
```
100101

changelog.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
1+
* Upgrade JSHint to 2.5.4
2+
3+
## 0.19.0
4+
5+
* Add a `pre-commit run git` command to run `pre-commit` checks on all files tracked by git.
6+
* Filenames containing spaces no longer break the Grep check
7+
8+
## 0.18.0
9+
10+
* Improve version number discovery in schema and migration files so that a blank `schema.rb` (with version `0`) does not fail the migration check
11+
* Fix `pre-commit run <file-list>`.
12+
113
## 0.17.0
214

315
* Fix a bug where `pre-commit list` would bomb when you had older versions of `pre-commit` installed

lib/plugins/pre_commit/checks/jshint.rb

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,8 @@ module PreCommit
44
module Checks
55
class Jshint < Js
66

7-
def js_config
8-
if config_file
9-
ExecJS.exec("return (#{File.read(config_file)});")
10-
else
11-
{}
12-
end
13-
end
14-
157
def run_check(file)
16-
context = ExecJS.compile(File.read(linter_src))
17-
context.call("JSHINT", File.read(file), js_config, js_config["globals"])
8+
context.call("JSHINT._getErrors", File.read(file), js_config, js_config["globals"])
189
end
1910

2011
def linter_src
@@ -29,6 +20,25 @@ def self.description
2920
"Checks javascript files with JSHint."
3021
end
3122

23+
private
24+
25+
def context
26+
@context ||= ExecJS.compile(File.read(linter_src) << <<-JAVASCRIPT)
27+
;JSHINT._getErrors = function(source, options, globals) {
28+
JSHINT(source, options, globals);
29+
return JSHINT.errors;
30+
}
31+
JAVASCRIPT
32+
end
33+
34+
def js_config
35+
@js_config ||= if config_file
36+
ExecJS.exec("return (#{File.read(config_file)});")
37+
else
38+
{}
39+
end
40+
end
41+
3242
end
3343
end
3444
end

lib/plugins/pre_commit/checks/migration.rb

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,36 +3,56 @@
33
module PreCommit
44
module Checks
55
class Migration < Plugin
6+
VERSION_PATTERN = /(\d{14})/
7+
8+
self::VersionedFile = Struct.new(:file, :version) do
9+
alias_method :to_s, :file
10+
end
11+
612
def self.aliases
713
[:migrations]
814
end
915

1016
def call(staged_files)
11-
migration_files = migration_files(staged_files)
12-
schema_files = schema_files(staged_files)
17+
migration_files = versioned_migration_files(staged_files)
18+
schema_files = versioned_schema_files(staged_files)
1319

1420
if migration_files.any? && schema_files.none?
1521
"It looks like you're adding a migration, but did not update the schema file"
1622
elsif migration_files.none? && schema_files.any?
1723
"You're trying to change the schema without adding a migration file"
1824
elsif migration_files.any? && schema_files.any?
19-
versions = migration_files.map { |f| f[/\d+/] }
20-
schema = schema_files.map { |f| File.read(f) }.join
21-
missing_versions = versions.select { |version| !schema.include?(version) }
25+
migration_versions = migration_files.map(&:version)
26+
missing_versions = migration_versions - schema_files.map(&:version)
2227
if missing_versions.any?
23-
"You did not add the schema versions for #{versions.join(', ')} to #{schema_files.join(' or ')}"
28+
"You did not add the schema versions for "\
29+
"#{migration_versions.join(', ')} to #{schema_files.join(' or ')}"
2430
end
2531
end
2632
end
2733

2834
private
2935

30-
def migration_files(staged_files)
31-
staged_files.grep(/db\/migrate\/.*\.rb/)
36+
def versioned_migration_files(staged_files)
37+
files = staged_files.grep(/db\/migrate\/.*\.rb/)
38+
39+
files.each_with_object([]) do |f, result|
40+
if f =~ VERSION_PATTERN
41+
result << VersionedFile.new(f, $1)
42+
end
43+
end
3244
end
3345

34-
def schema_files(staged_files)
35-
staged_files.select { |f| File.basename(f) =~ /schema\.rb|structure.*\.sql/ }
46+
def versioned_schema_files(staged_files)
47+
files = staged_files.select do |f|
48+
File.basename(f) =~ /schema\.rb|structure.*\.sql/
49+
end
50+
51+
files.each_with_object([]) do |f, result|
52+
if IO.read(f) =~ VERSION_PATTERN
53+
result << VersionedFile.new(f, $1)
54+
end
55+
end
3656
end
3757

3858
def self.description

lib/plugins/pre_commit/checks/rspec_focus.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def message
1313
end
1414

1515
def pattern
16-
"':focus'"
16+
"'(describe|context|it).*(:focus|focus:).*do'"
1717
end
1818

1919
def self.description

lib/pre-commit/checks/grep.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
require 'pre-commit/checks/plugin'
2+
require 'shellwords'
23

34
module PreCommit
45
module Checks
@@ -30,7 +31,7 @@ def pattern
3031
# general code:
3132

3233
def call(staged_files)
33-
staged_files = files_filter(staged_files)
34+
staged_files = files_filter(staged_files).map(&:shellescape)
3435
return if staged_files.empty?
3536
errors = `#{grep} #{pattern} #{staged_files.join(" ")}#{extra_grep}`
3637
return unless $?.success?

lib/pre-commit/cli.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def execute_help(*args)
3333

3434
def execute_run(*args)
3535
require 'pre-commit/runner'
36-
PreCommit::Runner.new.run(*args)
36+
PreCommit::Runner.new.run(*args) and puts "No failed checks."
3737
end
3838

3939
def execute_install(key = nil, *args)

lib/pre-commit/runner.rb

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
require 'pluginator'
2+
require 'benchmark'
3+
24
require 'pre-commit/utils/staged_files'
35
require 'pre-commit/configuration'
46
require 'pre-commit/list_evaluator'
@@ -7,13 +9,14 @@ module PreCommit
79
class Runner
810
include PreCommit::Utils::StagedFiles
911

10-
attr_reader :pluginator, :config
12+
attr_reader :pluginator, :config, :debug
1113

1214
def initialize(stderr = nil, staged_files = nil, config = nil, pluginator = nil)
1315
@stderr = (stderr or $stderr)
1416
@pluginator = (pluginator or PreCommit.pluginator)
1517
@config = (config or PreCommit::Configuration.new(@pluginator))
1618
@staged_files = staged_files
19+
@debug = ENV["PRE_COMMIT_DEBUG"]
1720
end
1821

1922
def run(*args)
@@ -36,7 +39,17 @@ def show_output(name, list)
3639
end
3740

3841
def execute(list)
39-
list.map{|cmd| cmd.new(pluginator, config, list).call(staged_files.dup) }.compact
42+
list.map do |cmd|
43+
result = nil
44+
45+
seconds = Benchmark.realtime do
46+
result = cmd.new(pluginator, config, list).call(staged_files.dup)
47+
end
48+
49+
puts "#{cmd} #{seconds*1000}ms" if debug
50+
51+
result
52+
end.compact
4053
end
4154

4255
def list_to_run(name)

lib/pre-commit/support/jshint/jshint.js

Lines changed: 10388 additions & 3977 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)