pre-commit 0.6.1 → 0.7.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.
- data/README.md +5 -1
- data/bin/pre-commit +1 -3
- data/lib/pre-commit/base.rb +1 -1
- data/lib/pre-commit/checks.rb +5 -3
- data/lib/pre-commit/checks/ci_check.rb +36 -34
- data/lib/pre-commit/checks/console_log.rb +32 -29
- data/lib/pre-commit/checks/debugger_check.rb +37 -34
- data/lib/pre-commit/checks/js_check.rb +1 -1
- data/lib/pre-commit/checks/jshint_check.rb +2 -1
- data/lib/pre-commit/checks/jslint_check.rb +1 -3
- data/lib/pre-commit/checks/local_check.rb +28 -0
- data/lib/pre-commit/checks/merge_conflict.rb +26 -24
- data/lib/pre-commit/checks/migration_check.rb +1 -1
- data/lib/pre-commit/checks/php_check.rb +1 -2
- data/lib/pre-commit/checks/ruby_symbol_hashrockets.rb +40 -34
- data/lib/pre-commit/checks/tabs.rb +43 -38
- data/lib/pre-commit/cli.rb +1 -1
- data/lib/pre-commit/runner.rb +12 -10
- data/lib/pre-commit/utils.rb +22 -20
- data/lib/support/closure/closure_checker.rb +8 -6
- data/lib/support/whitespace/whitespace_checker.rb +6 -4
- data/templates/pre-commit-hook +7 -8
- metadata +41 -48
data/README.md
CHANGED
@@ -27,6 +27,10 @@ These are the available checks:
|
|
27
27
|
* closure\_syntax\_check
|
28
28
|
* php (Runs php -l on all staged files)
|
29
29
|
* ruby_symbol_hashrockets (1.9 syntax. BAD :foo => "bar". GOOD foo: "bar")
|
30
|
+
* local (executes `config/pre-commit.rb` with list of changed files)
|
31
|
+
* merge conflict (Will check if you are about to check in a merge conflict)
|
32
|
+
* migrations (Will make sure you check in the proper files after creating a Rails migration)
|
33
|
+
* ci (Will run the `pre_commit:ci` rake task and pass or fail accordingly)
|
30
34
|
|
31
35
|
To configure which checks you would like to run, simply set the `pre-commit.checks` git configuration setting.
|
32
36
|
|
@@ -42,4 +46,4 @@ To enable `white_space`, `console_log` and `debugger` checks:
|
|
42
46
|
|
43
47
|
Note: If no checks are configured, a default set of checks is run:
|
44
48
|
|
45
|
-
white_space, console_log, debugger, tabs, jshint, migrations
|
49
|
+
white_space, console_log, debugger, tabs, jshint, migrations, merge_conflict, local
|
data/bin/pre-commit
CHANGED
@@ -2,8 +2,6 @@
|
|
2
2
|
|
3
3
|
require 'pre-commit/cli'
|
4
4
|
|
5
|
-
PRE_COMMIT_HOOK_PATH = '.git/hooks/pre-commit'
|
6
|
-
|
7
5
|
if ARGV[0] != "install"
|
8
6
|
puts "Usage: pre-commit install"
|
9
7
|
exit(1)
|
@@ -17,5 +15,5 @@ end
|
|
17
15
|
cli = PreCommit::Cli.new
|
18
16
|
cli.install
|
19
17
|
|
20
|
-
puts "Installed hook: #{PRE_COMMIT_HOOK_PATH}"
|
18
|
+
puts "Installed hook: #{PreCommit::Cli::PRE_COMMIT_HOOK_PATH}"
|
21
19
|
puts
|
data/lib/pre-commit/base.rb
CHANGED
data/lib/pre-commit/checks.rb
CHANGED
@@ -4,6 +4,7 @@ require 'pre-commit/checks/merge_conflict'
|
|
4
4
|
require 'pre-commit/checks/tabs'
|
5
5
|
require 'pre-commit/checks/console_log'
|
6
6
|
require 'pre-commit/checks/debugger_check'
|
7
|
+
require 'pre-commit/checks/local_check'
|
7
8
|
require 'pre-commit/checks/jslint_check'
|
8
9
|
require 'pre-commit/checks/jshint_check'
|
9
10
|
require 'pre-commit/checks/migration_check'
|
@@ -11,7 +12,7 @@ require 'pre-commit/checks/ci_check'
|
|
11
12
|
require 'pre-commit/checks/php_check'
|
12
13
|
require 'pre-commit/checks/ruby_symbol_hashrockets'
|
13
14
|
|
14
|
-
|
15
|
+
module PreCommit
|
15
16
|
|
16
17
|
WhiteSpace = lambda {
|
17
18
|
WhiteSpaceChecker.check
|
@@ -34,6 +35,7 @@ class PreCommit
|
|
34
35
|
:js_lint_new => JslintCheck.new(:new),
|
35
36
|
:jshint => JshintCheck.new,
|
36
37
|
:debugger => DebuggerCheck,
|
38
|
+
:local => LocalCheck,
|
37
39
|
:tabs => Tabs,
|
38
40
|
:closure_syntax_check => ClosureSyntaxCheck,
|
39
41
|
:merge_conflict => MergeConflict,
|
@@ -59,7 +61,7 @@ class PreCommit
|
|
59
61
|
|
60
62
|
if checks_to_run.empty?
|
61
63
|
Checks.values_at(:white_space, :console_log, :debugger, :tabs, :jshint,
|
62
|
-
:migrations, :merge_conflict)
|
64
|
+
:migrations, :merge_conflict, :local)
|
63
65
|
else
|
64
66
|
Checks.values_at(*checks_to_run)
|
65
67
|
end.compact
|
@@ -67,7 +69,7 @@ class PreCommit
|
|
67
69
|
|
68
70
|
def self.run
|
69
71
|
exit_status = self.checks_to_run.inject(true) do |acc, cmd|
|
70
|
-
|
72
|
+
cmd.call && acc
|
71
73
|
end
|
72
74
|
|
73
75
|
exit(exit_status ? 0 : 1)
|
@@ -1,47 +1,49 @@
|
|
1
|
-
|
1
|
+
module PreCommit
|
2
|
+
class CiCheck
|
2
3
|
|
3
|
-
|
4
|
+
CI_TASK_NAME = 'pre_commit:ci'
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
def call
|
7
|
+
if rakefile_present? && has_ci_task?
|
8
|
+
run
|
9
|
+
else
|
10
|
+
$stderr.puts "pre-commit: skipping ci check. The `#{CI_TASK_NAME}` task is not defined."
|
10
11
|
|
11
|
-
|
12
|
-
|
12
|
+
# pretend the check passed and move on
|
13
|
+
true
|
14
|
+
end
|
13
15
|
end
|
14
|
-
end
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
def run
|
18
|
+
if tests_passed?
|
19
|
+
true
|
20
|
+
else
|
21
|
+
$stderr.puts 'pre-commit: your test suite has failed'
|
22
|
+
$stderr.puts "for the full output run `#{CI_TASK_NAME}`"
|
23
|
+
$stderr.puts
|
23
24
|
|
24
|
-
|
25
|
+
false
|
26
|
+
end
|
25
27
|
end
|
26
|
-
end
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
|
29
|
+
def tests_passed?
|
30
|
+
system("rake #{CI_TASK_NAME} --silent")
|
31
|
+
end
|
31
32
|
|
32
|
-
|
33
|
-
|
34
|
-
|
33
|
+
def rakefile_present?
|
34
|
+
['rakefile', 'Rakefile', 'rakefile.rb', 'Rakefile.rb'].any? do |file|
|
35
|
+
File.exist?(file)
|
36
|
+
end
|
35
37
|
end
|
36
|
-
end
|
37
38
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
39
|
+
def has_ci_task?
|
40
|
+
require 'rake'
|
41
|
+
Rake.application.init
|
42
|
+
Rake.application.load_rakefile
|
43
|
+
Rake::Task.task_defined?(CI_TASK_NAME)
|
44
|
+
rescue LoadError
|
45
|
+
$stderr.puts 'pre-commit: rake not found, skipping ci check'
|
46
|
+
end
|
46
47
|
|
48
|
+
end
|
47
49
|
end
|
@@ -1,40 +1,43 @@
|
|
1
|
-
|
1
|
+
module PreCommit
|
2
|
+
class ConsoleLog
|
2
3
|
|
3
|
-
|
4
|
+
attr_accessor :staged_files, :error_message
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
6
|
+
def self.call(quiet=false)
|
7
|
+
check = new
|
8
|
+
check.staged_files = Utils.staged_files('public/javascripts')
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
result = check.run
|
11
|
+
if !quiet && !result
|
12
|
+
puts check.error_message
|
13
|
+
end
|
14
|
+
result
|
12
15
|
end
|
13
|
-
result
|
14
|
-
end
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
def run
|
18
|
+
return true if staged_js_files.empty?
|
19
|
+
if detected_bad_code?
|
20
|
+
@error_message = "pre-commit: console.log found:\n"
|
21
|
+
@error_message += instances_of_console_log_violations
|
22
|
+
false
|
23
|
+
else
|
24
|
+
true
|
25
|
+
end
|
24
26
|
end
|
25
|
-
end
|
26
27
|
|
27
|
-
|
28
|
-
|
29
|
-
|
28
|
+
def detected_bad_code?
|
29
|
+
system("grep -v \/\/ #{staged_js_files} | grep -qe \"console\\.log\"")
|
30
|
+
end
|
30
31
|
|
31
|
-
|
32
|
-
|
33
|
-
|
32
|
+
def instances_of_console_log_violations
|
33
|
+
`grep -nHe \"console\\.log\" #{staged_js_files}`
|
34
|
+
end
|
35
|
+
|
36
|
+
def staged_js_files
|
37
|
+
@staged_js_files ||= staged_files.split(" ").select do |file|
|
38
|
+
File.extname(file) == ".js"
|
39
|
+
end.join(" ")
|
40
|
+
end
|
34
41
|
|
35
|
-
def staged_js_files
|
36
|
-
@staged_js_files ||= staged_files.split(" ").select do |file|
|
37
|
-
File.extname(file) == ".js"
|
38
|
-
end.join(" ")
|
39
42
|
end
|
40
43
|
end
|
@@ -1,44 +1,47 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
module PreCommit
|
2
|
+
class DebuggerCheck
|
3
|
+
|
4
|
+
attr_accessor :staged_files, :error_message, :grep_command
|
5
|
+
|
6
|
+
def self.call(quiet=false)
|
7
|
+
dirs = ['app/', 'lib/', 'script/', 'vendor/', 'test/'].reject {|d| !File.exists?(d)}
|
8
|
+
check = new
|
9
|
+
check.staged_files = Utils.staged_files(*dirs)
|
10
|
+
|
11
|
+
result = check.run
|
12
|
+
if !quiet && !result
|
13
|
+
$stderr.puts check.error_message
|
14
|
+
$stderr.puts
|
15
|
+
check.print_dash_n_reminder
|
16
|
+
end
|
17
|
+
result
|
18
|
+
end
|
3
19
|
|
4
|
-
|
5
|
-
|
6
|
-
check = new
|
7
|
-
check.staged_files = Utils.staged_files(*dirs)
|
20
|
+
def run
|
21
|
+
return true if staged_files.empty?
|
8
22
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
23
|
+
if detected_bad_code?
|
24
|
+
@error_message = "pre-commit: debugger statement(s) found:\n"
|
25
|
+
@error_message += instances_of_debugger_violations
|
26
|
+
false
|
27
|
+
else
|
28
|
+
true
|
29
|
+
end
|
14
30
|
end
|
15
|
-
result
|
16
|
-
end
|
17
31
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
if detected_bad_code?
|
22
|
-
@error_message = "pre-commit: debugger statement(s) found:\n"
|
23
|
-
@error_message += instances_of_debugger_violations
|
24
|
-
false
|
25
|
-
else
|
26
|
-
true
|
32
|
+
def detected_bad_code?
|
33
|
+
!system("git diff --cached -Sdebugger --quiet --exit-code")
|
27
34
|
end
|
28
|
-
end
|
29
35
|
|
30
|
-
|
31
|
-
|
32
|
-
|
36
|
+
def instances_of_debugger_violations
|
37
|
+
cmd = grep_command || "git grep"
|
38
|
+
`#{cmd} -nH debugger #{staged_files}`
|
39
|
+
end
|
33
40
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
41
|
+
def print_dash_n_reminder
|
42
|
+
$stderr.puts 'You can bypass this check using `git commit -n`'
|
43
|
+
$stderr.puts
|
44
|
+
end
|
38
45
|
|
39
|
-
def print_dash_n_reminder
|
40
|
-
$stderr.puts 'You can bypass this check using `git commit -n`'
|
41
|
-
$stderr.puts
|
42
46
|
end
|
43
|
-
|
44
47
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'pre-commit/checks/js_check'
|
2
2
|
|
3
|
-
|
3
|
+
module PreCommit
|
4
4
|
class JshintCheck < JsCheck
|
5
5
|
|
6
6
|
def check_name
|
@@ -30,5 +30,6 @@ class PreCommit
|
|
30
30
|
def linter_src
|
31
31
|
File.join(PreCommit.root, 'lib', 'support', 'jshint', 'jshint.js')
|
32
32
|
end
|
33
|
+
|
33
34
|
end
|
34
35
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'pre-commit/utils'
|
2
|
+
|
3
|
+
module PreCommit
|
4
|
+
class LocalCheck
|
5
|
+
|
6
|
+
DEFAULT_LOCATION = "config/pre-commit.rb"
|
7
|
+
attr_accessor :error_message
|
8
|
+
|
9
|
+
def self.call(quiet=false)
|
10
|
+
check = new
|
11
|
+
result = check.run(DEFAULT_LOCATION, Utils.staged_files("."))
|
12
|
+
puts check.error_message if !result && !quiet
|
13
|
+
result
|
14
|
+
end
|
15
|
+
|
16
|
+
def run(file, staged_files)
|
17
|
+
return true unless File.exist?(file)
|
18
|
+
output = `ruby #{file} #{staged_files} 2>&1`
|
19
|
+
if $?.success?
|
20
|
+
true
|
21
|
+
else
|
22
|
+
self.error_message = "#{file} failed:\n#{output}"
|
23
|
+
false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -1,32 +1,34 @@
|
|
1
|
-
|
1
|
+
module PreCommit
|
2
|
+
class MergeConflict
|
2
3
|
|
3
|
-
|
4
|
+
attr_accessor :staged_files
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
def self.call
|
7
|
+
check = new
|
8
|
+
check.staged_files = Utils.staged_files('.')
|
9
|
+
check.run
|
10
|
+
end
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
12
|
+
def run
|
13
|
+
if detected_bad_code?
|
14
|
+
$stderr.puts 'pre-commit: detected a merge conflict'
|
15
|
+
$stderr.puts errors
|
16
|
+
$stderr.puts
|
17
|
+
$stderr.puts 'pre-commit: You can bypass this check using `git commit -n`'
|
18
|
+
$stderr.puts
|
19
|
+
false
|
20
|
+
else
|
21
|
+
true
|
22
|
+
end
|
21
23
|
end
|
22
|
-
end
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
|
25
|
+
def detected_bad_code?
|
26
|
+
system("grep '<<<<<<<' #{staged_files} --quiet")
|
27
|
+
end
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
|
29
|
+
def errors
|
30
|
+
`grep -nH '<<<<<<<' #{staged_files}`
|
31
|
+
end
|
31
32
|
|
33
|
+
end
|
32
34
|
end
|
@@ -1,49 +1,55 @@
|
|
1
|
-
|
2
|
-
attr_accessor :staged_files, :error_message
|
1
|
+
require 'pre-commit/utils'
|
3
2
|
|
4
|
-
|
3
|
+
module PreCommit
|
4
|
+
class RubySymbolHashrockets
|
5
5
|
|
6
|
-
|
7
|
-
check = new
|
8
|
-
check.staged_files = Utils.staged_files('*')
|
9
|
-
result = check.run
|
6
|
+
attr_accessor :staged_files, :error_message
|
10
7
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
HASHROCKET_PATTERN = ':(?:\$|@|@@|[_A-Za-z])?\w*[=!?]?\s*=>\s*'
|
9
|
+
|
10
|
+
def self.call
|
11
|
+
check = new
|
12
|
+
check.staged_files = Utils.staged_files('*')
|
13
|
+
result = check.run
|
14
|
+
|
15
|
+
if !result
|
16
|
+
$stderr.puts check.error_message
|
17
|
+
$stderr.puts
|
18
|
+
$stderr.puts 'pre-commit: You can bypass this check using `git commit -n`'
|
19
|
+
$stderr.puts
|
20
|
+
end
|
21
|
+
|
22
|
+
result
|
16
23
|
end
|
17
24
|
|
18
|
-
|
19
|
-
|
25
|
+
def run
|
26
|
+
# There is nothing to check
|
27
|
+
return true if staged_files.empty?
|
20
28
|
|
21
|
-
|
22
|
-
|
23
|
-
|
29
|
+
if detected_bad_code?
|
30
|
+
@error_message = "pre-commit: detected :symbol => value hashrocket:\n"
|
31
|
+
@error_message += violations[:lines]
|
24
32
|
|
25
|
-
|
26
|
-
|
27
|
-
|
33
|
+
@passed = false
|
34
|
+
else
|
35
|
+
@passed = true
|
36
|
+
end
|
28
37
|
|
29
|
-
@passed
|
30
|
-
else
|
31
|
-
@passed = true
|
38
|
+
@passed
|
32
39
|
end
|
33
40
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
def detected_bad_code?
|
38
|
-
violations[:success]
|
39
|
-
end
|
41
|
+
def detected_bad_code?
|
42
|
+
violations[:success]
|
43
|
+
end
|
40
44
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
+
def violations
|
46
|
+
@violations ||= begin
|
47
|
+
lines = `#{Utils.grep} '#{HASHROCKET_PATTERN}' #{staged_files}`
|
48
|
+
success = $?.exitstatus == 0
|
45
49
|
|
46
|
-
|
50
|
+
{ :lines => lines, :success => success}
|
51
|
+
end
|
47
52
|
end
|
53
|
+
|
48
54
|
end
|
49
55
|
end
|
@@ -1,49 +1,54 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
check
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
1
|
+
require 'pre-commit/utils'
|
2
|
+
|
3
|
+
module PreCommit
|
4
|
+
class Tabs
|
5
|
+
|
6
|
+
attr_accessor :staged_files, :error_message
|
7
|
+
|
8
|
+
# Maintaining the functionality of `call` for backwards compatibility
|
9
|
+
# Currently, the call method is expected to:
|
10
|
+
# * run a check
|
11
|
+
# * print any corresponding error messages if the check fails
|
12
|
+
def self.call
|
13
|
+
check = new
|
14
|
+
check.staged_files = Utils.staged_files('*')
|
15
|
+
result = check.run
|
16
|
+
|
17
|
+
if !result
|
18
|
+
$stderr.puts check.error_message
|
19
|
+
$stderr.puts
|
20
|
+
$stderr.puts 'pre-commit: You can bypass this check using `git commit -n`'
|
21
|
+
$stderr.puts
|
22
|
+
end
|
23
|
+
|
24
|
+
result
|
19
25
|
end
|
20
26
|
|
21
|
-
|
22
|
-
|
27
|
+
def run
|
28
|
+
# There is nothing to check
|
29
|
+
if staged_files.empty?
|
30
|
+
return true
|
31
|
+
end
|
32
|
+
|
33
|
+
if detected_bad_code?
|
34
|
+
@error_message = "pre-commit: detected tab before initial space:\n"
|
35
|
+
@error_message += violations
|
23
36
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
37
|
+
@passed = false
|
38
|
+
else
|
39
|
+
@passed = true
|
40
|
+
end
|
28
41
|
end
|
29
42
|
|
30
|
-
|
31
|
-
@error_message = "pre-commit: detected tab before initial space:\n"
|
32
|
-
@error_message += violations
|
43
|
+
LEADING_TAB_PATTERN = '^ *\t'
|
33
44
|
|
34
|
-
|
35
|
-
|
36
|
-
@passed = true
|
45
|
+
def detected_bad_code?
|
46
|
+
system("#{Utils.grep} -q '#{LEADING_TAB_PATTERN}' #{staged_files}")
|
37
47
|
end
|
38
|
-
end
|
39
48
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
system("#{Utils.grep} -q '#{LEADING_TAB_PATTERN}' #{staged_files}")
|
44
|
-
end
|
49
|
+
def violations
|
50
|
+
`#{Utils.grep} '#{LEADING_TAB_PATTERN}' #{staged_files}`
|
51
|
+
end
|
45
52
|
|
46
|
-
def violations
|
47
|
-
`#{Utils.grep} '#{LEADING_TAB_PATTERN}' #{staged_files}`
|
48
53
|
end
|
49
54
|
end
|
data/lib/pre-commit/cli.rb
CHANGED
data/lib/pre-commit/runner.rb
CHANGED
@@ -1,19 +1,21 @@
|
|
1
|
-
|
1
|
+
module PreCommit
|
2
|
+
class Runner
|
2
3
|
|
3
|
-
|
4
|
-
|
4
|
+
def run
|
5
|
+
checks_to_run = PreCommit.checks_to_run
|
5
6
|
|
6
|
-
|
7
|
-
|
7
|
+
all_passed = checks_to_run.inject(true) do |current_status, check|
|
8
|
+
passed = check.call
|
8
9
|
|
9
|
-
|
10
|
-
|
10
|
+
if !passed && check.respond_to?(:error_message)
|
11
|
+
puts check.error_message
|
12
|
+
end
|
13
|
+
|
14
|
+
check && current_status
|
11
15
|
end
|
12
16
|
|
13
|
-
|
17
|
+
exit(all_passed ? 0 : 1)
|
14
18
|
end
|
15
19
|
|
16
|
-
exit(all_passed ? 0 : 1)
|
17
20
|
end
|
18
|
-
|
19
21
|
end
|
data/lib/pre-commit/utils.rb
CHANGED
@@ -1,28 +1,30 @@
|
|
1
|
-
|
1
|
+
module PreCommit
|
2
|
+
class Utils
|
2
3
|
|
3
|
-
|
4
|
-
|
4
|
+
def self.staged_files(*dirs)
|
5
|
+
dirs = reject_missing(dirs)
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
7
|
+
@staged_files ||= {}
|
8
|
+
@staged_files[dirs.join(' ')] ||= `git diff --cached --name-only --diff-filter=ACM #{dirs.join(' ')} | xargs`.chomp
|
9
|
+
end
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
def self.new_files(*dirs)
|
12
|
+
@new_files ||= {}
|
13
|
+
@new_files[dirs.join(' ')] ||= `git status --short #{dirs.join(' ')} | grep ^A | xargs`.chomp.split("A ").join(" ")
|
14
|
+
end
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
16
|
+
def self.reject_missing(dirs)
|
17
|
+
dirs.reject { |dir| !File.exist?(dir) }
|
18
|
+
end
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
20
|
+
def self.grep
|
21
|
+
grep_version = `grep --version | head -n 1 | sed -e 's/^[^0-9.]*\([0-9.]*\)$/\1/'`
|
22
|
+
if grep_version =~ /FreeBSD/
|
23
|
+
"grep -EnIH"
|
24
|
+
else
|
25
|
+
"grep -PnIH"
|
26
|
+
end
|
25
27
|
end
|
26
|
-
end
|
27
28
|
|
29
|
+
end
|
28
30
|
end
|
@@ -1,8 +1,10 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
module PreCommit
|
2
|
+
class ClosureChecker
|
3
|
+
CLOSURE_PATH = File.join(File.dirname(__FILE__),"compiler.jar")
|
4
|
+
|
5
|
+
def self.check(files)
|
6
|
+
js_args = files.map {|arg| "--js #{arg}"}.join(' ')
|
7
|
+
system("java -jar #{CLOSURE_PATH} #{js_args} --js_output_file /tmp/jammit.js")
|
8
|
+
end
|
7
9
|
end
|
8
10
|
end
|
@@ -1,7 +1,9 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
module PreCommit
|
2
|
+
class WhiteSpaceChecker
|
3
|
+
WHITESPACE_SCRIPT_PATH = File.join(File.dirname(__FILE__), "whitespace")
|
3
4
|
|
4
|
-
|
5
|
-
|
5
|
+
def self.check
|
6
|
+
system("sh #{WHITESPACE_SCRIPT_PATH}")
|
7
|
+
end
|
6
8
|
end
|
7
9
|
end
|
data/templates/pre-commit-hook
CHANGED
@@ -1,18 +1,17 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
if system("which rvm > /dev/null")
|
4
|
-
|
3
|
+
cmd = if system("which rvm > /dev/null")
|
4
|
+
"rvm default do ruby -rrubygems"
|
5
5
|
elsif system("which rbenv > /dev/null")
|
6
|
-
|
6
|
+
"rbenv exec ruby -rrubygems"
|
7
7
|
else
|
8
|
-
|
8
|
+
"ruby -r rubygems"
|
9
9
|
end
|
10
|
+
cmd << " -r pre-commit"
|
10
11
|
|
11
|
-
if !system("#{cmd} -
|
12
|
+
if !system("#{cmd} -e '' 2>&1")
|
12
13
|
$stderr.puts "pre-commit: WARNING: Skipping checks because the pre-commit gem is not installed. (Did you change your Ruby version?)"
|
13
14
|
exit(0)
|
14
15
|
end
|
15
16
|
|
16
|
-
cmd
|
17
|
-
|
18
|
-
exit(system(cmd) ? 0 : 1)
|
17
|
+
exec("#{cmd} -e 'PreCommit.run'")
|
metadata
CHANGED
@@ -1,43 +1,40 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: pre-commit
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 6
|
8
|
-
- 1
|
9
|
-
version: 0.6.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.7.0
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Shajith Chacko, Josh Lubaway
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
dependencies:
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2013-02-14 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: execjs
|
22
|
-
|
23
|
-
|
24
|
-
requirements:
|
25
|
-
- -
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
|
28
|
-
- 0
|
29
|
-
version: "0"
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
30
22
|
type: :runtime
|
31
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
32
30
|
description: A git pre-commit hook written in ruby with a few more tricks up its sleeve
|
33
31
|
email: dontneedmoreemail@example.com
|
34
|
-
executables:
|
32
|
+
executables:
|
35
33
|
- pre-commit
|
36
34
|
extensions: []
|
37
|
-
|
38
|
-
extra_rdoc_files:
|
35
|
+
extra_rdoc_files:
|
39
36
|
- README.md
|
40
|
-
files:
|
37
|
+
files:
|
41
38
|
- lib/pre-commit/base.rb
|
42
39
|
- lib/pre-commit/checks/ci_check.rb
|
43
40
|
- lib/pre-commit/checks/console_log.rb
|
@@ -45,6 +42,7 @@ files:
|
|
45
42
|
- lib/pre-commit/checks/js_check.rb
|
46
43
|
- lib/pre-commit/checks/jshint_check.rb
|
47
44
|
- lib/pre-commit/checks/jslint_check.rb
|
45
|
+
- lib/pre-commit/checks/local_check.rb
|
48
46
|
- lib/pre-commit/checks/merge_conflict.rb
|
49
47
|
- lib/pre-commit/checks/migration_check.rb
|
50
48
|
- lib/pre-commit/checks/php_check.rb
|
@@ -64,36 +62,31 @@ files:
|
|
64
62
|
- lib/support/whitespace/whitespace_checker.rb
|
65
63
|
- templates/pre-commit-hook
|
66
64
|
- README.md
|
67
|
-
|
65
|
+
- bin/pre-commit
|
68
66
|
homepage: http://github.com/jish/pre-commit
|
69
67
|
licenses: []
|
70
|
-
|
71
68
|
post_install_message:
|
72
|
-
rdoc_options:
|
69
|
+
rdoc_options:
|
73
70
|
- --main
|
74
71
|
- README.md
|
75
|
-
require_paths:
|
72
|
+
require_paths:
|
76
73
|
- lib
|
77
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
requirements:
|
86
|
-
- -
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
|
89
|
-
- 0
|
90
|
-
version: "0"
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ! '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
91
86
|
requirements: []
|
92
|
-
|
93
87
|
rubyforge_project:
|
94
|
-
rubygems_version: 1.
|
88
|
+
rubygems_version: 1.8.23
|
95
89
|
signing_key:
|
96
90
|
specification_version: 3
|
97
91
|
summary: A slightly better git pre-commit hook
|
98
92
|
test_files: []
|
99
|
-
|