pre-commit 0.1.1 → 0.1.2

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.
@@ -1,6 +1,9 @@
1
1
  require 'support/all'
2
2
  require 'pre-commit/utils'
3
3
  require 'pre-commit/checks/merge_conflict'
4
+ require 'pre-commit/checks/tabs'
5
+ require 'pre-commit/checks/console_log'
6
+ require 'pre-commit/checks/debugger_check'
4
7
 
5
8
  class PreCommit
6
9
 
@@ -8,47 +11,6 @@ class PreCommit
8
11
  WhiteSpaceChecker.check
9
12
  }
10
13
 
11
- ConsoleLog = lambda {
12
-
13
- if File.exists?('public/javascripts') && (args = Utils.staged_files('public/javascripts')).size > 0
14
- if system("git grep -n -q \"console\.log\" #{args}")
15
- puts "\n[ERROR] console.log found:"
16
- !system("git grep -n \"console\.log\" #{args}")
17
- else
18
- true
19
- end
20
- else
21
- true
22
- end
23
- }
24
-
25
- Debugger = lambda {
26
- dirs = ['app/', 'lib/', 'script/', 'vendor/', 'test/'].reject {|d| !File.exists?(d)}
27
- if dirs.size > 0 && (args = Utils.staged_files(dirs)).size > 0
28
- if system("git grep -n -q debugger #{args}")
29
- puts "\n[ERROR] debugger statement(s) found:"
30
- !system("git grep -n debugger #{args}")
31
- else
32
- true
33
- end
34
- else
35
- true
36
- end
37
- }
38
-
39
- Tabs = lambda {
40
- if (files = Utils.staged_files('*')).size > 0
41
- if system("grep -PnH -q '^\t' #{files}")
42
- puts "\n[ERROR] tab before initial space:"
43
- !system("grep -PnH '^\t' #{files}")
44
- else
45
- true
46
- end
47
- else
48
- true
49
- end
50
- }
51
-
52
14
  ClosureSyntaxCheck = lambda {
53
15
  compiler = "test/javascript/lib/compiler.jar"
54
16
 
@@ -88,12 +50,17 @@ class PreCommit
88
50
  :console_log => ConsoleLog,
89
51
  :js_lint_all => JSLintAll,
90
52
  :js_lint_new => JSLintNew,
91
- :debugger => Debugger,
53
+ :debugger => DebuggerCheck,
92
54
  :tabs => Tabs,
93
55
  :closure_syntax_check => ClosureSyntaxCheck,
94
56
  :merge_conflict => MergeConflict
95
57
  }
96
58
 
59
+ # Can not delete this method with out a deprecation strategy.
60
+ # It is refered to in the generated pre-commit hook in versions 0.0-0.1.1
61
+ #
62
+ # NOTE: The deprecation strategy *may* be just delete it since, we're still
63
+ # pre 1.0.
97
64
  def self.checks_to_run
98
65
  checks_to_run = `git config pre-commit.checks`.chomp.split(/,\s*/).map(&:to_sym)
99
66
 
@@ -0,0 +1,35 @@
1
+ class ConsoleLog
2
+
3
+ attr_accessor :staged_files, :error_message
4
+
5
+ def self.call(quiet=false)
6
+ check = new
7
+ check.staged_files = Utils.staged_files('public/javascripts')
8
+
9
+ result = check.run
10
+ if !quiet && !result
11
+ puts check.error_message
12
+ end
13
+ result
14
+ end
15
+
16
+ def run
17
+ return true if staged_files.empty?
18
+ if detected_bad_code?
19
+ @error_message = "pre-commit: console.log found:\n"
20
+ @error_message += instances_of_console_log_violations
21
+ false
22
+ else
23
+ true
24
+ end
25
+ end
26
+
27
+ def detected_bad_code?
28
+ system("grep -q 'console.log' #{staged_files}")
29
+ end
30
+
31
+ def instances_of_console_log_violations
32
+ `grep -nH 'console.log' #{staged_files}`
33
+ end
34
+
35
+ end
@@ -0,0 +1,38 @@
1
+ class DebuggerCheck
2
+ attr_accessor :staged_files, :error_message, :grep_command
3
+
4
+ def self.call(quiet=false)
5
+ dirs = ['app/', 'lib/', 'script/', 'vendor/', 'test/'].reject {|d| !File.exists?(d)}
6
+ check = new
7
+ check.staged_files = Utils.staged_files(*dirs)
8
+
9
+ result = check.run
10
+ if !quiet && !result
11
+ $stderr.puts check.error_message
12
+ end
13
+ result
14
+ end
15
+
16
+ def run
17
+ return true if staged_files.empty?
18
+
19
+ if detected_bad_code?
20
+ @error_message = "pre-commit: debugger statement found:\n"
21
+ @error_message += instances_of_debugger_violations
22
+ false
23
+ else
24
+ true
25
+ end
26
+ end
27
+
28
+ def detected_bad_code?
29
+ cmd = grep_command || "git grep"
30
+ system("#{cmd} -nH -q debugger #{staged_files}")
31
+ end
32
+
33
+ def instances_of_debugger_violations
34
+ cmd = grep_command || "git grep"
35
+ `#{cmd} -nH debugger #{staged_files}`
36
+ end
37
+
38
+ end
@@ -0,0 +1,39 @@
1
+ class Tabs
2
+
3
+ attr_accessor :staged_files, :error_message
4
+
5
+ # Maintaining the functionality of `call` for backwards compatibility
6
+ # Currently, the call method is expected to:
7
+ # * run a check
8
+ # * print any corresponding error messages if the check fails
9
+ def self.call
10
+ check = new
11
+ check.staged_files = Utils.staged_files('*')
12
+ check.run
13
+ end
14
+
15
+ def run
16
+ return unless staged_files.size > 0
17
+
18
+ if detected_bad_code?
19
+ @error_message = "pre-commit: detected tab before initial space:\n"
20
+ @error_message += violations
21
+
22
+ $stderr.puts @error_message
23
+ $stderr.puts
24
+
25
+ @passed = false
26
+ else
27
+ @passed = true
28
+ end
29
+ end
30
+
31
+ def detected_bad_code?
32
+ system("grep -PnIH -q '^\t' #{staged_files}")
33
+ end
34
+
35
+ def violations
36
+ `grep -PnIH '^\t' #{staged_files}`
37
+ end
38
+
39
+ end
@@ -0,0 +1,19 @@
1
+ class Runner
2
+
3
+ def run
4
+ checks_to_run = PreCommit.checks_to_run
5
+
6
+ all_passed = checks_to_run.inject(true) do |current_status, check|
7
+ passed = check.call
8
+
9
+ if !passed && check.respond_to?(:error_message)
10
+ puts check.error_message
11
+ end
12
+
13
+ check && current_status
14
+ end
15
+
16
+ exit(all_passed ? 0 : 1)
17
+ end
18
+
19
+ end
@@ -1,6 +1,8 @@
1
1
  class Utils
2
2
 
3
3
  def self.staged_files(*dirs)
4
+ dirs = reject_missing(dirs)
5
+
4
6
  @staged_files ||= {}
5
7
  @staged_files[dirs.join(' ')] ||= `git diff --cached --name-only --diff-filter=ACM #{dirs.join(' ')} | xargs`.chomp
6
8
  end
@@ -9,5 +11,9 @@ class Utils
9
11
  @new_files ||= {}
10
12
  @new_files[dirs.join(' ')] ||= `git status --short #{dirs.join(' ')} | grep ^A | xargs`.chomp.split("A ").join(" ")
11
13
  end
12
-
14
+
15
+ def self.reject_missing(dirs)
16
+ dirs.reject { |dir| !File.exist?(dir) }
17
+ end
18
+
13
19
  end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pre-commit
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 31
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 1
8
- - 1
9
- version: 0.1.1
9
+ - 2
10
+ version: 0.1.2
10
11
  platform: ruby
11
12
  authors:
12
13
  - Shajith Chacko, Josh Lubaway
@@ -27,8 +28,12 @@ extensions: []
27
28
  extra_rdoc_files:
28
29
  - README.md
29
30
  files:
31
+ - lib/pre-commit/checks/console_log.rb
32
+ - lib/pre-commit/checks/debugger_check.rb
30
33
  - lib/pre-commit/checks/merge_conflict.rb
34
+ - lib/pre-commit/checks/tabs.rb
31
35
  - lib/pre-commit/checks.rb
36
+ - lib/pre-commit/runner.rb
32
37
  - lib/pre-commit/utils.rb
33
38
  - lib/pre-commit.rb
34
39
  - lib/support/all.rb
@@ -55,6 +60,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
55
60
  requirements:
56
61
  - - ">="
57
62
  - !ruby/object:Gem::Version
63
+ hash: 3
58
64
  segments:
59
65
  - 0
60
66
  version: "0"
@@ -63,6 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
69
  requirements:
64
70
  - - ">="
65
71
  - !ruby/object:Gem::Version
72
+ hash: 3
66
73
  segments:
67
74
  - 0
68
75
  version: "0"