jawshooah-overcommit 0.22.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.
Files changed (82) hide show
  1. checksums.yaml +7 -0
  2. data/bin/overcommit +8 -0
  3. data/config/default.yml +275 -0
  4. data/config/starter.yml +31 -0
  5. data/lib/overcommit.rb +20 -0
  6. data/lib/overcommit/cli.rb +205 -0
  7. data/lib/overcommit/configuration.rb +183 -0
  8. data/lib/overcommit/configuration_loader.rb +49 -0
  9. data/lib/overcommit/configuration_validator.rb +40 -0
  10. data/lib/overcommit/constants.rb +8 -0
  11. data/lib/overcommit/exceptions.rb +35 -0
  12. data/lib/overcommit/git_repo.rb +147 -0
  13. data/lib/overcommit/hook/base.rb +174 -0
  14. data/lib/overcommit/hook/commit_msg/base.rb +11 -0
  15. data/lib/overcommit/hook/commit_msg/gerrit_change_id.rb +18 -0
  16. data/lib/overcommit/hook/commit_msg/hard_tabs.rb +13 -0
  17. data/lib/overcommit/hook/commit_msg/russian_novel.rb +14 -0
  18. data/lib/overcommit/hook/commit_msg/single_line_subject.rb +12 -0
  19. data/lib/overcommit/hook/commit_msg/text_width.rb +38 -0
  20. data/lib/overcommit/hook/commit_msg/trailing_period.rb +12 -0
  21. data/lib/overcommit/hook/post_checkout/base.rb +11 -0
  22. data/lib/overcommit/hook/post_checkout/index_tags.rb +26 -0
  23. data/lib/overcommit/hook/post_commit/base.rb +11 -0
  24. data/lib/overcommit/hook/post_commit/git_guilt.rb +9 -0
  25. data/lib/overcommit/hook/pre_commit/author_email.rb +18 -0
  26. data/lib/overcommit/hook/pre_commit/author_name.rb +17 -0
  27. data/lib/overcommit/hook/pre_commit/base.rb +70 -0
  28. data/lib/overcommit/hook/pre_commit/berksfile_check.rb +20 -0
  29. data/lib/overcommit/hook/pre_commit/brakeman.rb +12 -0
  30. data/lib/overcommit/hook/pre_commit/broken_symlinks.rb +15 -0
  31. data/lib/overcommit/hook/pre_commit/bundle_check.rb +25 -0
  32. data/lib/overcommit/hook/pre_commit/chamber_security.rb +11 -0
  33. data/lib/overcommit/hook/pre_commit/coffee_lint.rb +11 -0
  34. data/lib/overcommit/hook/pre_commit/css_lint.rb +11 -0
  35. data/lib/overcommit/hook/pre_commit/go_lint.rb +12 -0
  36. data/lib/overcommit/hook/pre_commit/haml_lint.rb +19 -0
  37. data/lib/overcommit/hook/pre_commit/hard_tabs.rb +14 -0
  38. data/lib/overcommit/hook/pre_commit/image_optim.rb +41 -0
  39. data/lib/overcommit/hook/pre_commit/js_hint.rb +13 -0
  40. data/lib/overcommit/hook/pre_commit/jscs.rb +22 -0
  41. data/lib/overcommit/hook/pre_commit/json_syntax.rb +22 -0
  42. data/lib/overcommit/hook/pre_commit/jsx_hint.rb +13 -0
  43. data/lib/overcommit/hook/pre_commit/jsxcs.rb +20 -0
  44. data/lib/overcommit/hook/pre_commit/local_paths_in_gemfile.rb +14 -0
  45. data/lib/overcommit/hook/pre_commit/merge_conflicts.rb +14 -0
  46. data/lib/overcommit/hook/pre_commit/pry_binding.rb +14 -0
  47. data/lib/overcommit/hook/pre_commit/python_flake8.rb +11 -0
  48. data/lib/overcommit/hook/pre_commit/rails_schema_up_to_date.rb +45 -0
  49. data/lib/overcommit/hook/pre_commit/reek.rb +22 -0
  50. data/lib/overcommit/hook/pre_commit/rubocop.rb +19 -0
  51. data/lib/overcommit/hook/pre_commit/scss_lint.rb +19 -0
  52. data/lib/overcommit/hook/pre_commit/shell_check.rb +19 -0
  53. data/lib/overcommit/hook/pre_commit/trailing_whitespace.rb +13 -0
  54. data/lib/overcommit/hook/pre_commit/travis_lint.rb +11 -0
  55. data/lib/overcommit/hook/pre_commit/yaml_syntax.rb +22 -0
  56. data/lib/overcommit/hook_context.rb +17 -0
  57. data/lib/overcommit/hook_context/base.rb +69 -0
  58. data/lib/overcommit/hook_context/commit_msg.rb +32 -0
  59. data/lib/overcommit/hook_context/post_checkout.rb +26 -0
  60. data/lib/overcommit/hook_context/post_commit.rb +19 -0
  61. data/lib/overcommit/hook_context/pre_commit.rb +148 -0
  62. data/lib/overcommit/hook_context/run_all.rb +39 -0
  63. data/lib/overcommit/hook_loader/base.rb +36 -0
  64. data/lib/overcommit/hook_loader/built_in_hook_loader.rb +12 -0
  65. data/lib/overcommit/hook_loader/plugin_hook_loader.rb +61 -0
  66. data/lib/overcommit/hook_runner.rb +129 -0
  67. data/lib/overcommit/hook_signer.rb +79 -0
  68. data/lib/overcommit/installer.rb +148 -0
  69. data/lib/overcommit/interrupt_handler.rb +87 -0
  70. data/lib/overcommit/logger.rb +79 -0
  71. data/lib/overcommit/message_processor.rb +132 -0
  72. data/lib/overcommit/printer.rb +116 -0
  73. data/lib/overcommit/subprocess.rb +46 -0
  74. data/lib/overcommit/utils.rb +163 -0
  75. data/lib/overcommit/version.rb +4 -0
  76. data/libexec/gerrit-change-id +174 -0
  77. data/libexec/index-tags +17 -0
  78. data/template-dir/hooks/commit-msg +81 -0
  79. data/template-dir/hooks/overcommit-hook +81 -0
  80. data/template-dir/hooks/post-checkout +81 -0
  81. data/template-dir/hooks/pre-commit +81 -0
  82. metadata +184 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1fdbbf53711cd124c0d6dd824d12d0f0d7ee1e71
4
+ data.tar.gz: 4e2c9e69e2cd659ab1bee8a5b58fd7962e82a282
5
+ SHA512:
6
+ metadata.gz: 3f484a6d5dd6c97c8bae56ddd0eb2f0702895269f16bbc7eb16a49e2083922cdafaf0768c918a9d2f60d1d5ad55dcc41df8b8a3461915b3bd29beea8780726de
7
+ data.tar.gz: 2304de2cb69bbd8ade60137ec1e32119ed2250cc6e7be9e98b4f2e88705abd564b3e22b07e3e2d898cd4c6ab13ae3c84e29c2fd50b48b3671c522b205030d491
data/bin/overcommit ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'overcommit'
4
+ require 'overcommit/cli'
5
+
6
+ logger = Overcommit::Logger.new(STDOUT)
7
+
8
+ Overcommit::CLI.new(ARGV, logger).run
@@ -0,0 +1,275 @@
1
+ # Default configuration that all Overcommit configurations inherit from.
2
+ #
3
+ # This is an opinionated list of which hooks are valuable to run and what their
4
+ # out-of-the-box settings should be.
5
+
6
+ # Where to store hook plugins specific to a repository. These are loaded in
7
+ # addition to the default hooks Overcommit comes with. The location is relative
8
+ # to the root of the repository.
9
+ plugin_directory: '.git-hooks'
10
+
11
+ # Whether to check if a hook plugin has changed since Overcommit last ran it.
12
+ # This is a defense mechanism when working with repositories which can contain
13
+ # untrusted code (e.g. when you fetch a pull request from a third party).
14
+ # See https://github.com/causes/overcommit#security for more information.
15
+ verify_plugin_signatures: true
16
+
17
+ # Hooks that run after HEAD changes or a file is explicitly checked out. Useful
18
+ # for updating source tags (e.g. via ctags) or warning about new migrations,
19
+ # etc.
20
+ PostCheckout:
21
+ ALL:
22
+ required: false
23
+ quiet: false
24
+ IndexTags:
25
+ enabled: false
26
+ description: 'Generating tags file from source'
27
+
28
+ # Hooks that are run after `git commit` is executed, before the commit message
29
+ # editor is displayed. These hooks are ideal for syntax checkers, linters, and
30
+ # other checks that you want to run before you allow a commit object to be
31
+ # created.
32
+ PreCommit:
33
+ ALL:
34
+ problem_on_unmodified_line: warn
35
+ requires_files: true
36
+ required: false
37
+ quiet: false
38
+
39
+ AuthorEmail:
40
+ description: 'Checking author email'
41
+ requires_files: false
42
+ required: true
43
+ quiet: true
44
+ pattern: '^[^@]+@.*$'
45
+
46
+ AuthorName:
47
+ description: 'Checking for author name'
48
+ requires_files: false
49
+ required: true
50
+ quiet: true
51
+
52
+ BerksfileCheck:
53
+ description: 'Checking Berksfile lock'
54
+ required_executable: 'berks'
55
+ install_command: 'gem install berks'
56
+ include:
57
+ - 'Berksfile'
58
+ - 'Berksfile.lock'
59
+
60
+ Brakeman:
61
+ enabled: false
62
+ description: 'Checking for security vulnerabilities'
63
+ required_executable: 'brakeman'
64
+ install_command: 'gem install brakeman'
65
+ include:
66
+ - '**/*.rb'
67
+
68
+ BrokenSymlinks:
69
+ description: 'Checking for broken symlinks'
70
+ quiet: true
71
+
72
+ BundleCheck:
73
+ description: 'Checking Gemfile dependencies'
74
+ required_executable: 'bundle'
75
+ install_command: 'gem install bundler'
76
+ include:
77
+ - 'Gemfile'
78
+ - 'Gemfile.lock'
79
+ - '*.gemspec'
80
+
81
+ ChamberSecurity:
82
+ enabled: false
83
+ description: 'Checking that settings have been secured with Chamber'
84
+ required_executable: 'chamber'
85
+ install_command: 'gem install chamber'
86
+ include:
87
+ - 'config/settings.yml'
88
+ - 'config/settings/**/*.yml'
89
+
90
+ CoffeeLint:
91
+ description: 'Analyzing with coffeelint'
92
+ required_executable: 'coffeelint'
93
+ install_command: 'npm install -g coffeelint'
94
+ include: '**/*.coffee'
95
+
96
+ CssLint:
97
+ description: 'Analyzing with csslint'
98
+ required_executable: 'csslint'
99
+ install_command: 'npm install -g csslint'
100
+ include: '**/*.css'
101
+
102
+ GoLint:
103
+ description: 'Analyzing with golint'
104
+ required_executable: 'golint'
105
+ install_command: 'go get github.com/golang/lint/golint'
106
+ include: '**/*.go'
107
+
108
+ HamlLint:
109
+ description: 'Analyzing with haml-lint'
110
+ required_executable: 'haml-lint'
111
+ install_command: 'gem install haml-lint'
112
+ include: '**/*.haml'
113
+
114
+ HardTabs:
115
+ description: 'Checking for hard tabs'
116
+ quiet: true
117
+ exclude:
118
+ - '**/*.go'
119
+ - '**/Makefile'
120
+ - '.gitmodules'
121
+
122
+ ImageOptim:
123
+ description: 'Checking for optimizable images'
124
+ include:
125
+ - '**/*.gif'
126
+ - '**/*.jpg'
127
+ - '**/*.jpeg'
128
+ - '**/*.png'
129
+
130
+ Jscs:
131
+ description: 'Analyzing with JSCS'
132
+ required_executable: 'jscs'
133
+ install_command: 'npm install -g jscs'
134
+ include: '**/*.js'
135
+
136
+ Jsxcs:
137
+ description: 'Analyzing with JSXCS'
138
+ required_executable: 'jsxcs'
139
+ install_command: 'npm install -g jsxcs'
140
+ include: '**/*.jsx'
141
+
142
+ JsHint:
143
+ description: 'Analyzing with JSHint'
144
+ required_executable: 'jshint'
145
+ install_command: 'npm install -g jshint'
146
+ include: '**/*.js'
147
+
148
+ JsonSyntax:
149
+ description: 'Validating JSON syntax'
150
+ include: '**/*.json'
151
+
152
+ JsxHint:
153
+ description: 'Analyzing with JSXHint'
154
+ required_executable: 'jsxhint'
155
+ install_command: 'npm install -g jsxhint'
156
+ include: '**/*.jsx'
157
+
158
+ LocalPathsInGemfile:
159
+ description: 'Checking for local paths in Gemfile'
160
+ include: '**/Gemfile'
161
+
162
+ MergeConflicts:
163
+ description: 'Checking for merge conflicts'
164
+ quiet: true
165
+
166
+ PryBinding:
167
+ description: 'Checking for instances of binding.pry'
168
+ quiet: true
169
+ include:
170
+ - '**/*.rb'
171
+ - '**/*.rake'
172
+
173
+ PythonFlake8:
174
+ description: 'Analyzing with flake8'
175
+ required_executable: 'flake8'
176
+ install_command: 'pip install flake8'
177
+ include: '**/*.py'
178
+
179
+ RailsSchemaUpToDate:
180
+ description: 'Checking if database schema is up to date'
181
+ include:
182
+ - 'db/migrate/*.rb'
183
+ - 'db/schema.rb'
184
+ - 'db/structure.sql'
185
+
186
+ Reek:
187
+ enabled: false
188
+ description: 'Analyzing with Reek'
189
+ required_executable: 'reek'
190
+ install_command: 'gem install reek'
191
+ include:
192
+ - '**/*.gemspec'
193
+ - '**/*.rake'
194
+ - '**/*.rb'
195
+ - '**/Gemfile'
196
+ - '**/Rakefile'
197
+
198
+ Rubocop:
199
+ description: 'Analyzing with Rubocop'
200
+ required_executable: 'rubocop'
201
+ install_command: 'gem install rubocop'
202
+ include:
203
+ - '**/*.gemspec'
204
+ - '**/*.rake'
205
+ - '**/*.rb'
206
+ - '**/Gemfile'
207
+ - '**/Rakefile'
208
+
209
+ ScssLint:
210
+ description: 'Analyzing with scss-lint'
211
+ required_executable: 'scss-lint'
212
+ install_command: 'gem install scss-lint'
213
+ include: '**/*.scss'
214
+
215
+ ShellCheck:
216
+ description: 'Analyzing with ShellCheck'
217
+ required_executable: 'shellcheck'
218
+ include: '**/*.sh'
219
+
220
+ TrailingWhitespace:
221
+ description: 'Checking for trailing whitespace'
222
+ exclude:
223
+ - '**/db/structure.sql'
224
+
225
+ TravisLint:
226
+ description: 'Checking Travis CI configuration'
227
+ required_executable: 'travis'
228
+ install_command: 'gem install travis'
229
+ include: '.travis.yml'
230
+
231
+ YamlSyntax:
232
+ description: 'Checking YAML syntax'
233
+ include: '**/*.yml'
234
+
235
+ # Hooks that are run against every commit message after a user has written it.
236
+ # These hooks are useful for enforcing policies on commit messages written for a
237
+ # project.
238
+ CommitMsg:
239
+ ALL:
240
+ requires_files: false
241
+ quiet: false
242
+
243
+ GerritChangeId:
244
+ enabled: false
245
+ description: 'Ensuring Gerrit Change-Id is present'
246
+ required: true
247
+
248
+ HardTabs:
249
+ description: 'Checking for hard tabs'
250
+
251
+ RussianNovel:
252
+ description: 'Checking length of commit message'
253
+ quiet: true
254
+
255
+ SingleLineSubject:
256
+ description: 'Checking subject line'
257
+
258
+ TextWidth:
259
+ description: 'Checking text width'
260
+ max_subject_width: 60
261
+ max_body_width: 72
262
+
263
+ TrailingPeriod:
264
+ description: 'Checking for trailing periods in subject'
265
+
266
+ PostCommit:
267
+ ALL:
268
+ requires_files: false
269
+ required: false
270
+ quiet: false
271
+
272
+ GitGuilt:
273
+ description: 'Calculating changes in blame since last commit'
274
+ required_executable: 'git-guilt'
275
+ install_command: 'npm install -g git-guilt'
@@ -0,0 +1,31 @@
1
+ # Use this file to configure the Overcommit hooks you wish to use. This will
2
+ # extend the default configuration defined in:
3
+ # https://github.com/causes/overcommit/blob/master/config/default.yml
4
+ #
5
+ # At the topmost level of this YAML file is a key representing type of hook
6
+ # being run (e.g. pre-commit, commit-msg, etc.). Within each type you can
7
+ # customize each hook, such as whether to only run it on certain files (via
8
+ # `include`), whether to only display output if it fails (via `quiet`), etc.
9
+ #
10
+ # For a complete list of hooks, see:
11
+ # https://github.com/causes/overcommit/tree/master/lib/overcommit/hook
12
+ #
13
+ # For a complete list of options that you can use to customize hooks, see:
14
+ # https://github.com/causes/overcommit#configuration
15
+ #
16
+ # Uncomment the following lines to make the configuration take effect.
17
+
18
+ #PreCommit:
19
+ # Rubocop:
20
+ # on_warn: fail # Treat all warnings as failures
21
+ #
22
+ # TrailingWhitespace:
23
+ # exclude:
24
+ # - '**/db/structure.sql' # Ignore trailing whitespace in generated files
25
+ #
26
+ #PostCheckout:
27
+ # ALL: # Special hook name that customizes all hooks of this type
28
+ # quiet: true # Change all post-checkout hooks to only display output on failure
29
+ #
30
+ # IndexTags:
31
+ # enabled: true # Generate a tags file with `ctags` each time HEAD changes
data/lib/overcommit.rb ADDED
@@ -0,0 +1,20 @@
1
+ require 'overcommit/constants'
2
+ require 'overcommit/exceptions'
3
+ require 'overcommit/configuration_validator'
4
+ require 'overcommit/configuration'
5
+ require 'overcommit/configuration_loader'
6
+ require 'overcommit/hook/base'
7
+ require 'overcommit/hook_context/base'
8
+ require 'overcommit/hook_context'
9
+ require 'overcommit/git_repo'
10
+ require 'overcommit/hook_signer'
11
+ require 'overcommit/hook_loader/base'
12
+ require 'overcommit/hook_loader/built_in_hook_loader'
13
+ require 'overcommit/hook_loader/plugin_hook_loader'
14
+ require 'overcommit/interrupt_handler'
15
+ require 'overcommit/printer'
16
+ require 'overcommit/hook_runner'
17
+ require 'overcommit/installer'
18
+ require 'overcommit/logger'
19
+ require 'overcommit/utils'
20
+ require 'overcommit/version'
@@ -0,0 +1,205 @@
1
+ require 'optparse'
2
+
3
+ module Overcommit
4
+ # Responsible for parsing command-line options and executing appropriate
5
+ # application logic based on those options.
6
+ class CLI # rubocop:disable ClassLength
7
+ def initialize(arguments, logger)
8
+ @arguments = arguments
9
+ @log = logger
10
+ @options = {}
11
+ end
12
+
13
+ def run
14
+ parse_arguments
15
+
16
+ case @options[:action]
17
+ when :install, :uninstall
18
+ install_or_uninstall
19
+ when :template_dir
20
+ print_template_directory_path
21
+ when :sign_plugins
22
+ sign_plugins
23
+ when :run_all
24
+ run_all
25
+ end
26
+ rescue Overcommit::Exceptions::HookContextLoadError => ex
27
+ puts ex
28
+ exit 64 # EX_USAGE
29
+ end
30
+
31
+ private
32
+
33
+ attr_reader :log
34
+
35
+ def parse_arguments
36
+ @parser = create_option_parser
37
+
38
+ begin
39
+ @parser.parse!(@arguments)
40
+
41
+ # Default action is to install
42
+ @options[:action] ||= :install
43
+
44
+ # Unconsumed arguments are our targets
45
+ @options[:targets] = @arguments
46
+ rescue OptionParser::InvalidOption => ex
47
+ print_help @parser.help, ex
48
+ end
49
+ end
50
+
51
+ def create_option_parser
52
+ OptionParser.new do |opts|
53
+ opts.banner = "Usage: #{opts.program_name} [options] [target-repo]"
54
+
55
+ add_information_options(opts)
56
+ add_installation_options(opts)
57
+ add_other_options(opts)
58
+ end
59
+ end
60
+
61
+ def add_information_options(opts)
62
+ opts.on_tail('-h', '--help', 'Show this message') do
63
+ print_help opts.help
64
+ end
65
+
66
+ opts.on_tail('-v', '--version', 'Show version') do
67
+ print_version(opts.program_name)
68
+ end
69
+
70
+ opts.on_tail('-l', '--list-hooks', 'List installed hooks') do
71
+ print_installed_hooks
72
+ end
73
+ end
74
+
75
+ def add_installation_options(opts)
76
+ opts.on('-u', '--uninstall', 'Remove Overcommit hooks from a repository') do
77
+ @options[:action] = :uninstall
78
+ end
79
+
80
+ opts.on('-i', '--install', 'Install Overcommit hooks in a repository') do
81
+ @options[:action] = :install
82
+ end
83
+
84
+ opts.on('-f', '--force', 'Overwrite any previously installed hooks') do
85
+ @options[:force] = true
86
+ end
87
+
88
+ opts.on('-r', '--run', 'Run pre-commit hook against all git tracked files') do
89
+ @options[:action] = :run_all
90
+ end
91
+ end
92
+
93
+ def add_other_options(opts)
94
+ opts.on('-s', '--sign hook', 'Update plugin signatures for hook', String) do |hook|
95
+ @options[:action] = :sign_plugins
96
+ @options[:hook_to_sign] = hook
97
+ end
98
+
99
+ opts.on('-t', '--template-dir', 'Print location of template directory') do
100
+ @options[:action] = :template_dir
101
+ end
102
+ end
103
+
104
+ def install_or_uninstall
105
+ if Array(@options[:targets]).empty?
106
+ @options[:targets] = [Overcommit::Utils.repo_root].compact
107
+ end
108
+
109
+ if @options[:targets].empty?
110
+ log.warning 'You are not in a git repository.'
111
+ log.log 'You must either specify the path to a repository or ' \
112
+ 'change your current directory to a repository.'
113
+ halt 64 # EX_USAGE
114
+ end
115
+
116
+ @options[:targets].each do |target|
117
+ begin
118
+ Installer.new(log).run(target, @options)
119
+ rescue Overcommit::Exceptions::InvalidGitRepo => error
120
+ log.warning "Invalid repo #{target}: #{error}"
121
+ halt 69 # EX_UNAVAILABLE
122
+ rescue Overcommit::Exceptions::PreExistingHooks => error
123
+ log.warning "Unable to install into #{target}: #{error}"
124
+ halt 73 # EX_CANTCREAT
125
+ end
126
+ end
127
+ end
128
+
129
+ def print_template_directory_path
130
+ puts File.join(OVERCOMMIT_HOME, 'template-dir')
131
+ halt
132
+ end
133
+
134
+ def print_help(message, error = nil)
135
+ log.error "#{error}\n" if error
136
+ log.log message
137
+ halt(error ? 64 : 0) # 64 = EX_USAGE
138
+ end
139
+
140
+ def print_version(program_name)
141
+ log.log "#{program_name} #{Overcommit::VERSION}"
142
+ halt
143
+ end
144
+
145
+ # Prints the hooks available in the current repo and whether they're
146
+ # enabled/disabled.
147
+ def print_installed_hooks
148
+ config = Overcommit::ConfigurationLoader.load_repo_config
149
+
150
+ config.all_hook_configs.each do |hook_type, hook_configs|
151
+ print_hooks_for_hook_type(config, hook_configs, hook_type)
152
+ end
153
+
154
+ halt
155
+ end
156
+
157
+ def print_hooks_for_hook_type(repo_config, hook_configs, hook_type)
158
+ log.log "#{hook_type}:"
159
+ hook_configs.each do |hook_name, config|
160
+ log.partial " #{hook_name}: "
161
+
162
+ if config['enabled']
163
+ log.success('enabled', true)
164
+ else
165
+ log.error('disabled', true)
166
+ end
167
+
168
+ if repo_config.plugin_hook?(hook_type, hook_name)
169
+ log.warning(' (plugin)')
170
+ else
171
+ log.newline
172
+ end
173
+ end
174
+ end
175
+
176
+ def sign_plugins
177
+ config = Overcommit::ConfigurationLoader.load_repo_config
178
+ context = Overcommit::HookContext.create(@options[:hook_to_sign],
179
+ config,
180
+ @arguments)
181
+ Overcommit::HookLoader::PluginHookLoader.new(config,
182
+ context,
183
+ log).update_signatures
184
+ halt
185
+ end
186
+
187
+ def run_all
188
+ config = Overcommit::ConfigurationLoader.load_repo_config
189
+ context = Overcommit::HookContext.create('run-all', config, @arguments)
190
+ config.apply_environment!(context, ENV)
191
+
192
+ printer = Overcommit::Printer.new(log, context)
193
+ runner = Overcommit::HookRunner.new(config, log, context, printer)
194
+
195
+ status = runner.run
196
+
197
+ halt(status ? 0 : 65)
198
+ end
199
+
200
+ # Used for ease of stubbing in tests
201
+ def halt(status = 0)
202
+ exit status
203
+ end
204
+ end
205
+ end