overcommit 0.24.0 → 0.25.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.
- checksums.yaml +4 -4
- data/config/default.yml +45 -8
- data/lib/overcommit/git_repo.rb +16 -5
- data/lib/overcommit/git_version.rb +1 -1
- data/lib/overcommit/hook/commit_msg/base.rb +3 -2
- data/lib/overcommit/hook/commit_msg/capitalized_subject.rb +2 -0
- data/lib/overcommit/hook/commit_msg/hard_tabs.rb +2 -0
- data/lib/overcommit/hook/commit_msg/single_line_subject.rb +2 -0
- data/lib/overcommit/hook/commit_msg/text_width.rb +2 -0
- data/lib/overcommit/hook/commit_msg/trailing_period.rb +2 -0
- data/lib/overcommit/hook/post_checkout/index_tags.rb +3 -4
- data/lib/overcommit/hook/post_checkout/submodule_status.rb +3 -23
- data/lib/overcommit/hook/post_commit/index_tags.rb +3 -4
- data/lib/overcommit/hook/post_commit/submodule_status.rb +3 -23
- data/lib/overcommit/hook/post_merge/index_tags.rb +3 -4
- data/lib/overcommit/hook/post_merge/submodule_status.rb +3 -23
- data/lib/overcommit/hook/post_rewrite/index_tags.rb +5 -2
- data/lib/overcommit/hook/post_rewrite/submodule_status.rb +3 -23
- data/lib/overcommit/hook/pre_commit/author_name.rb +2 -2
- data/lib/overcommit/hook/pre_commit/base.rb +1 -1
- data/lib/overcommit/hook/pre_commit/hard_tabs.rb +4 -5
- data/lib/overcommit/hook/pre_commit/{rubocop.rb → rubo_cop.rb} +1 -1
- data/lib/overcommit/hook/pre_commit/scalariform.rb +18 -0
- data/lib/overcommit/hook/pre_commit/slim_lint.rb +19 -0
- data/lib/overcommit/hook/pre_commit/trailing_whitespace.rb +4 -4
- data/lib/overcommit/hook/pre_commit/vint.rb +18 -0
- data/lib/overcommit/hook/pre_rebase/merged_commits.rb +29 -0
- data/lib/overcommit/hook/shared/index_tags.rb +10 -0
- data/lib/overcommit/hook/shared/submodule_status.rb +30 -0
- data/lib/overcommit/hook_context/base.rb +19 -5
- data/lib/overcommit/hook_context/commit_msg.rb +4 -0
- data/lib/overcommit/hook_context/pre_commit.rb +8 -1
- data/lib/overcommit/hook_context/run_all.rb +2 -3
- data/lib/overcommit/installer.rb +2 -2
- data/lib/overcommit/interrupt_handler.rb +6 -4
- data/lib/overcommit/logger.rb +1 -1
- data/lib/overcommit/utils.rb +1 -0
- data/lib/overcommit/version.rb +1 -1
- metadata +10 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: bbe6329a0cba58948e9ee76c415c994a7853076e
|
|
4
|
+
data.tar.gz: 8ccb39fc02ed962de60f1dd89398ed77e6c63187
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8239e6a77a599153d4f6d30a23b329f7aa6d2c6b46ed001ce9dc1b0f4a3014b17fa65de8f8b004956271d989eb9a200dee2ee67ebb782e1bfa82b60fa2623744
|
|
7
|
+
data.tar.gz: 2e569ffcb8e328e0033913866e12230674b6ff42df2c955df0d0e87b0bdaa03fc0e628628bae01b42e68ba471d5cdb3b1ff26862c9baffc0916f3e9d550b7ab4
|
data/config/default.yml
CHANGED
|
@@ -204,9 +204,10 @@ PreCommit:
|
|
|
204
204
|
install_command: 'gem install image_optim'
|
|
205
205
|
include:
|
|
206
206
|
- '**/*.gif'
|
|
207
|
-
- '**/*.jpg'
|
|
208
207
|
- '**/*.jpeg'
|
|
208
|
+
- '**/*.jpg'
|
|
209
209
|
- '**/*.png'
|
|
210
|
+
- '**/*.svg'
|
|
210
211
|
|
|
211
212
|
JavaCheckstyle:
|
|
212
213
|
enabled: false
|
|
@@ -257,7 +258,7 @@ PreCommit:
|
|
|
257
258
|
enabled: false
|
|
258
259
|
description: 'Checking for local paths in Gemfile'
|
|
259
260
|
required_executable: 'grep'
|
|
260
|
-
flags: ['-IHnE',
|
|
261
|
+
flags: ['-IHnE', "^[^#]*((\\bpath:)|(:path[ \t]*=>))"]
|
|
261
262
|
include: '**/Gemfile'
|
|
262
263
|
|
|
263
264
|
MergeConflicts:
|
|
@@ -265,7 +266,7 @@ PreCommit:
|
|
|
265
266
|
description: 'Checking for merge conflicts'
|
|
266
267
|
quiet: true
|
|
267
268
|
required_executable: 'grep'
|
|
268
|
-
flags: ['-IHn',
|
|
269
|
+
flags: ['-IHn', "^<<<<<<<[ \t]"]
|
|
269
270
|
|
|
270
271
|
Pep257:
|
|
271
272
|
enabled: false
|
|
@@ -327,9 +328,9 @@ PreCommit:
|
|
|
327
328
|
- '**/Gemfile'
|
|
328
329
|
- '**/Rakefile'
|
|
329
330
|
|
|
330
|
-
|
|
331
|
+
RuboCop:
|
|
331
332
|
enabled: false
|
|
332
|
-
description: 'Analyzing with
|
|
333
|
+
description: 'Analyzing with RuboCop'
|
|
333
334
|
required_executable: 'rubocop'
|
|
334
335
|
flags: ['--format=emacs', '--force-exclusion', '--display-cop-names']
|
|
335
336
|
install_command: 'gem install rubocop'
|
|
@@ -350,6 +351,13 @@ PreCommit:
|
|
|
350
351
|
- '**/*.gemspec'
|
|
351
352
|
- '**/*.rb'
|
|
352
353
|
|
|
354
|
+
Scalariform:
|
|
355
|
+
enabled: false
|
|
356
|
+
description: 'Checking formatting with Scalariform'
|
|
357
|
+
required_executable: 'scalariform'
|
|
358
|
+
flags: ['--test']
|
|
359
|
+
include: '**/*.scala'
|
|
360
|
+
|
|
353
361
|
Scalastyle:
|
|
354
362
|
enabled: false
|
|
355
363
|
description: 'Analyzing with Scalastyle'
|
|
@@ -378,6 +386,13 @@ PreCommit:
|
|
|
378
386
|
flags: ['--format=gcc']
|
|
379
387
|
include: '**/*.sh'
|
|
380
388
|
|
|
389
|
+
SlimLint:
|
|
390
|
+
enabled: false
|
|
391
|
+
description: 'Analyzing with slim-lint'
|
|
392
|
+
required_executable: 'slim-lint'
|
|
393
|
+
install_command: 'gem install slim_lint'
|
|
394
|
+
include: '**/*.slim'
|
|
395
|
+
|
|
381
396
|
Standard:
|
|
382
397
|
enabled: false
|
|
383
398
|
description: 'Analyzing with standard'
|
|
@@ -390,7 +405,7 @@ PreCommit:
|
|
|
390
405
|
enabled: false
|
|
391
406
|
description: 'Checking for trailing whitespace'
|
|
392
407
|
required_executable: 'grep'
|
|
393
|
-
flags: ['-IHn',
|
|
408
|
+
flags: ['-IHn', "[ \t]$"]
|
|
394
409
|
|
|
395
410
|
TravisLint:
|
|
396
411
|
enabled: false
|
|
@@ -400,6 +415,15 @@ PreCommit:
|
|
|
400
415
|
install_command: 'gem install travis'
|
|
401
416
|
include: '.travis.yml'
|
|
402
417
|
|
|
418
|
+
Vint:
|
|
419
|
+
enabled: false
|
|
420
|
+
description: 'Analyzing with Vint'
|
|
421
|
+
required_executable: 'vint'
|
|
422
|
+
install_command: 'pip install vim-vint'
|
|
423
|
+
include:
|
|
424
|
+
- '**/*.vim'
|
|
425
|
+
- '**/*.vimrc'
|
|
426
|
+
|
|
403
427
|
W3cCss:
|
|
404
428
|
enabled: false
|
|
405
429
|
description: 'Analyzing with W3C CSS validation service'
|
|
@@ -428,13 +452,17 @@ PreCommit:
|
|
|
428
452
|
description: 'Analyzing with xmllint'
|
|
429
453
|
required_executable: 'xmllint'
|
|
430
454
|
flags: ['--noout']
|
|
431
|
-
include:
|
|
455
|
+
include:
|
|
456
|
+
- '**/*.xml'
|
|
457
|
+
- '**/*.svg'
|
|
432
458
|
|
|
433
459
|
XmlSyntax:
|
|
434
460
|
enabled: false
|
|
435
461
|
description: 'Checking XML syntax'
|
|
436
462
|
required_library: 'rexml/document'
|
|
437
|
-
include:
|
|
463
|
+
include:
|
|
464
|
+
- '**/*.xml'
|
|
465
|
+
- '**/*.svg'
|
|
438
466
|
|
|
439
467
|
YamlSyntax:
|
|
440
468
|
enabled: false
|
|
@@ -453,6 +481,7 @@ PostCheckout:
|
|
|
453
481
|
IndexTags:
|
|
454
482
|
enabled: false
|
|
455
483
|
description: 'Generating tags file from source'
|
|
484
|
+
quiet: true
|
|
456
485
|
required_executable: 'ctags'
|
|
457
486
|
|
|
458
487
|
SubmoduleStatus:
|
|
@@ -479,6 +508,7 @@ PostCommit:
|
|
|
479
508
|
IndexTags:
|
|
480
509
|
enabled: false
|
|
481
510
|
description: 'Generating tags file from source'
|
|
511
|
+
quiet: true
|
|
482
512
|
required_executable: 'ctags'
|
|
483
513
|
|
|
484
514
|
SubmoduleStatus:
|
|
@@ -496,6 +526,7 @@ PostMerge:
|
|
|
496
526
|
IndexTags:
|
|
497
527
|
enabled: false
|
|
498
528
|
description: 'Generating tags file from source'
|
|
529
|
+
quiet: true
|
|
499
530
|
required_executable: 'ctags'
|
|
500
531
|
|
|
501
532
|
SubmoduleStatus:
|
|
@@ -513,6 +544,7 @@ PostRewrite:
|
|
|
513
544
|
IndexTags:
|
|
514
545
|
enabled: false
|
|
515
546
|
description: 'Generating tags file from source'
|
|
547
|
+
quiet: true
|
|
516
548
|
required_executable: 'ctags'
|
|
517
549
|
|
|
518
550
|
SubmoduleStatus:
|
|
@@ -546,3 +578,8 @@ PreRebase:
|
|
|
546
578
|
requires_files: false
|
|
547
579
|
required: false
|
|
548
580
|
quiet: false
|
|
581
|
+
|
|
582
|
+
MergedCommits:
|
|
583
|
+
enabled: false
|
|
584
|
+
description: 'Checking for commits that have already been merged'
|
|
585
|
+
branches: ['master']
|
data/lib/overcommit/git_repo.rb
CHANGED
|
@@ -69,7 +69,7 @@ module Overcommit
|
|
|
69
69
|
refs = options[:refs]
|
|
70
70
|
subcmd = options[:subcmd] || 'diff'
|
|
71
71
|
|
|
72
|
-
`git #{subcmd} --no-ext-diff -U0 #{flags} #{refs} --
|
|
72
|
+
`git #{subcmd} --no-ext-diff -U0 #{flags} #{refs} -- "#{file_path}"`.
|
|
73
73
|
scan(DIFF_HUNK_REGEX) do |start_line, lines_added|
|
|
74
74
|
lines_added = (lines_added || 1).to_i # When blank, one line was added
|
|
75
75
|
cur_line = start_line.to_i
|
|
@@ -134,7 +134,7 @@ module Overcommit
|
|
|
134
134
|
#
|
|
135
135
|
# Restored via [#restore_merge_state].
|
|
136
136
|
def store_merge_state
|
|
137
|
-
merge_head = `git rev-parse MERGE_HEAD 2>
|
|
137
|
+
merge_head = `git rev-parse MERGE_HEAD 2> #{File::NULL}`.chomp
|
|
138
138
|
|
|
139
139
|
# Store the merge state if we're in the middle of resolving a merge
|
|
140
140
|
# conflict. This is necessary since stashing removes the merge state.
|
|
@@ -151,7 +151,7 @@ module Overcommit
|
|
|
151
151
|
#
|
|
152
152
|
# Restored via [#restore_cherry_pick_state].
|
|
153
153
|
def store_cherry_pick_state
|
|
154
|
-
cherry_head = `git rev-parse CHERRY_PICK_HEAD 2>
|
|
154
|
+
cherry_head = `git rev-parse CHERRY_PICK_HEAD 2> #{File::NULL}`.chomp
|
|
155
155
|
|
|
156
156
|
# Store the merge state if we're in the middle of resolving a merge
|
|
157
157
|
# conflict. This is necessary since stashing removes the merge state.
|
|
@@ -167,7 +167,7 @@ module Overcommit
|
|
|
167
167
|
FileUtils.touch(File.expand_path('MERGE_MODE', Overcommit::Utils.git_dir))
|
|
168
168
|
|
|
169
169
|
File.open(File.expand_path('MERGE_HEAD', Overcommit::Utils.git_dir), 'w') do |f|
|
|
170
|
-
f.write(
|
|
170
|
+
f.write(@merge_head)
|
|
171
171
|
end
|
|
172
172
|
@merge_head = nil
|
|
173
173
|
end
|
|
@@ -186,7 +186,7 @@ module Overcommit
|
|
|
186
186
|
if @cherry_head
|
|
187
187
|
File.open(File.expand_path('CHERRY_PICK_HEAD',
|
|
188
188
|
Overcommit::Utils.git_dir), 'w') do |f|
|
|
189
|
-
f.write(
|
|
189
|
+
f.write(@cherry_head)
|
|
190
190
|
end
|
|
191
191
|
@cherry_head = nil
|
|
192
192
|
end
|
|
@@ -248,5 +248,16 @@ module Overcommit
|
|
|
248
248
|
raise Overcommit::Exceptions::GitSubmoduleError,
|
|
249
249
|
"Unable to read submodule information from #{ref}:.gitmodules file: #{ex.message}"
|
|
250
250
|
end
|
|
251
|
+
|
|
252
|
+
# Returns the names of all branches containing the given commit.
|
|
253
|
+
#
|
|
254
|
+
# @param commit_ref [String] git tree ref that resolves to a commit
|
|
255
|
+
# @return [Array<String>] list of branches containing the given commit
|
|
256
|
+
def branches_containing_commit(commit_ref)
|
|
257
|
+
`git branch --column=dense --contains #{commit_ref}`.
|
|
258
|
+
sub(/\((HEAD )?detached (from|at) .*?\)/, ''). # ignore detached HEAD
|
|
259
|
+
split(/\s+/).
|
|
260
|
+
reject { |s| s.empty? || s == '*' }
|
|
261
|
+
end
|
|
251
262
|
end
|
|
252
263
|
end
|
|
@@ -5,7 +5,8 @@ module Overcommit::Hook::CommitMsg
|
|
|
5
5
|
class Base < Overcommit::Hook::Base
|
|
6
6
|
extend Forwardable
|
|
7
7
|
|
|
8
|
-
def_delegators :@context, :
|
|
9
|
-
:
|
|
8
|
+
def_delegators :@context, :empty_message?, :commit_message,
|
|
9
|
+
:update_commit_message, :commit_message_lines,
|
|
10
|
+
:commit_message_file
|
|
10
11
|
end
|
|
11
12
|
end
|
|
@@ -2,6 +2,8 @@ module Overcommit::Hook::CommitMsg
|
|
|
2
2
|
# Ensures commit message subject lines start with a capital letter.
|
|
3
3
|
class CapitalizedSubject < Base
|
|
4
4
|
def run
|
|
5
|
+
return :pass if empty_message?
|
|
6
|
+
|
|
5
7
|
first_letter = commit_message_lines[0].to_s.match(/^[[:punct:]]*(.)/)[1]
|
|
6
8
|
unless first_letter.match(/[[:upper:]]/)
|
|
7
9
|
return :warn, 'Subject should start with a capital letter'
|
|
@@ -2,6 +2,8 @@ module Overcommit::Hook::CommitMsg
|
|
|
2
2
|
# Checks for hard tabs in commit messages.
|
|
3
3
|
class HardTabs < Base
|
|
4
4
|
def run
|
|
5
|
+
return :pass if empty_message?
|
|
6
|
+
|
|
5
7
|
# Catches hard tabs entered by the user (not auto-generated)
|
|
6
8
|
if commit_message.index(/\t/)
|
|
7
9
|
return :warn, "Don't use hard tabs in commit messages"
|
|
@@ -2,6 +2,8 @@ module Overcommit::Hook::CommitMsg
|
|
|
2
2
|
# Ensures commit message subject lines are followed by a blank line.
|
|
3
3
|
class SingleLineSubject < Base
|
|
4
4
|
def run
|
|
5
|
+
return :pass if empty_message?
|
|
6
|
+
|
|
5
7
|
unless commit_message_lines[1].to_s.strip.empty?
|
|
6
8
|
return :warn, 'Subject should be one line and followed by a blank line'
|
|
7
9
|
end
|
|
@@ -2,6 +2,8 @@ module Overcommit::Hook::CommitMsg
|
|
|
2
2
|
# Ensures commit message subject lines do not have a trailing period
|
|
3
3
|
class TrailingPeriod < Base
|
|
4
4
|
def run
|
|
5
|
+
return :pass if empty_message?
|
|
6
|
+
|
|
5
7
|
if commit_message_lines.first.rstrip.end_with?('.')
|
|
6
8
|
return :warn, 'Please omit trailing period from commit message subject'
|
|
7
9
|
end
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
+
require 'overcommit/hook/shared/index_tags'
|
|
2
|
+
|
|
1
3
|
module Overcommit::Hook::PostCheckout
|
|
2
4
|
# Updates ctags index for all source code in the repository.
|
|
3
5
|
class IndexTags < Base
|
|
4
|
-
|
|
5
|
-
execute_in_background([Overcommit::Utils.script_path('index-tags')])
|
|
6
|
-
:pass
|
|
7
|
-
end
|
|
6
|
+
include Overcommit::Hook::Shared::IndexTags
|
|
8
7
|
end
|
|
9
8
|
end
|
|
@@ -1,30 +1,10 @@
|
|
|
1
|
+
require 'overcommit/hook/shared/submodule_status'
|
|
2
|
+
|
|
1
3
|
module Overcommit::Hook::PostCheckout
|
|
2
4
|
# Checks the status of submodules in the current repository and
|
|
3
5
|
# notifies the user if any are uninitialized, out of date with
|
|
4
6
|
# the current index, or contain merge conflicts.
|
|
5
7
|
class SubmoduleStatus < Base
|
|
6
|
-
|
|
7
|
-
messages = []
|
|
8
|
-
submodule_statuses.each do |submodule_status|
|
|
9
|
-
path = submodule_status.path
|
|
10
|
-
if submodule_status.uninitialized?
|
|
11
|
-
messages << "Submodule #{path} is uninitialized."
|
|
12
|
-
elsif submodule_status.outdated?
|
|
13
|
-
messages << "Submodule #{path} is out of date with the current index."
|
|
14
|
-
elsif submodule_status.merge_conflict?
|
|
15
|
-
messages << "Submodule #{path} has merge conflicts."
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
return :pass if messages.empty?
|
|
20
|
-
|
|
21
|
-
[:warn, messages.join("\n")]
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
private
|
|
25
|
-
|
|
26
|
-
def submodule_statuses
|
|
27
|
-
Overcommit::GitRepo.submodule_statuses(recursive: config['recursive'])
|
|
28
|
-
end
|
|
8
|
+
include Overcommit::Hook::Shared::SubmoduleStatus
|
|
29
9
|
end
|
|
30
10
|
end
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
+
require 'overcommit/hook/shared/index_tags'
|
|
2
|
+
|
|
1
3
|
module Overcommit::Hook::PostCommit
|
|
2
4
|
# Updates ctags index for all source code in the repository.
|
|
3
5
|
class IndexTags < Base
|
|
4
|
-
|
|
5
|
-
execute_in_background([Overcommit::Utils.script_path('index-tags')])
|
|
6
|
-
:pass
|
|
7
|
-
end
|
|
6
|
+
include Overcommit::Hook::Shared::IndexTags
|
|
8
7
|
end
|
|
9
8
|
end
|
|
@@ -1,30 +1,10 @@
|
|
|
1
|
+
require 'overcommit/hook/shared/submodule_status'
|
|
2
|
+
|
|
1
3
|
module Overcommit::Hook::PostCommit
|
|
2
4
|
# Checks the status of submodules in the current repository and
|
|
3
5
|
# notifies the user if any are uninitialized, out of date with
|
|
4
6
|
# the current index, or contain merge conflicts.
|
|
5
7
|
class SubmoduleStatus < Base
|
|
6
|
-
|
|
7
|
-
messages = []
|
|
8
|
-
submodule_statuses.each do |submodule_status|
|
|
9
|
-
path = submodule_status.path
|
|
10
|
-
if submodule_status.uninitialized?
|
|
11
|
-
messages << "Submodule #{path} is uninitialized."
|
|
12
|
-
elsif submodule_status.outdated?
|
|
13
|
-
messages << "Submodule #{path} is out of date with the current index."
|
|
14
|
-
elsif submodule_status.merge_conflict?
|
|
15
|
-
messages << "Submodule #{path} has merge conflicts."
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
return :pass if messages.empty?
|
|
20
|
-
|
|
21
|
-
[:warn, messages.join("\n")]
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
private
|
|
25
|
-
|
|
26
|
-
def submodule_statuses
|
|
27
|
-
Overcommit::GitRepo.submodule_statuses(recursive: config['recursive'])
|
|
28
|
-
end
|
|
8
|
+
include Overcommit::Hook::Shared::SubmoduleStatus
|
|
29
9
|
end
|
|
30
10
|
end
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
+
require 'overcommit/hook/shared/index_tags'
|
|
2
|
+
|
|
1
3
|
module Overcommit::Hook::PostMerge
|
|
2
4
|
# Updates ctags index for all source code in the repository.
|
|
3
5
|
class IndexTags < Base
|
|
4
|
-
|
|
5
|
-
execute_in_background([Overcommit::Utils.script_path('index-tags')])
|
|
6
|
-
:pass
|
|
7
|
-
end
|
|
6
|
+
include Overcommit::Hook::Shared::IndexTags
|
|
8
7
|
end
|
|
9
8
|
end
|
|
@@ -1,30 +1,10 @@
|
|
|
1
|
+
require 'overcommit/hook/shared/submodule_status'
|
|
2
|
+
|
|
1
3
|
module Overcommit::Hook::PostMerge
|
|
2
4
|
# Checks the status of submodules in the current repository and
|
|
3
5
|
# notifies the user if any are uninitialized, out of date with
|
|
4
6
|
# the current index, or contain merge conflicts.
|
|
5
7
|
class SubmoduleStatus < Base
|
|
6
|
-
|
|
7
|
-
messages = []
|
|
8
|
-
submodule_statuses.each do |submodule_status|
|
|
9
|
-
path = submodule_status.path
|
|
10
|
-
if submodule_status.uninitialized?
|
|
11
|
-
messages << "Submodule #{path} is uninitialized."
|
|
12
|
-
elsif submodule_status.outdated?
|
|
13
|
-
messages << "Submodule #{path} is out of date with the current index."
|
|
14
|
-
elsif submodule_status.merge_conflict?
|
|
15
|
-
messages << "Submodule #{path} has merge conflicts."
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
return :pass if messages.empty?
|
|
20
|
-
|
|
21
|
-
[:warn, messages.join("\n")]
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
private
|
|
25
|
-
|
|
26
|
-
def submodule_statuses
|
|
27
|
-
Overcommit::GitRepo.submodule_statuses(recursive: config['recursive'])
|
|
28
|
-
end
|
|
8
|
+
include Overcommit::Hook::Shared::SubmoduleStatus
|
|
29
9
|
end
|
|
30
10
|
end
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
+
require 'overcommit/hook/shared/index_tags'
|
|
2
|
+
|
|
1
3
|
module Overcommit::Hook::PostRewrite
|
|
2
4
|
# Updates ctags index for all source code in the repository.
|
|
3
5
|
class IndexTags < Base
|
|
6
|
+
include Overcommit::Hook::Shared::IndexTags
|
|
7
|
+
|
|
4
8
|
def run
|
|
5
9
|
# Ignore unless this is a rebase (amends are covered by post-commit hook)
|
|
6
10
|
return :pass unless rebase?
|
|
7
11
|
|
|
8
|
-
|
|
9
|
-
:pass
|
|
12
|
+
super
|
|
10
13
|
end
|
|
11
14
|
end
|
|
12
15
|
end
|
|
@@ -1,30 +1,10 @@
|
|
|
1
|
+
require 'overcommit/hook/shared/submodule_status'
|
|
2
|
+
|
|
1
3
|
module Overcommit::Hook::PostRewrite
|
|
2
4
|
# Checks the status of submodules in the current repository and
|
|
3
5
|
# notifies the user if any are uninitialized, out of date with
|
|
4
6
|
# the current index, or contain merge conflicts.
|
|
5
7
|
class SubmoduleStatus < Base
|
|
6
|
-
|
|
7
|
-
messages = []
|
|
8
|
-
submodule_statuses.each do |submodule_status|
|
|
9
|
-
path = submodule_status.path
|
|
10
|
-
if submodule_status.uninitialized?
|
|
11
|
-
messages << "Submodule #{path} is uninitialized."
|
|
12
|
-
elsif submodule_status.outdated?
|
|
13
|
-
messages << "Submodule #{path} is out of date with the current index."
|
|
14
|
-
elsif submodule_status.merge_conflict?
|
|
15
|
-
messages << "Submodule #{path} has merge conflicts."
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
return :pass if messages.empty?
|
|
20
|
-
|
|
21
|
-
[:warn, messages.join("\n")]
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
private
|
|
25
|
-
|
|
26
|
-
def submodule_statuses
|
|
27
|
-
Overcommit::GitRepo.submodule_statuses(recursive: config['recursive'])
|
|
28
|
-
end
|
|
8
|
+
include Overcommit::Hook::Shared::SubmoduleStatus
|
|
29
9
|
end
|
|
30
10
|
end
|
|
@@ -7,8 +7,8 @@ module Overcommit::Hook::PreCommit
|
|
|
7
7
|
|
|
8
8
|
unless name.split(' ').count >= 2
|
|
9
9
|
return :fail,
|
|
10
|
-
"Author must have at least first and last name, but was: #{name}
|
|
11
|
-
|
|
10
|
+
"Author must have at least first and last name, but was: #{name}.\n" \
|
|
11
|
+
'Set your name with `git config --global user.name "Your Name"`'
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
:pass
|
|
@@ -32,7 +32,7 @@ module Overcommit::Hook::PreCommit
|
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
file = extract_file(match, message)
|
|
35
|
-
line = extract_line(match, message)
|
|
35
|
+
line = extract_line(match, message) if match.names.include?('line') && match[:line]
|
|
36
36
|
type = extract_type(match, message, type_categorizer)
|
|
37
37
|
|
|
38
38
|
Overcommit::Hook::Message.new(type, file, line, message)
|
|
@@ -2,13 +2,12 @@ module Overcommit::Hook::PreCommit
|
|
|
2
2
|
# Checks for hard tabs in files.
|
|
3
3
|
class HardTabs < Base
|
|
4
4
|
def run
|
|
5
|
-
# Catches hard tabs
|
|
6
5
|
result = execute(command + applicable_files)
|
|
7
|
-
unless result.stdout.empty?
|
|
8
|
-
return :fail, "Hard tabs detected:\n#{result.stdout}"
|
|
9
|
-
end
|
|
10
6
|
|
|
11
|
-
|
|
7
|
+
extract_messages(
|
|
8
|
+
result.stdout.split("\n"),
|
|
9
|
+
/^(?<file>[^:]+):(?<line>\d+)/,
|
|
10
|
+
)
|
|
12
11
|
end
|
|
13
12
|
end
|
|
14
13
|
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Overcommit::Hook::PreCommit
|
|
2
|
+
# Runs `scalariform` against any modified Scala files.
|
|
3
|
+
class Scalariform < Base
|
|
4
|
+
MESSAGE_REGEX = /^\[(?<type>FAILED|ERROR)\]\s+(?<file>.+)/
|
|
5
|
+
|
|
6
|
+
def run
|
|
7
|
+
result = execute(command + applicable_files)
|
|
8
|
+
|
|
9
|
+
# example message:
|
|
10
|
+
# [FAILED] path/to/file.scala
|
|
11
|
+
extract_messages(
|
|
12
|
+
result.stdout.split("\n").grep(MESSAGE_REGEX),
|
|
13
|
+
MESSAGE_REGEX,
|
|
14
|
+
lambda { |type| type == 'ERROR' ? :error : :warning }
|
|
15
|
+
)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Overcommit::Hook::PreCommit
|
|
2
|
+
# Runs `slim-lint` against any modified Slim templates.
|
|
3
|
+
class SlimLint < Base
|
|
4
|
+
MESSAGE_TYPE_CATEGORIZER = lambda do |type|
|
|
5
|
+
type.include?('W') ? :warning : :error
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def run
|
|
9
|
+
result = execute(command + applicable_files)
|
|
10
|
+
return :pass if result.success?
|
|
11
|
+
|
|
12
|
+
extract_messages(
|
|
13
|
+
result.stdout.split("\n"),
|
|
14
|
+
/^(?<file>[^:]+):(?<line>\d+)[^ ]* (?<type>[^ ]+)/,
|
|
15
|
+
MESSAGE_TYPE_CATEGORIZER,
|
|
16
|
+
)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -3,11 +3,11 @@ module Overcommit::Hook::PreCommit
|
|
|
3
3
|
class TrailingWhitespace < Base
|
|
4
4
|
def run
|
|
5
5
|
result = execute(command + applicable_files)
|
|
6
|
-
unless result.stdout.empty?
|
|
7
|
-
return :fail, "Trailing whitespace detected:\n#{result.stdout}"
|
|
8
|
-
end
|
|
9
6
|
|
|
10
|
-
|
|
7
|
+
extract_messages(
|
|
8
|
+
result.stdout.split("\n"),
|
|
9
|
+
/^(?<file>[^:]+):(?<line>\d+)/,
|
|
10
|
+
)
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
13
|
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Overcommit::Hook::PreCommit
|
|
2
|
+
# Runs `vint` against any modified Vim script files.
|
|
3
|
+
class Vint < Base
|
|
4
|
+
def run
|
|
5
|
+
result = execute(command + applicable_files)
|
|
6
|
+
return :pass if result.success?
|
|
7
|
+
|
|
8
|
+
return [:fail, result.stderr] unless result.stderr.empty?
|
|
9
|
+
|
|
10
|
+
# example message:
|
|
11
|
+
# path/to/file.vim:1:1: Error message
|
|
12
|
+
extract_messages(
|
|
13
|
+
result.stdout.split("\n"),
|
|
14
|
+
/^(?<file>[^:]+):(?<line>\d+)/
|
|
15
|
+
)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Overcommit::Hook::PreRebase
|
|
2
|
+
# Prevents rebasing commits that have already been merged into one of
|
|
3
|
+
# a specified set of branches.
|
|
4
|
+
class MergedCommits < Base
|
|
5
|
+
def run
|
|
6
|
+
# Allow rebasing a detached HEAD since no refs are changed.
|
|
7
|
+
return :pass if detached_head? || illegal_commits.empty?
|
|
8
|
+
|
|
9
|
+
message = 'Cannot rebase commits that have already been merged into ' \
|
|
10
|
+
"one of #{branches.join(', ')}"
|
|
11
|
+
|
|
12
|
+
[:fail, message]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
def branches
|
|
18
|
+
@branches ||= config['branches']
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def illegal_commits
|
|
22
|
+
@illegal_commits ||= rebased_commits.select do |commit_sha1|
|
|
23
|
+
branches_containing_commit =
|
|
24
|
+
Overcommit::GitRepo.branches_containing_commit(commit_sha1)
|
|
25
|
+
(branches_containing_commit & branches).any?
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module Overcommit::Hook::Shared
|
|
2
|
+
# Shared code used by all IndexTags hooks. It runs ctags in the background so
|
|
3
|
+
# your tag definitions are up-to-date.
|
|
4
|
+
module IndexTags
|
|
5
|
+
def run
|
|
6
|
+
execute_in_background([Overcommit::Utils.script_path('index-tags')])
|
|
7
|
+
:pass
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Overcommit::Hook::Shared
|
|
2
|
+
# Shared code used by all `SubmoduleStatus` hooks to notify the user if any
|
|
3
|
+
# submodules are uninitialized, out of date with the current index, or contain
|
|
4
|
+
# merge conflicts.
|
|
5
|
+
module SubmoduleStatus
|
|
6
|
+
def run
|
|
7
|
+
messages = []
|
|
8
|
+
submodule_statuses.each do |submodule_status|
|
|
9
|
+
path = submodule_status.path
|
|
10
|
+
if submodule_status.uninitialized?
|
|
11
|
+
messages << "Submodule #{path} is uninitialized."
|
|
12
|
+
elsif submodule_status.outdated?
|
|
13
|
+
messages << "Submodule #{path} is out of date with the current index."
|
|
14
|
+
elsif submodule_status.merge_conflict?
|
|
15
|
+
messages << "Submodule #{path} has merge conflicts."
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
return :pass if messages.empty?
|
|
20
|
+
|
|
21
|
+
[:warn, messages.join("\n")]
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
def submodule_statuses
|
|
27
|
+
Overcommit::GitRepo.submodule_statuses(recursive: config['recursive'])
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
require 'set'
|
|
2
|
-
|
|
3
1
|
module Overcommit::HookContext
|
|
4
2
|
# Contains helpers related to the context with which a hook is being run.
|
|
5
3
|
#
|
|
@@ -10,9 +8,14 @@ module Overcommit::HookContext
|
|
|
10
8
|
# This is also important to house in a separate object so that any
|
|
11
9
|
# calculations can be memoized across all hooks in a single object, which
|
|
12
10
|
# helps with performance.
|
|
11
|
+
#
|
|
12
|
+
# @abstract
|
|
13
13
|
class Base
|
|
14
|
+
# Creates a hook context from the given configuration and input options.
|
|
15
|
+
#
|
|
14
16
|
# @param config [Overcommit::Configuration]
|
|
15
17
|
# @param args [Array<String>]
|
|
18
|
+
# @param input [IO] standard input stream
|
|
16
19
|
def initialize(config, args, input)
|
|
17
20
|
@config = config
|
|
18
21
|
@args = args
|
|
@@ -20,16 +23,22 @@ module Overcommit::HookContext
|
|
|
20
23
|
end
|
|
21
24
|
|
|
22
25
|
# Returns the camel-cased type of this hook (e.g. PreCommit)
|
|
26
|
+
#
|
|
27
|
+
# @return [String]
|
|
23
28
|
def hook_class_name
|
|
24
29
|
self.class.name.split('::').last
|
|
25
30
|
end
|
|
26
31
|
|
|
27
32
|
# Returns the snake-cased type of this hook (e.g. pre_commit)
|
|
33
|
+
#
|
|
34
|
+
# @return [String]
|
|
28
35
|
def hook_type_name
|
|
29
36
|
Overcommit::Utils.snake_case(hook_class_name)
|
|
30
37
|
end
|
|
31
38
|
|
|
32
39
|
# Returns the actual name of the hook script being run (e.g. pre-commit).
|
|
40
|
+
#
|
|
41
|
+
# @return [String]
|
|
33
42
|
def hook_script_name
|
|
34
43
|
hook_type_name.gsub('_', '-')
|
|
35
44
|
end
|
|
@@ -39,7 +48,7 @@ module Overcommit::HookContext
|
|
|
39
48
|
# This is called before the hooks are run by the [HookRunner]. Different
|
|
40
49
|
# hook types can perform different setup.
|
|
41
50
|
def setup_environment
|
|
42
|
-
# Implemented by subclass
|
|
51
|
+
# Implemented by subclass, if applicable
|
|
43
52
|
end
|
|
44
53
|
|
|
45
54
|
# Resets the environment to an appropriate state.
|
|
@@ -48,18 +57,23 @@ module Overcommit::HookContext
|
|
|
48
57
|
# Different hook types can perform different cleanup operations, which are
|
|
49
58
|
# intended to "undo" the results of the call to {#setup_environment}.
|
|
50
59
|
def cleanup_environment
|
|
51
|
-
# Implemented by subclass
|
|
60
|
+
# Implemented by subclass, if applicable
|
|
52
61
|
end
|
|
53
62
|
|
|
54
63
|
# Returns a list of files that have been modified.
|
|
55
64
|
#
|
|
56
65
|
# By default, this returns an empty list. Subclasses should implement if
|
|
57
66
|
# there is a concept of files changing for the type of hook being run.
|
|
67
|
+
#
|
|
68
|
+
# @return [Array<String>]
|
|
58
69
|
def modified_files
|
|
59
70
|
[]
|
|
60
71
|
end
|
|
61
72
|
|
|
62
|
-
# Returns an array of lines passed to the hook via
|
|
73
|
+
# Returns an array of lines passed to the hook via the standard input
|
|
74
|
+
# stream.
|
|
75
|
+
#
|
|
76
|
+
# @return [Array<String>]
|
|
63
77
|
def input_lines
|
|
64
78
|
@input_lines ||= @input.read.split("\n")
|
|
65
79
|
end
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
module Overcommit::HookContext
|
|
2
2
|
# Contains helpers related to contextual information used by commit-msg hooks.
|
|
3
3
|
class CommitMsg < Base
|
|
4
|
+
def empty_message?
|
|
5
|
+
commit_message.strip.empty?
|
|
6
|
+
end
|
|
7
|
+
|
|
4
8
|
# User commit message stripped of comments and diff (from verbose output).
|
|
5
9
|
def commit_message
|
|
6
10
|
commit_message_lines.join
|
|
@@ -20,7 +20,7 @@ module Overcommit::HookContext
|
|
|
20
20
|
@amendment = !(/\s#{amend_pattern}/ =~ cmd).nil?
|
|
21
21
|
|
|
22
22
|
# Check for git aliases that call `commit --amend`
|
|
23
|
-
`git config --get-regexp
|
|
23
|
+
`git config --get-regexp "^alias\\." "#{amend_pattern}"`.
|
|
24
24
|
scan(/alias\.([-\w]+)/). # Extract the alias
|
|
25
25
|
each do |match|
|
|
26
26
|
return @amendment if
|
|
@@ -94,6 +94,13 @@ module Overcommit::HookContext
|
|
|
94
94
|
if amendment?
|
|
95
95
|
subcmd = 'show --format=%n'
|
|
96
96
|
@modified_files += Overcommit::GitRepo.modified_files(subcmd: subcmd)
|
|
97
|
+
|
|
98
|
+
# Filter out directories. This could happen when changing a symlink to
|
|
99
|
+
# a directory as part of an amendment, since the symlink will still
|
|
100
|
+
# appear as a file, but the actual working tree will have a directory.
|
|
101
|
+
@modified_files.reject! do |file|
|
|
102
|
+
File.directory?(file) && !File.symlink?(file)
|
|
103
|
+
end
|
|
97
104
|
end
|
|
98
105
|
end
|
|
99
106
|
@modified_files
|
|
@@ -17,7 +17,7 @@ module Overcommit::HookContext
|
|
|
17
17
|
# @return [Set]
|
|
18
18
|
def modified_lines_in_file(file)
|
|
19
19
|
@modified_lines_in_file ||= {}
|
|
20
|
-
@modified_lines_in_file[file] ||= Set.new(1..
|
|
20
|
+
@modified_lines_in_file[file] ||= Set.new(1..count_lines(file))
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def hook_class_name
|
|
@@ -35,8 +35,7 @@ module Overcommit::HookContext
|
|
|
35
35
|
private
|
|
36
36
|
|
|
37
37
|
def count_lines(file)
|
|
38
|
-
|
|
39
|
-
result.success? ? result.stdout.to_i : 0
|
|
38
|
+
File.foreach(file).count
|
|
40
39
|
end
|
|
41
40
|
end
|
|
42
41
|
end
|
data/lib/overcommit/installer.rb
CHANGED
|
@@ -100,7 +100,7 @@ module Overcommit
|
|
|
100
100
|
end
|
|
101
101
|
|
|
102
102
|
def uninstall_master_hook
|
|
103
|
-
FileUtils.rm_rf(master_hook_install_path)
|
|
103
|
+
FileUtils.rm_rf(master_hook_install_path, secure: true)
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
def install_hook_symlinks
|
|
@@ -162,7 +162,7 @@ module Overcommit
|
|
|
162
162
|
|
|
163
163
|
Dir.chdir(hooks_path) do
|
|
164
164
|
Overcommit::Utils.supported_hook_types.each do |hook_type|
|
|
165
|
-
FileUtils.rm_rf(hook_type) if overcommit_hook?(hook_type)
|
|
165
|
+
FileUtils.rm_rf(hook_type, secure: true) if overcommit_hook?(hook_type)
|
|
166
166
|
end
|
|
167
167
|
end
|
|
168
168
|
end
|
|
@@ -7,6 +7,7 @@ class InterruptHandler
|
|
|
7
7
|
|
|
8
8
|
attr_accessor :isolate_signals, :signal_received, :reenable_on_interrupt
|
|
9
9
|
|
|
10
|
+
# Initialize safe interrupt signal handling.
|
|
10
11
|
def initialize
|
|
11
12
|
self.isolate_signals = false
|
|
12
13
|
self.signal_received = false
|
|
@@ -64,14 +65,19 @@ class InterruptHandler
|
|
|
64
65
|
instance.isolate_signals = true
|
|
65
66
|
end
|
|
66
67
|
|
|
68
|
+
# Disable interrupt isolation.
|
|
67
69
|
def disable!
|
|
68
70
|
instance.isolate_signals = false
|
|
69
71
|
end
|
|
70
72
|
|
|
73
|
+
# Enable interrupt isolation.
|
|
71
74
|
def enable!
|
|
72
75
|
instance.isolate_signals = true
|
|
73
76
|
end
|
|
74
77
|
|
|
78
|
+
# Enable interrupt isolation while executing the provided block.
|
|
79
|
+
#
|
|
80
|
+
# @yield block to execute with interrupt isolation
|
|
75
81
|
def isolate_from_interrupts
|
|
76
82
|
instance.signal_received = false
|
|
77
83
|
instance.isolate_signals = true
|
|
@@ -79,9 +85,5 @@ class InterruptHandler
|
|
|
79
85
|
instance.isolate_signals = false
|
|
80
86
|
result
|
|
81
87
|
end
|
|
82
|
-
|
|
83
|
-
def signal_received?
|
|
84
|
-
instance.signal_received
|
|
85
|
-
end
|
|
86
88
|
end
|
|
87
89
|
end
|
data/lib/overcommit/logger.rb
CHANGED
data/lib/overcommit/utils.rb
CHANGED
data/lib/overcommit/version.rb
CHANGED
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.
|
|
4
|
+
version: 0.25.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Brigade Engineering
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2015-
|
|
12
|
+
date: 2015-05-02 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: childprocess
|
|
@@ -158,15 +158,18 @@ files:
|
|
|
158
158
|
- lib/overcommit/hook/pre_commit/python_flake8.rb
|
|
159
159
|
- lib/overcommit/hook/pre_commit/rails_schema_up_to_date.rb
|
|
160
160
|
- lib/overcommit/hook/pre_commit/reek.rb
|
|
161
|
-
- lib/overcommit/hook/pre_commit/
|
|
161
|
+
- lib/overcommit/hook/pre_commit/rubo_cop.rb
|
|
162
162
|
- lib/overcommit/hook/pre_commit/ruby_lint.rb
|
|
163
|
+
- lib/overcommit/hook/pre_commit/scalariform.rb
|
|
163
164
|
- lib/overcommit/hook/pre_commit/scalastyle.rb
|
|
164
165
|
- lib/overcommit/hook/pre_commit/scss_lint.rb
|
|
165
166
|
- lib/overcommit/hook/pre_commit/semi_standard.rb
|
|
166
167
|
- lib/overcommit/hook/pre_commit/shell_check.rb
|
|
168
|
+
- lib/overcommit/hook/pre_commit/slim_lint.rb
|
|
167
169
|
- lib/overcommit/hook/pre_commit/standard.rb
|
|
168
170
|
- lib/overcommit/hook/pre_commit/trailing_whitespace.rb
|
|
169
171
|
- lib/overcommit/hook/pre_commit/travis_lint.rb
|
|
172
|
+
- lib/overcommit/hook/pre_commit/vint.rb
|
|
170
173
|
- lib/overcommit/hook/pre_commit/w3c_css.rb
|
|
171
174
|
- lib/overcommit/hook/pre_commit/w3c_html.rb
|
|
172
175
|
- lib/overcommit/hook/pre_commit/xml_lint.rb
|
|
@@ -176,6 +179,9 @@ files:
|
|
|
176
179
|
- lib/overcommit/hook/pre_push/protected_branches.rb
|
|
177
180
|
- lib/overcommit/hook/pre_push/r_spec.rb
|
|
178
181
|
- lib/overcommit/hook/pre_rebase/base.rb
|
|
182
|
+
- lib/overcommit/hook/pre_rebase/merged_commits.rb
|
|
183
|
+
- lib/overcommit/hook/shared/index_tags.rb
|
|
184
|
+
- lib/overcommit/hook/shared/submodule_status.rb
|
|
179
185
|
- lib/overcommit/hook_context.rb
|
|
180
186
|
- lib/overcommit/hook_context/base.rb
|
|
181
187
|
- lib/overcommit/hook_context/commit_msg.rb
|
|
@@ -232,7 +238,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
232
238
|
version: '0'
|
|
233
239
|
requirements: []
|
|
234
240
|
rubyforge_project:
|
|
235
|
-
rubygems_version: 2.
|
|
241
|
+
rubygems_version: 2.4.5
|
|
236
242
|
signing_key:
|
|
237
243
|
specification_version: 4
|
|
238
244
|
summary: Git hook manager
|