diff_influence 0.3.0 → 0.4.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.
- data/.diff-influence +13 -0
- data/.gitignore +1 -0
- data/README.md +31 -7
- data/bin/console +5 -5
- data/bin/convert_for_under_200.rb +7 -4
- data/exe/diff-influence +3 -2
- data/lib/diff_influence.rb +7 -6
- data/lib/diff_influence/config.rb +113 -20
- data/lib/diff_influence/config_1x.rb +186 -0
- data/lib/diff_influence/core.rb +39 -31
- data/lib/diff_influence/core_1x.rb +39 -31
- data/lib/diff_influence/version.rb +1 -1
- metadata +98 -72
- checksums.yaml +0 -7
- data/.ruby-version +0 -1
data/.diff-influence
ADDED
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -30,24 +30,48 @@ Or install it yourself as:
|
|
30
30
|
|
31
31
|
```
|
32
32
|
==============================================================================
|
33
|
-
[]: optional
|
33
|
+
[]: optional(overrides .diff-influence)
|
34
34
|
|
35
35
|
Usage: diff-influence [Options]
|
36
36
|
|
37
37
|
Options:
|
38
38
|
|
39
|
-
-c --commit
|
40
|
-
-
|
41
|
-
-e --ext
|
42
|
-
-
|
43
|
-
-
|
39
|
+
-c --commit id1,id2,... git commit id(s) uses diff (default: none)
|
40
|
+
-d --dir dir1,dir2,... path(s) to search file (default: app,lib)
|
41
|
+
-e --ext ext1,ext2,... extension(s) to search file (default: rb)
|
42
|
+
-i --ignore method1,method2,... ignore methods (default: new, index)
|
43
|
+
-g --grep use grep command with OS
|
44
|
+
-P --print print config values
|
45
|
+
-D --debug print debugging information to console
|
44
46
|
|
45
47
|
Feature Options:
|
46
48
|
|
47
|
-
-o --output path
|
49
|
+
-o --output path to output file (default: STDOUT)
|
48
50
|
==============================================================================
|
49
51
|
```
|
50
52
|
|
53
|
+
## Permanent Options ##
|
54
|
+
|
55
|
+
Diff Influence laad _.diff-influece_ file in the root of your repository
|
56
|
+
or home.
|
57
|
+
|
58
|
+
```yaml
|
59
|
+
---
|
60
|
+
:commits: []
|
61
|
+
:search_directories:
|
62
|
+
- app
|
63
|
+
- lib
|
64
|
+
:search_extensions:
|
65
|
+
- rb
|
66
|
+
:ignore_methods:
|
67
|
+
- new
|
68
|
+
- index
|
69
|
+
:os_grep: false
|
70
|
+
:debug: false
|
71
|
+
```
|
72
|
+
|
73
|
+
You can display examples of _.diff-influence_ file definitions using the -P option.
|
74
|
+
|
51
75
|
## Authors ##
|
52
76
|
|
53
77
|
[metalels](https://github.com/metalels)
|
data/bin/console
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'diff_influence'
|
5
5
|
|
6
6
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
7
|
# with your gem easier. You can also use a different console, if you like.
|
8
8
|
|
9
|
-
if RUBY_VERSION <
|
10
|
-
require
|
9
|
+
if RUBY_VERSION < '2.0.0'
|
10
|
+
require 'irb'
|
11
11
|
IRB.start
|
12
12
|
else
|
13
|
-
require
|
13
|
+
require 'pry'
|
14
14
|
Pry.start
|
15
15
|
end
|
@@ -1,6 +1,9 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
4
|
-
src =
|
5
|
-
src = src.gsub(
|
6
|
-
|
3
|
+
%w(lib/diff_influence/core.rb lib/diff_influence/config.rb).each do |src_file|
|
4
|
+
src = File.read src_file
|
5
|
+
src = src.gsub(/(\w+):\s/, ':\1 => ')
|
6
|
+
src = src.gsub(/\.lines/, '.lines.to_a')
|
7
|
+
File.write src_file.gsub('.rb', '_1x.rb'), src
|
8
|
+
src = nil
|
9
|
+
end
|
data/exe/diff-influence
CHANGED
data/lib/diff_influence.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
require
|
2
|
-
require "diff_influence/config"
|
1
|
+
require 'diff_influence/version'
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
%w(config core).each do |src_name|
|
4
|
+
if RUBY_VERSION < '2.0.0'
|
5
|
+
require "diff_influence/#{src_name}_1x"
|
6
|
+
else
|
7
|
+
require "diff_influence/#{src_name}"
|
8
|
+
end
|
8
9
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
module DiffInfluence
|
2
2
|
module Config
|
3
|
+
require 'yaml'
|
3
4
|
require 'pathname'
|
4
5
|
USAGE=<<-EOS
|
5
6
|
==============================================================================
|
@@ -9,15 +10,17 @@ Usage: diff_influence [Options]
|
|
9
10
|
|
10
11
|
Options:
|
11
12
|
|
12
|
-
-c --commit
|
13
|
-
-
|
14
|
-
-e --ext
|
15
|
-
-
|
16
|
-
-
|
13
|
+
-c --commit id1,id2,... git commit id(s) uses diff (default: none)
|
14
|
+
-d --dir dir1,dir2,... path(s) to search file (default: app,lib)
|
15
|
+
-e --ext ext1,ext2,... extension(s) to search file (default: rb)
|
16
|
+
-i --ignore method1,method2,... ignore methods (default: new, index)
|
17
|
+
-g --grep use grep command with OS
|
18
|
+
-P --print print config values
|
19
|
+
-D --debug print debugging information to console
|
17
20
|
|
18
21
|
Feature Options:
|
19
22
|
|
20
|
-
-o --output path
|
23
|
+
-o --output path to output file (default: STDOUT)
|
21
24
|
==============================================================================
|
22
25
|
EOS
|
23
26
|
|
@@ -36,52 +39,87 @@ Usage: diff_influence [Options]
|
|
36
39
|
end
|
37
40
|
|
38
41
|
def self.commits=(value)
|
39
|
-
@@commits =
|
42
|
+
@@commits = self.flexible_value value
|
40
43
|
end
|
41
44
|
|
42
|
-
def self.
|
43
|
-
@@
|
45
|
+
def self.search_directories
|
46
|
+
@@search_directories ||= %w(app lib)
|
44
47
|
end
|
45
48
|
|
46
|
-
def self.
|
47
|
-
@@
|
49
|
+
def self.search_directories=(value)
|
50
|
+
@@search_directories = self.flexible_value value
|
48
51
|
end
|
49
52
|
|
50
53
|
def self.search_extensions
|
51
|
-
@@search_extensions ||=
|
54
|
+
@@search_extensions ||= %w(rb)
|
52
55
|
end
|
53
56
|
|
54
57
|
def self.search_extensions=(value)
|
55
|
-
@@
|
58
|
+
@@search_extensions = self.flexible_value value
|
56
59
|
end
|
57
60
|
|
58
61
|
def self.output
|
59
62
|
@@output ||= nil
|
60
63
|
end
|
61
64
|
|
65
|
+
def self.output=(value)
|
66
|
+
@@output = value
|
67
|
+
end
|
68
|
+
|
62
69
|
def self.os_grep
|
63
70
|
@@os_grep ||= false
|
64
71
|
end
|
65
72
|
|
73
|
+
def self.os_grep=(value)
|
74
|
+
@@os_grep = value
|
75
|
+
end
|
76
|
+
|
66
77
|
def self.debug
|
67
78
|
@@debug ||= false
|
68
79
|
end
|
69
80
|
|
70
|
-
def self.
|
81
|
+
def self.debug=(value)
|
82
|
+
@@debug =value
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.ignore_methods
|
86
|
+
@@ignore_methods ||= %w(new index)
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.ignore_methods=(value)
|
90
|
+
@@ignore_methods = self.flexible_value value
|
91
|
+
end
|
92
|
+
|
93
|
+
def self.load_conf
|
94
|
+
['.diff-influence', "#{File.expand_path("~")}/\.diff-influence"].each do |conf_file|
|
95
|
+
if File.exist? conf_file
|
96
|
+
puts "#{conf_file} reading..." if self.debug
|
97
|
+
self.load_conf_file conf_file
|
98
|
+
break
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def self.parse_args(argv)
|
71
104
|
while arg = argv.shift
|
72
105
|
case arg
|
73
106
|
when /\A--commit\z/, /\A-c\z/
|
74
107
|
self.commits = argv.shift
|
75
|
-
when /\A--
|
76
|
-
self.
|
108
|
+
when /\A--dir\z/, /\A-d\z/
|
109
|
+
self.search_directories = argv.shift
|
77
110
|
when /\A--ext\z/, /\A-e\z/
|
78
111
|
self.search_extensions = argv.shift
|
112
|
+
when /\A--ignore\z/, /\A-i\z/
|
113
|
+
self.ignore_methods = argv.shift
|
79
114
|
when /\A--output\z/, /\A-o\z/
|
80
|
-
|
115
|
+
self.output = argv.shift
|
81
116
|
when /\A--grep\z/, /\A-g\z/
|
82
|
-
|
83
|
-
when /\A--debug\z/, /\A-
|
84
|
-
|
117
|
+
self.os_grep = true
|
118
|
+
when /\A--debug\z/, /\A-D\z/
|
119
|
+
self.debug = true
|
120
|
+
when /\A--print\z/, /\A-P\z/
|
121
|
+
self.print
|
122
|
+
self.exit_with_message 0, false
|
85
123
|
when /\A--help\z/, /\A-h\z/
|
86
124
|
self.exit_with_message 0, true
|
87
125
|
else
|
@@ -91,5 +129,60 @@ Usage: diff_influence [Options]
|
|
91
129
|
end
|
92
130
|
true
|
93
131
|
end
|
132
|
+
|
133
|
+
def self.print
|
134
|
+
yaml_obj = {
|
135
|
+
commits: self.commits,
|
136
|
+
search_directories: self.search_directories,
|
137
|
+
search_extensions: self.search_extensions,
|
138
|
+
ignore_methods: self.ignore_methods,
|
139
|
+
os_grep: self.os_grep,
|
140
|
+
debug: self.debug
|
141
|
+
}
|
142
|
+
yaml_obj[:output] = self.output if self.output
|
143
|
+
puts <<-EOS
|
144
|
+
======== Diff Influence Config ========
|
145
|
+
target commits: #{self.commits.inspect}
|
146
|
+
search directories: #{self.search_directories.inspect}
|
147
|
+
search extensions: #{self.search_extensions.inspect}
|
148
|
+
ignore methods: #{self.ignore_methods.inspect}
|
149
|
+
output file: #{self.output}
|
150
|
+
os grep mode: #{self.os_grep}
|
151
|
+
debug mode: #{self.debug}
|
152
|
+
=======================================
|
153
|
+
|
154
|
+
>>>>> sample .diff_influence
|
155
|
+
#{YAML.dump yaml_obj}
|
156
|
+
<<<<<
|
157
|
+
EOS
|
158
|
+
yaml_obj = nil
|
159
|
+
end
|
160
|
+
|
161
|
+
private
|
162
|
+
def self.flexible_value(value)
|
163
|
+
case value
|
164
|
+
when Array
|
165
|
+
value
|
166
|
+
when String
|
167
|
+
value.split(',').map{|v| v.chomp.strip}
|
168
|
+
else
|
169
|
+
nil
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
def self.load_conf_file(file_path)
|
174
|
+
if settings = YAML.load_file(file_path)
|
175
|
+
settings.each do |k, v|
|
176
|
+
self.send "#{k}=", v
|
177
|
+
end
|
178
|
+
end
|
179
|
+
rescue Errno::ENOENT
|
180
|
+
nil
|
181
|
+
rescue => e
|
182
|
+
puts e if self.debug
|
183
|
+
puts "Cant load config file #{file_path}"
|
184
|
+
exit 1
|
185
|
+
end
|
186
|
+
|
94
187
|
end
|
95
188
|
end
|
@@ -0,0 +1,186 @@
|
|
1
|
+
module DiffInfluence
|
2
|
+
module Config
|
3
|
+
require 'yaml'
|
4
|
+
require 'pathname'
|
5
|
+
USAGE=<<-EOS
|
6
|
+
==============================================================================
|
7
|
+
[]: optional
|
8
|
+
|
9
|
+
:Usage => diff_influence [Options]
|
10
|
+
|
11
|
+
:Options =>
|
12
|
+
-c --commit id1,id2,... git commit id(s) uses diff (:default => none)
|
13
|
+
-d --dir dir1,dir2,... path(s) to search file (:default => app,lib)
|
14
|
+
-e --ext ext1,ext2,... extension(s) to search file (:default => rb)
|
15
|
+
-i --ignore method1,method2,... ignore methods (:default => new, index)
|
16
|
+
-g --grep use grep command with OS
|
17
|
+
-P --print print config values
|
18
|
+
-D --debug print debugging information to console
|
19
|
+
|
20
|
+
Feature :Options =>
|
21
|
+
-o --output path to output file (:default => STDOUT)
|
22
|
+
==============================================================================
|
23
|
+
EOS
|
24
|
+
|
25
|
+
def self.exit_with_message(code, usage=false, msg=nil)
|
26
|
+
puts msg unless msg.nil?
|
27
|
+
puts USAGE if usage
|
28
|
+
exit code
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.root
|
32
|
+
@@root ||= Pathname.pwd
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.commits
|
36
|
+
@@commits ||= []
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.commits=(value)
|
40
|
+
@@commits = self.flexible_value value
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.search_directories
|
44
|
+
@@search_directories ||= %w(app lib)
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.search_directories=(value)
|
48
|
+
@@search_directories = self.flexible_value value
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.search_extensions
|
52
|
+
@@search_extensions ||= %w(rb)
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.search_extensions=(value)
|
56
|
+
@@search_extensions = self.flexible_value value
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.output
|
60
|
+
@@output ||= nil
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.output=(value)
|
64
|
+
@@output = value
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.os_grep
|
68
|
+
@@os_grep ||= false
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.os_grep=(value)
|
72
|
+
@@os_grep = value
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.debug
|
76
|
+
@@debug ||= false
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.debug=(value)
|
80
|
+
@@debug =value
|
81
|
+
end
|
82
|
+
|
83
|
+
def self.ignore_methods
|
84
|
+
@@ignore_methods ||= %w(new index)
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.ignore_methods=(value)
|
88
|
+
@@ignore_methods = self.flexible_value value
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.load_conf
|
92
|
+
['.diff-influence', "#{File.expand_path("~")}/\.diff-influence"].each do |conf_file|
|
93
|
+
if File.exist? conf_file
|
94
|
+
puts "#{conf_file} reading..." if self.debug
|
95
|
+
self.load_conf_file conf_file
|
96
|
+
break
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def self.parse_args(argv)
|
102
|
+
while arg = argv.shift
|
103
|
+
case arg
|
104
|
+
when /\A--commit\z/, /\A-c\z/
|
105
|
+
self.commits = argv.shift
|
106
|
+
when /\A--dir\z/, /\A-d\z/
|
107
|
+
self.search_directories = argv.shift
|
108
|
+
when /\A--ext\z/, /\A-e\z/
|
109
|
+
self.search_extensions = argv.shift
|
110
|
+
when /\A--ignore\z/, /\A-i\z/
|
111
|
+
self.ignore_methods = argv.shift
|
112
|
+
when /\A--output\z/, /\A-o\z/
|
113
|
+
self.output = argv.shift
|
114
|
+
when /\A--grep\z/, /\A-g\z/
|
115
|
+
self.os_grep = true
|
116
|
+
when /\A--debug\z/, /\A-D\z/
|
117
|
+
self.debug = true
|
118
|
+
when /\A--print\z/, /\A-P\z/
|
119
|
+
self.print
|
120
|
+
self.exit_with_message 0, false
|
121
|
+
when /\A--help\z/, /\A-h\z/
|
122
|
+
self.exit_with_message 0, true
|
123
|
+
else
|
124
|
+
puts "unknown option #{arg}"
|
125
|
+
self.exit_with_message 2, true
|
126
|
+
end
|
127
|
+
end
|
128
|
+
true
|
129
|
+
end
|
130
|
+
|
131
|
+
def self.print
|
132
|
+
yaml_obj = {
|
133
|
+
:commits => self.commits,
|
134
|
+
:search_directories => self.search_directories,
|
135
|
+
:search_extensions => self.search_extensions,
|
136
|
+
:ignore_methods => self.ignore_methods,
|
137
|
+
:os_grep => self.os_grep,
|
138
|
+
:debug => self.debug
|
139
|
+
}
|
140
|
+
yaml_obj[:output] = self.output if self.output
|
141
|
+
puts <<-EOS
|
142
|
+
======== Diff Influence Config ========
|
143
|
+
target :commits => #{self.commits.inspect}
|
144
|
+
search :directories => #{self.search_directories.inspect}
|
145
|
+
search :extensions => #{self.search_extensions.inspect}
|
146
|
+
ignore :methods => #{self.ignore_methods.inspect}
|
147
|
+
output :file => #{self.output}
|
148
|
+
os grep :mode => #{self.os_grep}
|
149
|
+
debug :mode => #{self.debug}
|
150
|
+
=======================================
|
151
|
+
|
152
|
+
>>>>> sample .diff_influence
|
153
|
+
#{YAML.dump yaml_obj}
|
154
|
+
<<<<<
|
155
|
+
EOS
|
156
|
+
yaml_obj = nil
|
157
|
+
end
|
158
|
+
|
159
|
+
private
|
160
|
+
def self.flexible_value(value)
|
161
|
+
case value
|
162
|
+
when Array
|
163
|
+
value
|
164
|
+
when String
|
165
|
+
value.split(',').map{|v| v.chomp.strip}
|
166
|
+
else
|
167
|
+
nil
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def self.load_conf_file(file_path)
|
172
|
+
if settings = YAML.load_file(file_path)
|
173
|
+
settings.each do |k, v|
|
174
|
+
self.send "#{k}=", v
|
175
|
+
end
|
176
|
+
end
|
177
|
+
rescue Errno::ENOENT
|
178
|
+
nil
|
179
|
+
rescue => e
|
180
|
+
puts e if self.debug
|
181
|
+
puts "Cant load config file #{file_path}"
|
182
|
+
exit 1
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
end
|
data/lib/diff_influence/core.rb
CHANGED
@@ -1,17 +1,13 @@
|
|
1
1
|
module DiffInfluence
|
2
2
|
module Core
|
3
3
|
EMeth=Struct.new(:name, :type, :raw, :index)
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
self.type = attr[:type]
|
8
|
-
self.raw = attr[:raw]
|
9
|
-
self.index = attr[:index]
|
10
|
-
end
|
4
|
+
|
5
|
+
def self.config
|
6
|
+
DiffInfluence::Config
|
11
7
|
end
|
12
8
|
|
13
9
|
def self.debug_log(msg)
|
14
|
-
puts "[DEBUG] #{msg}" if
|
10
|
+
puts "[DEBUG] #{msg}" if self.config.debug
|
15
11
|
end
|
16
12
|
|
17
13
|
def self.git_status
|
@@ -19,11 +15,19 @@ module DiffInfluence
|
|
19
15
|
end
|
20
16
|
|
21
17
|
def self.file_paths
|
22
|
-
@@files ||= self.git_status.lines.map{|line|
|
18
|
+
@@files ||= self.git_status.lines.map {|line|
|
19
|
+
path = line.split.last
|
20
|
+
case path
|
21
|
+
when *self.config.search_directories.map{|d| /\A#{d}/}
|
22
|
+
path
|
23
|
+
else
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
}.compact
|
23
27
|
end
|
24
28
|
|
25
29
|
def self.git_diff(file_path)
|
26
|
-
`git --no-pager diff --no-ext-diff -U1000000 #{
|
30
|
+
`git --no-pager diff --no-ext-diff -U1000000 #{self.config.commits.join(' ')} #{file_path}`
|
27
31
|
end
|
28
32
|
|
29
33
|
def self.search_methods(file_path)
|
@@ -34,7 +38,7 @@ module DiffInfluence
|
|
34
38
|
lines.each_with_index do |line, idx|
|
35
39
|
method_line = line =~ /(\s|\t|;)def\s/
|
36
40
|
if method_line
|
37
|
-
last_method = lines[idx].split(
|
41
|
+
last_method = lines[idx].split('def ').last.chomp.gsub('self.', '').gsub(/\(.*\z/, '')
|
38
42
|
self.debug_log "Method line => #{last_method}"
|
39
43
|
end
|
40
44
|
case line
|
@@ -46,17 +50,12 @@ module DiffInfluence
|
|
46
50
|
self.debug_log "idx:#{idx}, cnt:#{cnt}, #{line}"
|
47
51
|
|
48
52
|
t = if method_line
|
49
|
-
line =~ /\A\-/ ?
|
53
|
+
line =~ /\A\-/ ? 'remove' : 'add'
|
50
54
|
else
|
51
|
-
|
55
|
+
'effect'
|
52
56
|
end
|
53
57
|
|
54
|
-
methods.push EMeth.new(
|
55
|
-
name: last_method,
|
56
|
-
type: t,
|
57
|
-
raw: line,
|
58
|
-
index: cnt
|
59
|
-
)
|
58
|
+
methods.push EMeth.new(last_method,t,line,cnt)
|
60
59
|
else
|
61
60
|
cnt += 1
|
62
61
|
end
|
@@ -65,16 +64,16 @@ module DiffInfluence
|
|
65
64
|
methods
|
66
65
|
end
|
67
66
|
|
68
|
-
def self.os_grep(keyword=
|
69
|
-
|
70
|
-
puts `grep -r -E '(\\.|@)#{keyword}(\\s|\\()' #{pd}`
|
67
|
+
def self.os_grep(keyword='')
|
68
|
+
self.config.search_directories.each do |pd|
|
69
|
+
puts `grep -r -E '(\\.|@)#{Regexp.escape(keyword)}(\\s|\\()' #{pd}`
|
71
70
|
end
|
72
71
|
end
|
73
72
|
|
74
|
-
def self.native_grep(keyword=
|
73
|
+
def self.native_grep(keyword='')
|
75
74
|
self.files.each do |file|
|
76
75
|
File.readlines(file).each_with_index do |line, idx|
|
77
|
-
if line =~ /(\.|@)#{keyword}(\s|\()/
|
76
|
+
if line =~ /(\.|@)#{Regexp.escape(keyword)}(\s|\()/
|
78
77
|
puts "#{file}:#{idx+1} #{line}"
|
79
78
|
end
|
80
79
|
end
|
@@ -82,32 +81,41 @@ module DiffInfluence
|
|
82
81
|
end
|
83
82
|
|
84
83
|
def self.files
|
85
|
-
@@files ||= Dir.glob(
|
84
|
+
@@files ||= Dir.glob(self.config.search_directories.map{|d| "#{d}/**/**.{#{self.config.search_extensions.join(',')}}"})
|
86
85
|
end
|
87
86
|
|
88
87
|
def self.influence_search(file_path)
|
89
88
|
searched_methods = []
|
90
89
|
self.search_methods(file_path).each do |method|
|
91
|
-
if
|
90
|
+
if(
|
91
|
+
method.name.nil? || method.name.empty? ||
|
92
|
+
self.config.ignore_methods.include?(method.name) ||
|
93
|
+
searched_methods.include?(method.name)
|
94
|
+
)
|
92
95
|
next
|
93
96
|
else
|
94
97
|
searched_methods.push method.name
|
95
98
|
end
|
96
99
|
puts "### Searching method[#{method.name}] (from #{file_path}:#{method.index})"
|
97
|
-
|
98
|
-
self.os_grep method.name
|
99
|
-
else
|
100
|
-
self.native_grep method.name
|
101
|
-
end
|
100
|
+
self.grep method.name
|
102
101
|
puts
|
103
102
|
end
|
104
103
|
end
|
105
104
|
|
105
|
+
def self.grep(method_name)
|
106
|
+
if self.config.os_grep
|
107
|
+
self.os_grep method_name
|
108
|
+
else
|
109
|
+
self.native_grep method_name
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
106
113
|
def self.exec
|
107
114
|
self.file_paths.each do |fp|
|
108
115
|
self.influence_search fp
|
109
116
|
end
|
110
117
|
exit 0
|
111
118
|
end
|
119
|
+
|
112
120
|
end
|
113
121
|
end
|
@@ -1,17 +1,13 @@
|
|
1
1
|
module DiffInfluence
|
2
2
|
module Core
|
3
3
|
EMeth=Struct.new(:name, :type, :raw, :index)
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
self.type = attr[:type]
|
8
|
-
self.raw = attr[:raw]
|
9
|
-
self.index = attr[:index]
|
10
|
-
end
|
4
|
+
|
5
|
+
def self.config
|
6
|
+
DiffInfluence::Config
|
11
7
|
end
|
12
8
|
|
13
9
|
def self.debug_log(msg)
|
14
|
-
puts "[DEBUG] #{msg}" if
|
10
|
+
puts "[DEBUG] #{msg}" if self.config.debug
|
15
11
|
end
|
16
12
|
|
17
13
|
def self.git_status
|
@@ -19,11 +15,19 @@ module DiffInfluence
|
|
19
15
|
end
|
20
16
|
|
21
17
|
def self.file_paths
|
22
|
-
@@files ||= self.git_status.lines.to_a.map{|line|
|
18
|
+
@@files ||= self.git_status.lines.to_a.map {|line|
|
19
|
+
path = line.split.last
|
20
|
+
case path
|
21
|
+
when *self.config.search_directories.map{|d| /\A#{d}/}
|
22
|
+
path
|
23
|
+
else
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
}.compact
|
23
27
|
end
|
24
28
|
|
25
29
|
def self.git_diff(file_path)
|
26
|
-
`git --no-pager diff --no-ext-diff -U1000000 #{
|
30
|
+
`git --no-pager diff --no-ext-diff -U1000000 #{self.config.commits.join(' ')} #{file_path}`
|
27
31
|
end
|
28
32
|
|
29
33
|
def self.search_methods(file_path)
|
@@ -34,7 +38,7 @@ module DiffInfluence
|
|
34
38
|
lines.each_with_index do |line, idx|
|
35
39
|
method_line = line =~ /(\s|\t|;)def\s/
|
36
40
|
if method_line
|
37
|
-
last_method = lines[idx].split(
|
41
|
+
last_method = lines[idx].split('def ').last.chomp.gsub('self.', '').gsub(/\(.*\z/, '')
|
38
42
|
self.debug_log "Method line => #{last_method}"
|
39
43
|
end
|
40
44
|
case line
|
@@ -46,17 +50,12 @@ module DiffInfluence
|
|
46
50
|
self.debug_log "idx:#{idx}, cnt:#{cnt}, #{line}"
|
47
51
|
|
48
52
|
t = if method_line
|
49
|
-
line =~ /\A\-/ ?
|
53
|
+
line =~ /\A\-/ ? 'remove' : 'add'
|
50
54
|
else
|
51
|
-
|
55
|
+
'effect'
|
52
56
|
end
|
53
57
|
|
54
|
-
methods.push EMeth.new(
|
55
|
-
:name => last_method,
|
56
|
-
:type => t,
|
57
|
-
:raw => line,
|
58
|
-
:index => cnt
|
59
|
-
)
|
58
|
+
methods.push EMeth.new(last_method,t,line,cnt)
|
60
59
|
else
|
61
60
|
cnt += 1
|
62
61
|
end
|
@@ -65,16 +64,16 @@ module DiffInfluence
|
|
65
64
|
methods
|
66
65
|
end
|
67
66
|
|
68
|
-
def self.os_grep(keyword=
|
69
|
-
|
70
|
-
puts `grep -r -E '(\\.|@)#{keyword}(\\s|\\()' #{pd}`
|
67
|
+
def self.os_grep(keyword='')
|
68
|
+
self.config.search_directories.each do |pd|
|
69
|
+
puts `grep -r -E '(\\.|@)#{Regexp.escape(keyword)}(\\s|\\()' #{pd}`
|
71
70
|
end
|
72
71
|
end
|
73
72
|
|
74
|
-
def self.native_grep(keyword=
|
73
|
+
def self.native_grep(keyword='')
|
75
74
|
self.files.each do |file|
|
76
75
|
File.readlines(file).each_with_index do |line, idx|
|
77
|
-
if line =~ /(\.|@)#{keyword}(\s|\()/
|
76
|
+
if line =~ /(\.|@)#{Regexp.escape(keyword)}(\s|\()/
|
78
77
|
puts "#{file}:#{idx+1} #{line}"
|
79
78
|
end
|
80
79
|
end
|
@@ -82,32 +81,41 @@ module DiffInfluence
|
|
82
81
|
end
|
83
82
|
|
84
83
|
def self.files
|
85
|
-
@@files ||= Dir.glob(
|
84
|
+
@@files ||= Dir.glob(self.config.search_directories.map{|d| "#{d}/**/**.{#{self.config.search_extensions.join(',')}}"})
|
86
85
|
end
|
87
86
|
|
88
87
|
def self.influence_search(file_path)
|
89
88
|
searched_methods = []
|
90
89
|
self.search_methods(file_path).each do |method|
|
91
|
-
if
|
90
|
+
if(
|
91
|
+
method.name.nil? || method.name.empty? ||
|
92
|
+
self.config.ignore_methods.include?(method.name) ||
|
93
|
+
searched_methods.include?(method.name)
|
94
|
+
)
|
92
95
|
next
|
93
96
|
else
|
94
97
|
searched_methods.push method.name
|
95
98
|
end
|
96
99
|
puts "### Searching method[#{method.name}] (from #{file_path}:#{method.index})"
|
97
|
-
|
98
|
-
self.os_grep method.name
|
99
|
-
else
|
100
|
-
self.native_grep method.name
|
101
|
-
end
|
100
|
+
self.grep method.name
|
102
101
|
puts
|
103
102
|
end
|
104
103
|
end
|
105
104
|
|
105
|
+
def self.grep(method_name)
|
106
|
+
if self.config.os_grep
|
107
|
+
self.os_grep method_name
|
108
|
+
else
|
109
|
+
self.native_grep method_name
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
106
113
|
def self.exec
|
107
114
|
self.file_paths.each do |fp|
|
108
115
|
self.influence_search fp
|
109
116
|
end
|
110
117
|
exit 0
|
111
118
|
end
|
119
|
+
|
112
120
|
end
|
113
121
|
end
|
metadata
CHANGED
@@ -1,83 +1,96 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: diff_influence
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 15
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 0.4.0
|
5
11
|
platform: ruby
|
6
|
-
authors:
|
12
|
+
authors:
|
7
13
|
- metalels
|
8
14
|
autorequire:
|
9
15
|
bindir: exe
|
10
16
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
17
|
+
|
18
|
+
date: 2017-02-20 00:00:00 +09:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
14
22
|
name: bundler
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.12'
|
20
|
-
type: :development
|
21
23
|
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '10.0'
|
24
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 23
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 12
|
33
|
+
version: "1.12"
|
34
34
|
type: :development
|
35
|
+
requirement: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rake
|
35
38
|
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '3.0'
|
39
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 35
|
45
|
+
segments:
|
46
|
+
- 10
|
47
|
+
- 0
|
48
|
+
version: "10.0"
|
48
49
|
type: :development
|
50
|
+
requirement: *id002
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: rspec
|
49
53
|
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
54
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ~>
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 7
|
60
|
+
segments:
|
61
|
+
- 3
|
62
|
+
- 0
|
63
|
+
version: "3.0"
|
62
64
|
type: :development
|
65
|
+
requirement: *id003
|
66
|
+
- !ruby/object:Gem::Dependency
|
67
|
+
name: pry
|
63
68
|
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
|
69
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
66
72
|
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
hash: 3
|
75
|
+
segments:
|
76
|
+
- 0
|
77
|
+
version: "0"
|
78
|
+
type: :development
|
79
|
+
requirement: *id004
|
69
80
|
description: search diff influence.
|
70
|
-
email:
|
81
|
+
email:
|
71
82
|
- metalels86@gmail.com
|
72
|
-
executables:
|
83
|
+
executables:
|
73
84
|
- diff-influence
|
74
85
|
extensions: []
|
86
|
+
|
75
87
|
extra_rdoc_files: []
|
76
|
-
|
77
|
-
|
78
|
-
-
|
79
|
-
-
|
80
|
-
-
|
88
|
+
|
89
|
+
files:
|
90
|
+
- .diff-influence
|
91
|
+
- .gitignore
|
92
|
+
- .rspec
|
93
|
+
- .travis.yml
|
81
94
|
- Gemfile
|
82
95
|
- LICENSE
|
83
96
|
- README.md
|
@@ -89,30 +102,43 @@ files:
|
|
89
102
|
- exe/diff-influence
|
90
103
|
- lib/diff_influence.rb
|
91
104
|
- lib/diff_influence/config.rb
|
105
|
+
- lib/diff_influence/config_1x.rb
|
92
106
|
- lib/diff_influence/core.rb
|
93
107
|
- lib/diff_influence/core_1x.rb
|
94
108
|
- lib/diff_influence/version.rb
|
109
|
+
has_rdoc: true
|
95
110
|
homepage: https://github.com/metalels/diff_influence
|
96
111
|
licenses: []
|
97
|
-
|
112
|
+
|
98
113
|
post_install_message:
|
99
114
|
rdoc_options: []
|
100
|
-
|
115
|
+
|
116
|
+
require_paths:
|
101
117
|
- lib
|
102
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
103
|
-
|
118
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
119
|
+
none: false
|
120
|
+
requirements:
|
104
121
|
- - ">="
|
105
|
-
- !ruby/object:Gem::Version
|
106
|
-
|
107
|
-
|
108
|
-
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
hash: 3
|
124
|
+
segments:
|
125
|
+
- 0
|
126
|
+
version: "0"
|
127
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
129
|
+
requirements:
|
109
130
|
- - ">="
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
hash: 3
|
133
|
+
segments:
|
134
|
+
- 0
|
135
|
+
version: "0"
|
112
136
|
requirements: []
|
137
|
+
|
113
138
|
rubyforge_project:
|
114
|
-
rubygems_version:
|
139
|
+
rubygems_version: 1.6.2
|
115
140
|
signing_key:
|
116
|
-
specification_version:
|
141
|
+
specification_version: 3
|
117
142
|
summary: search diff influence.
|
118
143
|
test_files: []
|
144
|
+
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: ded887aba89fc0d05fad74e61bb45011e6d30006
|
4
|
-
data.tar.gz: 4489751b59a9e8f84022dd27fa8df69f9c03d216
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 834c1c313cbe4cbee59e1d6b4ed41a654cfd4ee1c8013c50cd09a634566ad95d6bad8111e4133d8d5e44e643e449c159538eb39207412b69ae7ed8965b6150c1
|
7
|
-
data.tar.gz: 7ed8af9057c906a990d3448582a20f77de7818ecd39bf66de8a1c4070ccf4f0fc4b632cd7c95a8dce2fe6cae736e144427b4c866011647af0ca76e180e23075b
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.3.1
|