forked from sds/overcommit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathflay.rb
38 lines (36 loc) · 1.12 KB
/
flay.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# frozen_string_literal: true
module Overcommit::Hook::PreCommit
# Runs `flay` against any modified files.
#
# @see https://github.com/seattlerb/flay
class Flay < Base
# Flay prints two kinds of messages:
#
# 1) IDENTICAL code found in :defn (mass*2 = MASS)
# file_path_1.rb:LINE_1
# file_path_2.rb:LINE_2
#
# 2) Similar code found in :defn (mass = MASS)
# file_path_1.rb:LINE_1
# file_path_2.rb:LINE_2
#
def run
command = ['flay', '--mass', @config['mass_threshold'].to_s, '--fuzzy', @config['fuzzy'].to_s]
# Use a more liberal detection method
command += ['--liberal'] if @config['liberal']
messages = []
# Run the command for each file
applicable_files.each do |file|
result = execute(command, args: [file])
results = result.stdout.split("\n\n")
results.shift
unless results.empty?
error_message = results.join("\n").gsub(/^\d+\)\s*/, '')
message = Overcommit::Hook::Message.new(:error, nil, nil, error_message)
messages << message
end
end
messages
end
end
end