overcommit 0.43.0 → 0.44.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 +5 -5
- data/lib/overcommit/git_config.rb +1 -1
- data/lib/overcommit/git_repo.rb +1 -1
- data/lib/overcommit/hook/pre_commit/base.rb +3 -65
- data/lib/overcommit/installer.rb +2 -2
- data/lib/overcommit/utils.rb +13 -22
- data/lib/overcommit/utils/messages_utils.rb +75 -0
- data/lib/overcommit/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 757f60633c3904f1c63681afc14f3a3e7874f05ad3bef92af6c9d9351ea45d29
|
4
|
+
data.tar.gz: fb3126490d063d44c9c1e27fdd67a84de2bcb87359b3db619e50f6f2f634ab6d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 839e44ead515bfb13c13fab2e0e4b0859a1fb691d67c7ddb958bdbb3533b4945731cda5bb81b5c90d2e345ff08e069760d4dcfb4c099cd5798a380f24cef126d
|
7
|
+
data.tar.gz: ffc50fa2e8b3aa5c8be0ae8e73745062f465c4379bb07fbd4f8166378a2237bb0c32a9ab3c7f2e66f6cdec02ae4ce6fa275f858ec31edf4c13f0ded6e15fb956
|
data/lib/overcommit/git_repo.rb
CHANGED
@@ -236,7 +236,7 @@ module Overcommit
|
|
236
236
|
ref = options[:ref]
|
237
237
|
|
238
238
|
modules = []
|
239
|
-
IniParse.parse(`git show #{ref}:.gitmodules`).each do |section|
|
239
|
+
IniParse.parse(`git show #{ref}:.gitmodules 2> #{File::NULL}`).each do |section|
|
240
240
|
# git < 1.8.5 does not update the .gitmodules file with submodule
|
241
241
|
# changes, so when we are looking at the current state of the work tree,
|
242
242
|
# we need to check if the submodule actually exists via another method,
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'forwardable'
|
2
|
+
require 'overcommit/utils/messages_utils'
|
2
3
|
|
3
4
|
module Overcommit::Hook::PreCommit
|
4
5
|
# Functionality common to all pre-commit hooks.
|
@@ -9,71 +10,8 @@ module Overcommit::Hook::PreCommit
|
|
9
10
|
|
10
11
|
private
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
#
|
15
|
-
# Assumes each element of `output` is a separate error/warning with all
|
16
|
-
# information necessary to identify it.
|
17
|
-
#
|
18
|
-
# @param output_messages [Array<String>] unprocessed error/warning messages
|
19
|
-
# @param regex [Regexp] regular expression defining `file`, `line` and
|
20
|
-
# `type` capture groups used to extract file locations and error/warning
|
21
|
-
# type from each line of output
|
22
|
-
# @param type_categorizer [Proc] function executed against the `type`
|
23
|
-
# capture group to convert it to a `:warning` or `:error` symbol. Assumes
|
24
|
-
# `:error` if `nil`.
|
25
|
-
# @raise [Overcommit::Exceptions::MessageProcessingError] line of output did
|
26
|
-
# not match regex
|
27
|
-
# @return [Array<Message>]
|
28
|
-
def extract_messages(output_messages, regex, type_categorizer = nil)
|
29
|
-
output_messages.map.with_index do |message, index|
|
30
|
-
unless match = message.match(regex)
|
31
|
-
raise Overcommit::Exceptions::MessageProcessingError,
|
32
|
-
'Unexpected output: unable to determine line number or type ' \
|
33
|
-
"of error/warning for output:\n" \
|
34
|
-
"#{output_messages[index..-1].join("\n")}"
|
35
|
-
end
|
36
|
-
|
37
|
-
file = extract_file(match, message)
|
38
|
-
line = extract_line(match, message) if match.names.include?('line') && match[:line]
|
39
|
-
type = extract_type(match, message, type_categorizer)
|
40
|
-
|
41
|
-
Overcommit::Hook::Message.new(type, file, line, message)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def extract_file(match, message)
|
46
|
-
return unless match.names.include?('file')
|
47
|
-
|
48
|
-
if match[:file].to_s.empty?
|
49
|
-
raise Overcommit::Exceptions::MessageProcessingError,
|
50
|
-
"Unexpected output: no file found in '#{message}'"
|
51
|
-
end
|
52
|
-
|
53
|
-
match[:file]
|
54
|
-
end
|
55
|
-
|
56
|
-
def extract_line(match, message)
|
57
|
-
return unless match.names.include?('line')
|
58
|
-
Integer(match[:line])
|
59
|
-
rescue ArgumentError, TypeError
|
60
|
-
raise Overcommit::Exceptions::MessageProcessingError,
|
61
|
-
"Unexpected output: invalid line number found in '#{message}'"
|
62
|
-
end
|
63
|
-
|
64
|
-
def extract_type(match, message, type_categorizer)
|
65
|
-
if type_categorizer
|
66
|
-
type_match = match.names.include?('type') ? match[:type] : nil
|
67
|
-
type = type_categorizer.call(type_match)
|
68
|
-
unless Overcommit::Hook::MESSAGE_TYPES.include?(type)
|
69
|
-
raise Overcommit::Exceptions::MessageProcessingError,
|
70
|
-
"Invalid message type '#{type}' for '#{message}': must " \
|
71
|
-
"be one of #{Overcommit::Hook::MESSAGE_TYPES.inspect}"
|
72
|
-
end
|
73
|
-
type
|
74
|
-
else
|
75
|
-
:error # Assume error since no categorizer was defined
|
76
|
-
end
|
13
|
+
def extract_messages(*args)
|
14
|
+
Overcommit::Utils::MessagesUtils.extract_messages(*args)
|
77
15
|
end
|
78
16
|
end
|
79
17
|
end
|
data/lib/overcommit/installer.rb
CHANGED
@@ -138,8 +138,8 @@ module Overcommit
|
|
138
138
|
FileUtils.mv(hook_file, old_hooks_path)
|
139
139
|
end
|
140
140
|
end
|
141
|
-
# Remove old-hooks directory if empty
|
142
|
-
FileUtils.rmdir(old_hooks_path)
|
141
|
+
# Remove old-hooks directory if empty (i.e. no old hooks were preserved)
|
142
|
+
FileUtils.rmdir(old_hooks_path) if Dir.entries(old_hooks_path).size <= 2
|
143
143
|
end
|
144
144
|
|
145
145
|
def restore_old_hooks
|
data/lib/overcommit/utils.rb
CHANGED
@@ -43,38 +43,29 @@ module Overcommit
|
|
43
43
|
def repo_root
|
44
44
|
@repo_root ||=
|
45
45
|
begin
|
46
|
-
|
47
|
-
|
46
|
+
result = execute(%w[git rev-parse --show-toplevel])
|
47
|
+
unless result.success?
|
48
|
+
raise Overcommit::Exceptions::InvalidGitRepo,
|
49
|
+
'Unable to determine location of GIT_DIR. ' \
|
50
|
+
'Not a recognizable Git repository!'
|
48
51
|
end
|
49
|
-
|
50
|
-
unless git_dir
|
51
|
-
raise Overcommit::Exceptions::InvalidGitRepo, 'no .git directory found'
|
52
|
-
end
|
53
|
-
|
54
|
-
git_dir.to_s
|
52
|
+
result.stdout.chomp("\n")
|
55
53
|
end
|
56
54
|
end
|
57
55
|
|
58
56
|
# Returns an absolute path to the .git directory for a repo.
|
59
57
|
#
|
60
|
-
# @param repo_dir [String] root directory of git repo
|
61
58
|
# @return [String]
|
62
|
-
def git_dir
|
59
|
+
def git_dir
|
63
60
|
@git_dir ||=
|
64
61
|
begin
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
# Resolve relative paths
|
72
|
-
unless git_dir.start_with?('/')
|
73
|
-
git_dir = File.expand_path(git_dir, repo_dir)
|
74
|
-
end
|
62
|
+
result = execute(%w[git rev-parse --git-common-dir])
|
63
|
+
unless result.success?
|
64
|
+
raise Overcommit::Exceptions::InvalidGitRepo,
|
65
|
+
'Unable to determine location of GIT_DIR. ' \
|
66
|
+
'Not a recognizable Git repository!'
|
75
67
|
end
|
76
|
-
|
77
|
-
git_dir
|
68
|
+
File.expand_path(result.stdout.chomp("\n"), Dir.pwd)
|
78
69
|
end
|
79
70
|
end
|
80
71
|
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module Overcommit::Utils
|
2
|
+
# Utility to process messages
|
3
|
+
module MessagesUtils
|
4
|
+
class << self
|
5
|
+
# Extract file, line number, and type of message from an error/warning
|
6
|
+
# messages in output.
|
7
|
+
#
|
8
|
+
# Assumes each element of `output` is a separate error/warning with all
|
9
|
+
# information necessary to identify it.
|
10
|
+
#
|
11
|
+
# @param output_messages [Array<String>] unprocessed error/warning messages
|
12
|
+
# @param regex [Regexp] regular expression defining `file`, `line` and
|
13
|
+
# `type` capture groups used to extract file locations and error/warning
|
14
|
+
# type from each line of output
|
15
|
+
# @param type_categorizer [Proc] function executed against the `type`
|
16
|
+
# capture group to convert it to a `:warning` or `:error` symbol. Assumes
|
17
|
+
# `:error` if `nil`.
|
18
|
+
# @raise [Overcommit::Exceptions::MessageProcessingError] line of output did
|
19
|
+
# not match regex
|
20
|
+
# @return [Array<Message>]
|
21
|
+
def extract_messages(output_messages, regex, type_categorizer = nil)
|
22
|
+
output_messages.map.with_index do |message, index|
|
23
|
+
unless match = message.match(regex)
|
24
|
+
raise Overcommit::Exceptions::MessageProcessingError,
|
25
|
+
'Unexpected output: unable to determine line number or type ' \
|
26
|
+
"of error/warning for output:\n" \
|
27
|
+
"#{output_messages[index..-1].join("\n")}"
|
28
|
+
end
|
29
|
+
|
30
|
+
file = extract_file(match, message)
|
31
|
+
line = extract_line(match, message) if match.names.include?('line') && match[:line]
|
32
|
+
type = extract_type(match, message, type_categorizer)
|
33
|
+
|
34
|
+
Overcommit::Hook::Message.new(type, file, line, message)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def extract_file(match, message)
|
41
|
+
return unless match.names.include?('file')
|
42
|
+
|
43
|
+
if match[:file].to_s.empty?
|
44
|
+
raise Overcommit::Exceptions::MessageProcessingError,
|
45
|
+
"Unexpected output: no file found in '#{message}'"
|
46
|
+
end
|
47
|
+
|
48
|
+
match[:file]
|
49
|
+
end
|
50
|
+
|
51
|
+
def extract_line(match, message)
|
52
|
+
return unless match.names.include?('line')
|
53
|
+
Integer(match[:line])
|
54
|
+
rescue ArgumentError, TypeError
|
55
|
+
raise Overcommit::Exceptions::MessageProcessingError,
|
56
|
+
"Unexpected output: invalid line number found in '#{message}'"
|
57
|
+
end
|
58
|
+
|
59
|
+
def extract_type(match, message, type_categorizer)
|
60
|
+
if type_categorizer
|
61
|
+
type_match = match.names.include?('type') ? match[:type] : nil
|
62
|
+
type = type_categorizer.call(type_match)
|
63
|
+
unless Overcommit::Hook::MESSAGE_TYPES.include?(type)
|
64
|
+
raise Overcommit::Exceptions::MessageProcessingError,
|
65
|
+
"Invalid message type '#{type}' for '#{message}': must " \
|
66
|
+
"be one of #{Overcommit::Hook::MESSAGE_TYPES.inspect}"
|
67
|
+
end
|
68
|
+
type
|
69
|
+
else
|
70
|
+
:error # Assume error since no categorizer was defined
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
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.44.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: 2018-
|
12
|
+
date: 2018-03-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: childprocess
|
@@ -242,6 +242,7 @@ files:
|
|
242
242
|
- lib/overcommit/subprocess.rb
|
243
243
|
- lib/overcommit/utils.rb
|
244
244
|
- lib/overcommit/utils/file_utils.rb
|
245
|
+
- lib/overcommit/utils/messages_utils.rb
|
245
246
|
- lib/overcommit/version.rb
|
246
247
|
- libexec/gerrit-change-id
|
247
248
|
- libexec/index-tags
|
@@ -275,7 +276,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
275
276
|
version: '0'
|
276
277
|
requirements: []
|
277
278
|
rubyforge_project:
|
278
|
-
rubygems_version: 2.5
|
279
|
+
rubygems_version: 2.7.5
|
279
280
|
signing_key:
|
280
281
|
specification_version: 4
|
281
282
|
summary: Git hook manager
|