diggit 2.0.1 → 2.0.2
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/CHANGELOG.md +8 -0
- data/bin/dgit +166 -157
- data/lib/dgit.rb +4 -5
- data/lib/dgit/core.rb +18 -12
- data/lib/dgit/log.rb +1 -2
- data/lib/dgit/plugins.rb +29 -6
- data/lib/dgit/version.rb +1 -2
- data/plugins/addon/db.rb +10 -5
- data/plugins/addon/out.rb +0 -1
- data/plugins/addon/r.rb +0 -1
- data/plugins/addon/src_opt.rb +35 -0
- data/plugins/analysis/cloc.rb +14 -8
- data/plugins/analysis/cloc_per_file.rb +48 -0
- data/plugins/analysis/tex.rb +48 -0
- data/spec/core_spec.rb +32 -4
- data/spec/dgit/plugins/addon/test_addon.rb +0 -1
- data/spec/dgit/plugins/analysis/duplicate_analysis.rb +0 -1
- data/spec/dgit/plugins/analysis/my_module/duplicate_analysis.rb +0 -1
- data/spec/dgit/plugins/analysis/my_module/other_analysis.rb +0 -1
- data/spec/dgit/plugins/analysis/test_analysis.rb +0 -1
- data/spec/dgit/plugins/analysis/test_analysis_with_addon.rb +0 -1
- data/spec/dgit/plugins/analysis/test_analysis_with_error.rb +0 -1
- data/spec/dgit/plugins/analysis/test_analysis_with_sources_options.rb +34 -0
- data/spec/dgit/plugins/join/test_join.rb +2 -7
- data/spec/dgit/plugins/join/test_join_with_addon.rb +6 -1
- data/spec/spec_helper.rb +1 -1
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ea02ededd6c7a3836496975d8d994a75e131c4dc
|
4
|
+
data.tar.gz: efb7cd6e4cabca46c43449a71de61ed52b9233e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4eddd07d9a7102df17b2b8841d3f3c10ef11c1c60cb3d035cf43c3af5bcdc91c4adb5caa4ed814ab8d74dc97c8f6ff41ed0c98d43af3f9e76395163cb85d861
|
7
|
+
data.tar.gz: 59a4947128381985ad25d2b27aaa52b12ec48362c4cda8c0b885919fdab9504d54579dc15f29e5f841682e20c536e9e622c36df86fd82980d64a36dfa7e4bd13
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Changelog of Diggit
|
2
2
|
|
3
|
+
### Version 2.0.2
|
4
|
+
* Fixed analysis cleaning
|
5
|
+
* Fixed error in gemspec
|
6
|
+
* Now rspec is launched after rubocop.
|
7
|
+
* Dgit binary now takes a `-f` flag to indicates folder
|
8
|
+
* It is now possible to deletes joins and analyses from a dgit folder
|
9
|
+
* The `clone` commands has been renamed `clones` for consistency sake
|
10
|
+
|
3
11
|
### Version 2.0.1
|
4
12
|
* Removed `errors`command, merged with subcommands of `sources`
|
5
13
|
* Added a lot of documentation
|
data/bin/dgit
CHANGED
@@ -17,202 +17,211 @@
|
|
17
17
|
# along with Diggit. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#
|
19
19
|
# Copyright 2015 Jean-Rémy Falleri <jr.falleri@gmail.com>
|
20
|
-
#
|
21
20
|
|
22
21
|
require 'gli'
|
23
22
|
require_relative '../lib/dgit'
|
24
23
|
|
25
|
-
|
24
|
+
module Diggit
|
25
|
+
include GLI::App
|
26
26
|
|
27
|
-
|
27
|
+
extend self
|
28
|
+
program_desc 'A git repository analysis tool.'
|
28
29
|
|
29
|
-
switch [:v, :verbose], default_value: false, negatable: false, desc: "Indicates if the debug information are visible."
|
30
|
+
switch [:v, :verbose], default_value: false, negatable: false, desc: "Indicates if the debug information are visible."
|
31
|
+
flag [:f, :folder], default_value: ".", desc: "Path to the diggit folder. Default: current folder."
|
30
32
|
|
31
|
-
version Diggit::VERSION
|
33
|
+
version Diggit::VERSION
|
32
34
|
|
33
|
-
subcommand_option_handling :normal
|
34
|
-
arguments :strict
|
35
|
+
subcommand_option_handling :normal
|
36
|
+
arguments :strict
|
35
37
|
|
36
|
-
desc 'Init a diggit folder.'
|
37
|
-
skips_pre
|
38
|
-
command :init do |c|
|
39
|
-
|
40
|
-
|
41
|
-
|
38
|
+
desc 'Init a diggit folder.'
|
39
|
+
skips_pre
|
40
|
+
command :init do |c|
|
41
|
+
c.action do |globals, _options, _args|
|
42
|
+
Diggit::Dig.init_dir globals[:f]
|
43
|
+
Log.ok "Diggit folder initialized."
|
44
|
+
end
|
42
45
|
end
|
43
|
-
end
|
44
46
|
|
45
|
-
desc 'Display the status of the diggit folder.'
|
46
|
-
command :status do |c|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
47
|
+
desc 'Display the status of the diggit folder.'
|
48
|
+
command :status do |c|
|
49
|
+
c.action do |_global_options, _options, _args|
|
50
|
+
Log.info "Config"
|
51
|
+
Log.info "======"
|
52
|
+
Log.info "- Analyses: #{Diggit::Dig.it.config.get_analyses.join(', ')}"
|
53
|
+
Log.info "- Joins: #{Diggit::Dig.it.config.get_joins.join(', ')}"
|
54
|
+
Log.info ""
|
55
|
+
Log.info "Journal"
|
56
|
+
Log.info "======="
|
57
|
+
Log.info "- New sources:"
|
58
|
+
Log.indent do
|
59
|
+
Log.ok "* Ok: #{Diggit::Dig.it.journal.sources_by_state(:new).size}"
|
60
|
+
Log.error "* Error: #{Diggit::Dig.it.journal.sources_by_state(:new, true).size}"
|
61
|
+
end
|
62
|
+
Log.info "- Cloned sources:"
|
63
|
+
Log.indent do
|
64
|
+
Log.ok "* Ok: #{Diggit::Dig.it.journal.sources_by_state(:cloned).size}"
|
65
|
+
Log.error "* Error: #{Diggit::Dig.it.journal.sources_by_state(:cloned, true).size}"
|
66
|
+
end
|
64
67
|
end
|
65
68
|
end
|
66
|
-
end
|
67
69
|
|
68
|
-
desc 'Manage the sources of the diggit folder.'
|
69
|
-
command :sources do |c|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
70
|
+
desc 'Manage the sources of the diggit folder.'
|
71
|
+
command :sources do |c|
|
72
|
+
c.desc 'List the sources.'
|
73
|
+
c.command :list do |list|
|
74
|
+
list.action do |_global_options, _options, _args|
|
75
|
+
sources = Diggit::Dig.it.journal.sources
|
76
|
+
sources.each_index do |idx|
|
77
|
+
msg = "#{idx} #{sources[idx].url} (#{sources[idx].state})"
|
78
|
+
sources[idx].error? ? Log.error(msg) : Log.ok(msg)
|
79
|
+
end
|
77
80
|
end
|
78
81
|
end
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
82
|
+
c.desc 'Add a source.'
|
83
|
+
c.arg_name 'url'
|
84
|
+
c.command :add do |add|
|
85
|
+
add.action do |_global_options, _options, args|
|
86
|
+
Diggit::Dig.it.journal.add_source args[0]
|
87
|
+
end
|
85
88
|
end
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
89
|
+
c.desc 'Import sources from a file.'
|
90
|
+
c.arg_name 'file'
|
91
|
+
c.command :import do |import|
|
92
|
+
import.action do |_global_options, _options, args|
|
93
|
+
File.open(args[0]).each { |line| Diggit::Dig.it.journal.add_source(line) }
|
94
|
+
end
|
92
95
|
end
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
96
|
+
c.desc 'Display all sources in error.'
|
97
|
+
c.command :errors do |errors|
|
98
|
+
errors.action do |_global_options, _options, _args|
|
99
|
+
sources = Diggit::Dig.it.journal.sources
|
100
|
+
sources.each_index do |idx|
|
101
|
+
msg = "#{idx} #{sources[idx].url} (#{sources[idx].state})"
|
102
|
+
Log.error msg if sources[idx].error?
|
103
|
+
end
|
101
104
|
end
|
102
105
|
end
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
106
|
+
c.desc 'Display information on a source'
|
107
|
+
c.arg_name 'id'
|
108
|
+
c.command :info do |info|
|
109
|
+
info.action do |_global_options, _options, args|
|
110
|
+
src = Diggit::Dig.it.journal.sources_by_ids(args[0].to_i)[0]
|
111
|
+
url = "URL: #{src.url}"
|
112
|
+
src.error? ? Log.error(url) : Log.info(url)
|
113
|
+
Log.info "State: #{src.state}"
|
114
|
+
Log.info "Performed analyses: #{src.performed_analyses.join(', ')}" unless src.performed_analyses.empty?
|
115
|
+
Log.error "Ongoing analyses: #{src.ongoing_analyses.join(', ')}" unless src.ongoing_analyses.empty?
|
116
|
+
if src.error?
|
117
|
+
error = src.error
|
118
|
+
Log.indent do
|
119
|
+
Log.error error[:message]
|
120
|
+
Log.info error[:backtrace].join("\n")
|
121
|
+
end
|
119
122
|
end
|
120
123
|
end
|
121
124
|
end
|
125
|
+
c.default_command :list
|
122
126
|
end
|
123
|
-
c.default_command :list
|
124
|
-
end
|
125
127
|
|
126
|
-
desc 'Manage the joins of the diggit folder.'
|
127
|
-
command :joins do |c|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
128
|
+
desc 'Manage the joins of the diggit folder.'
|
129
|
+
command :joins do |c|
|
130
|
+
c.desc 'List the joins'
|
131
|
+
c.command :list do |list|
|
132
|
+
list.action do |_global_options, _options, _args|
|
133
|
+
Diggit::Dig.it.config.get_joins.each { |a| Log.info a.name }
|
134
|
+
end
|
132
135
|
end
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
136
|
+
c.desc 'Add a join.'
|
137
|
+
c.arg_name 'name'
|
138
|
+
c.command :add do |add|
|
139
|
+
add.action do |_global_options, _options, args|
|
140
|
+
Diggit::Dig.it.config.add_join args[0]
|
141
|
+
end
|
139
142
|
end
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
must_match: { "run" => :run, "clean" => :clean, "rerun" => :rerun }, default_value: :run
|
147
|
-
perform.action do |_global_options, options, _args|
|
148
|
-
Diggit::Dig.it.join(options[:s], options[:a], options[:m])
|
143
|
+
c.desc 'Delete a join.'
|
144
|
+
c.arg_name 'name'
|
145
|
+
c.command :del do |del|
|
146
|
+
del.action do |_global_options, _options, args|
|
147
|
+
Diggit::Dig.it.config.del_join args[0]
|
148
|
+
end
|
149
149
|
end
|
150
|
+
c.desc 'Perform joins.'
|
151
|
+
c.command :perform do |perform|
|
152
|
+
perform.flag [:s, :sources], desc: "list of sources", type: Array, default_value: []
|
153
|
+
perform.flag [:a, :analyses], desc: "list of analyses", type: Array, default_value: []
|
154
|
+
perform.flag [:m, :mode], desc: "running mode",
|
155
|
+
must_match: { "run" => :run, "clean" => :clean, "rerun" => :rerun }, default_value: :run
|
156
|
+
perform.action do |_global_options, options, _args|
|
157
|
+
Diggit::Dig.it.join(options[:s], options[:a], options[:m])
|
158
|
+
end
|
159
|
+
end
|
160
|
+
c.default_command :list
|
150
161
|
end
|
151
|
-
c.default_command :list
|
152
|
-
end
|
153
162
|
|
154
|
-
desc 'Manage the analyses of the diggit folder.'
|
155
|
-
command :analyses do |c|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
163
|
+
desc 'Manage the analyses of the diggit folder.'
|
164
|
+
command :analyses do |c|
|
165
|
+
c.desc 'List the analyses'
|
166
|
+
c.command :list do |list|
|
167
|
+
list.action do |_global_options, _options, _args|
|
168
|
+
Diggit::Dig.it.config.get_analyses.each { |a| Log.info a.name }
|
169
|
+
end
|
160
170
|
end
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
171
|
+
c.desc 'Add an analysis.'
|
172
|
+
c.arg_name 'name'
|
173
|
+
c.command :add do |add|
|
174
|
+
add.action do |_global_options, _options, args|
|
175
|
+
Diggit::Dig.it.config.add_analysis args[0]
|
176
|
+
end
|
167
177
|
end
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
178
|
+
c.desc 'Delete an analysis.'
|
179
|
+
c.arg_name 'name'
|
180
|
+
c.command :del do |del|
|
181
|
+
del.action do |_global_options, _options, args|
|
182
|
+
Diggit::Dig.it.config.del_analysis args[0]
|
183
|
+
end
|
174
184
|
end
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
185
|
+
c.desc 'Perform analyses.'
|
186
|
+
c.command :perform do |perform|
|
187
|
+
perform.flag [:s, :sources], desc: "list of sources", type: Array, default_value: []
|
188
|
+
perform.flag [:a, :analyses], desc: "list of analyses", type: Array, default_value: []
|
189
|
+
perform.flag [:m, :mode], desc: "running mode",
|
190
|
+
must_match: { "run" => :run, "clean" => :clean, "rerun" => :rerun }, default_value: :run
|
191
|
+
perform.action do |_global_options, options, _args|
|
192
|
+
Diggit::Dig.it.analyze(options[:s], options[:a], options[:m])
|
193
|
+
end
|
184
194
|
end
|
195
|
+
c.default_command :list
|
185
196
|
end
|
186
|
-
c.default_command :list
|
187
|
-
end
|
188
197
|
|
189
|
-
desc 'Manage clone actions.'
|
190
|
-
command :
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
198
|
+
desc 'Manage clone actions.'
|
199
|
+
command :clones do |c|
|
200
|
+
c.desc 'Perform the clones.'
|
201
|
+
c.command :perform do |perform|
|
202
|
+
perform.flag [:s, :sources], desc: "list of sources", type: Array, default_value: []
|
203
|
+
perform.action do |_global_options, options, _args|
|
204
|
+
Diggit::Dig.it.clone(*options[:s])
|
205
|
+
end
|
196
206
|
end
|
207
|
+
c.default_command :perform
|
208
|
+
end
|
209
|
+
pre do |globals, _command, _options, _args|
|
210
|
+
Diggit::Dig.init globals[:f]
|
211
|
+
Log.level = :fine if globals[:v]
|
212
|
+
true
|
197
213
|
end
|
198
|
-
c.default_command :perform
|
199
|
-
end
|
200
214
|
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
true
|
205
|
-
end
|
215
|
+
post do |_global, _command, _options, _args|
|
216
|
+
# Post logic here, skips_post to skip commands
|
217
|
+
end
|
206
218
|
|
207
|
-
|
208
|
-
|
209
|
-
|
219
|
+
on_error do |exception|
|
220
|
+
Log.error "Error running diggit."
|
221
|
+
Log.error exception.message
|
222
|
+
Log.info exception.backtrace.join("\n")
|
223
|
+
false
|
224
|
+
end
|
210
225
|
|
211
|
-
|
212
|
-
Log.error "Error running diggit."
|
213
|
-
Log.error exception.message
|
214
|
-
Log.info exception.backtrace.join("\n")
|
215
|
-
false
|
226
|
+
exit run(ARGV)
|
216
227
|
end
|
217
|
-
|
218
|
-
exit run(ARGV)
|
data/lib/dgit.rb
CHANGED
@@ -16,9 +16,8 @@
|
|
16
16
|
# along with Diggit. If not, see <http://www.gnu.org/licenses/>.
|
17
17
|
#
|
18
18
|
# Copyright 2015 Jean-Rémy Falleri <jr.falleri@gmail.com>
|
19
|
-
#
|
20
19
|
|
21
|
-
require_relative
|
22
|
-
require_relative
|
23
|
-
require_relative
|
24
|
-
require_relative
|
20
|
+
require_relative 'dgit/core'
|
21
|
+
require_relative 'dgit/plugins'
|
22
|
+
require_relative 'dgit/version'
|
23
|
+
require_relative 'dgit/log'
|
data/lib/dgit/core.rb
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
# along with Diggit. If not, see <http://www.gnu.org/licenses/>.
|
17
17
|
#
|
18
18
|
# Copyright 2015 Jean-Rémy Falleri <jr.falleri@gmail.com>
|
19
|
-
#
|
19
|
+
# Copyright 2015 Matthieu Foucault <foucaultmatthieu@gmail.com>
|
20
20
|
|
21
21
|
require 'oj'
|
22
22
|
require 'rugged'
|
@@ -113,6 +113,11 @@ module Diggit
|
|
113
113
|
@entry[:ongoing_analyses]
|
114
114
|
end
|
115
115
|
|
116
|
+
def clean_analysis(analysis)
|
117
|
+
performed_analyses.delete_if { |e| e == analysis.name }
|
118
|
+
ongoing_analyses.delete_if { |e| e == analysis.name }
|
119
|
+
end
|
120
|
+
|
116
121
|
def clone
|
117
122
|
if File.exist?(folder)
|
118
123
|
Rugged::Repository.new(folder)
|
@@ -120,6 +125,7 @@ module Diggit
|
|
120
125
|
Rugged::Repository.clone_at(url, folder)
|
121
126
|
end
|
122
127
|
self.state = :cloned
|
128
|
+
self.error = nil
|
123
129
|
rescue => e
|
124
130
|
Log.error "Error cloning #{url}."
|
125
131
|
self.error = Journal.dump_error(e)
|
@@ -226,11 +232,11 @@ module Diggit
|
|
226
232
|
end
|
227
233
|
|
228
234
|
def to_hash
|
229
|
-
{ analyses: @analyses.map(&:
|
235
|
+
{ analyses: @analyses.map(&:simple_name), joins: @joins.map(&:simple_name) }
|
230
236
|
end
|
231
237
|
|
232
238
|
def add_analysis(name)
|
233
|
-
load_analysis(name) unless @analyses.map(&:
|
239
|
+
load_analysis(name) unless @analyses.map(&:simple_name).include?(name)
|
234
240
|
Dig.it.save_config
|
235
241
|
end
|
236
242
|
|
@@ -239,17 +245,17 @@ module Diggit
|
|
239
245
|
end
|
240
246
|
|
241
247
|
def del_analysis(name)
|
242
|
-
@analyses.delete_if { |a| a.
|
248
|
+
@analyses.delete_if { |a| a.simple_name == name }
|
243
249
|
Dig.it.save_config
|
244
250
|
end
|
245
251
|
|
246
252
|
def get_analyses(*names)
|
247
253
|
return analyses if names.empty?
|
248
|
-
analyses.select { |a| names.include?(a.
|
254
|
+
analyses.select { |a| names.include?(a.simple_name) }
|
249
255
|
end
|
250
256
|
|
251
257
|
def add_join(name)
|
252
|
-
load_join(name) unless @joins.map(&:
|
258
|
+
load_join(name) unless @joins.map(&:simple_name).include?(name)
|
253
259
|
Dig.it.save_config
|
254
260
|
end
|
255
261
|
|
@@ -258,13 +264,13 @@ module Diggit
|
|
258
264
|
end
|
259
265
|
|
260
266
|
def del_join(name)
|
261
|
-
@joins.delete_if { |j| j.
|
267
|
+
@joins.delete_if { |j| j.simple_name == name }
|
262
268
|
Dig.it.save_config
|
263
269
|
end
|
264
270
|
|
265
271
|
def get_joins(*names)
|
266
272
|
return joins if names.empty?
|
267
|
-
joins.select { |j| joins.include?(j.
|
273
|
+
joins.select { |j| joins.include?(j.simple_name) }
|
268
274
|
end
|
269
275
|
|
270
276
|
def self.empty_config
|
@@ -303,7 +309,7 @@ module Diggit
|
|
303
309
|
end
|
304
310
|
|
305
311
|
def self.plugin_paths(name, type, root)
|
306
|
-
Dir.glob(File.join(root, 'plugins', type.to_s, '**', "#{name}.rb"))
|
312
|
+
Dir.glob(File.join(root, 'plugins', type.to_s, '**{,/*/**}', "#{name}.rb"))
|
307
313
|
end
|
308
314
|
|
309
315
|
# Constructor. Should not be called directly. Use {.instance} instead.
|
@@ -386,7 +392,7 @@ module Diggit
|
|
386
392
|
end
|
387
393
|
|
388
394
|
# Initialize and return the diggit instance into the given folder.
|
389
|
-
# @param folder the path to the folder.
|
395
|
+
# @param folder [String] the path to the folder.
|
390
396
|
# @return [Dig] the instance.
|
391
397
|
def self.init(folder = '.')
|
392
398
|
@diggit = Dig.new(folder)
|
@@ -401,7 +407,7 @@ module Diggit
|
|
401
407
|
# It creates a +sources+ folder.
|
402
408
|
# It creates a +plugins+ folder.
|
403
409
|
# Directory creation is skipped if folder already exist.
|
404
|
-
# @param folder the path to the folder.
|
410
|
+
# @param folder [String] the path to the folder.
|
405
411
|
# @return [void]
|
406
412
|
def self.init_dir(folder = '.')
|
407
413
|
dgit_folder = File.expand_path(DGIT_FOLDER, folder)
|
@@ -541,7 +547,7 @@ module Diggit
|
|
541
547
|
|
542
548
|
def clean_analysis(s, a)
|
543
549
|
a.clean
|
544
|
-
s.
|
550
|
+
s.clean_analysis(a)
|
545
551
|
ensure
|
546
552
|
save_journal
|
547
553
|
end
|
data/lib/dgit/log.rb
CHANGED
@@ -16,7 +16,6 @@
|
|
16
16
|
# along with Diggit. If not, see <http://www.gnu.org/licenses/>.
|
17
17
|
#
|
18
18
|
# Copyright 2015 Jean-Rémy Falleri <jr.falleri@gmail.com>
|
19
|
-
#
|
20
19
|
|
21
20
|
require 'formatador'
|
22
21
|
|
@@ -48,7 +47,7 @@ class Formatador
|
|
48
47
|
end
|
49
48
|
|
50
49
|
def self.visible(method)
|
51
|
-
target
|
50
|
+
target = method.to_sym
|
52
51
|
if target == :ok || target == :error || target == :info
|
53
52
|
true
|
54
53
|
elsif (target == :warn || target == :debug) && level == :fine
|
data/lib/dgit/plugins.rb
CHANGED
@@ -16,7 +16,6 @@
|
|
16
16
|
# along with Diggit. If not, see <http://www.gnu.org/licenses/>.
|
17
17
|
#
|
18
18
|
# Copyright 2015 Jean-Rémy Falleri <jr.falleri@gmail.com>
|
19
|
-
#
|
20
19
|
|
21
20
|
require_relative 'core'
|
22
21
|
|
@@ -33,13 +32,27 @@ module Diggit
|
|
33
32
|
@options = options
|
34
33
|
end
|
35
34
|
|
35
|
+
# Returns the name of the plugin class
|
36
|
+
# @return [String]
|
36
37
|
def name
|
37
38
|
self.class.name
|
38
39
|
end
|
39
40
|
|
41
|
+
# Returns the name of the plugin class
|
42
|
+
# @return [String]
|
40
43
|
def self.name
|
41
44
|
to_s.underscore
|
42
45
|
end
|
46
|
+
|
47
|
+
# Returns the value of a plugin option
|
48
|
+
# @param ns [Symbol] the name of the option's namespace
|
49
|
+
# @param opt [Symbol] the name of the option
|
50
|
+
# @param default [Object] the default value
|
51
|
+
# @return [Object]
|
52
|
+
def read_option(ns, opt, default)
|
53
|
+
return @options[ns][opt] if @options.key?(ns) && @options[ns].key?(opt)
|
54
|
+
default
|
55
|
+
end
|
43
56
|
end
|
44
57
|
|
45
58
|
class Addon < Plugin
|
@@ -48,7 +61,9 @@ module Diggit
|
|
48
61
|
end
|
49
62
|
end
|
50
63
|
|
51
|
-
# Base class for analyses and joins.
|
64
|
+
# Base class for analyses and joins.
|
65
|
+
# Runnables can be runned or cleaned.
|
66
|
+
# A clean of a runnable should always work, even if it has never been run.
|
52
67
|
# These methods have to be implemented in the subclasses.
|
53
68
|
# Addons can be made available to a runnable through a call to {.require\_addons}.
|
54
69
|
# Addons can be accessed through the addons attribute, and they contain
|
@@ -81,7 +96,7 @@ module Diggit
|
|
81
96
|
|
82
97
|
# Add an addon as a required addon.
|
83
98
|
#
|
84
|
-
# @param names Array<String> the names of addons to require.
|
99
|
+
# @param names [Array<String>] the names of addons to require.
|
85
100
|
# They correspond to the name of their class with underscore case.
|
86
101
|
# @return [void]
|
87
102
|
def self.require_addons(*names)
|
@@ -89,8 +104,9 @@ module Diggit
|
|
89
104
|
end
|
90
105
|
|
91
106
|
def self.required_addons
|
92
|
-
|
93
|
-
@required_addons
|
107
|
+
base_addons = superclass < Runnable ? superclass.required_addons : []
|
108
|
+
return base_addons if @required_addons.nil?
|
109
|
+
base_addons + @required_addons
|
94
110
|
end
|
95
111
|
end
|
96
112
|
|
@@ -128,7 +144,7 @@ module Diggit
|
|
128
144
|
|
129
145
|
# Add an analysis as a required analysis.
|
130
146
|
#
|
131
|
-
# @param names Array<String> the names of analyses to require.
|
147
|
+
# @param names [Array<String>] the names of analyses to require.
|
132
148
|
# They correspond to the name of their class with underscore case.
|
133
149
|
# @return [void]
|
134
150
|
def self.require_analyses(*names)
|
@@ -169,5 +185,12 @@ module Diggit
|
|
169
185
|
super(options)
|
170
186
|
@source = nil
|
171
187
|
end
|
188
|
+
|
189
|
+
# Returns the rugged repository associated to the source.
|
190
|
+
#
|
191
|
+
# @return [Rugged::Repository]
|
192
|
+
def repo
|
193
|
+
@source.repository
|
194
|
+
end
|
172
195
|
end
|
173
196
|
end
|
data/lib/dgit/version.rb
CHANGED
data/plugins/addon/db.rb
CHANGED
@@ -16,7 +16,6 @@
|
|
16
16
|
# along with Diggit. If not, see <http://www.gnu.org/licenses/>.
|
17
17
|
#
|
18
18
|
# Copyright 2015 Jean-Rémy Falleri <jr.falleri@gmail.com>
|
19
|
-
#
|
20
19
|
|
21
20
|
require 'mongo'
|
22
21
|
|
@@ -26,14 +25,20 @@ require 'mongo'
|
|
26
25
|
# @!attribute [r] db
|
27
26
|
# @return [Mongo::DB] the mongo database object.
|
28
27
|
class Db < Diggit::Addon
|
29
|
-
|
28
|
+
DEFAULT_SERVER = '127.0.0.1:27017'
|
29
|
+
DEFAULT_DB = 'diggit'
|
30
30
|
|
31
31
|
attr_reader :client
|
32
32
|
|
33
33
|
def initialize(*args)
|
34
34
|
super
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
Mongo::Logger.logger.level = ::Logger::FATAL
|
36
|
+
server = read_option(:mongo, :server, DEFAULT_SERVER)
|
37
|
+
db = read_option(:mongo, :db, DEFAULT_DB)
|
38
|
+
@client = Mongo::Client.new([server], database: db)
|
39
|
+
end
|
40
|
+
|
41
|
+
def insert(collection, data)
|
42
|
+
client[collection].bulk_write(data.map { |d| { insert_one: d } }, ordered: true) unless data.empty?
|
38
43
|
end
|
39
44
|
end
|
data/plugins/addon/out.rb
CHANGED
@@ -16,7 +16,6 @@
|
|
16
16
|
# along with Diggit. If not, see <http://www.gnu.org/licenses/>.
|
17
17
|
#
|
18
18
|
# Copyright 2015 Jean-Rémy Falleri <jr.falleri@gmail.com>
|
19
|
-
#
|
20
19
|
|
21
20
|
# A output addon for Diggit. The name of the addon is :output, and can be reached in the
|
22
21
|
# addons hash. This addon might use an :output hash in the global options. In this hash, the
|
data/plugins/addon/r.rb
CHANGED
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# This file is part of Diggit.
|
4
|
+
#
|
5
|
+
# Diggit is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# Diggit is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU Lesser General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
16
|
+
# along with Diggit. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
#
|
18
|
+
# Copyright 2015 Jean-Rémy Falleri <jr.falleri@gmail.com>
|
19
|
+
# Copyright 2015 Matthieu Foucault <foucaultmatthieu@gmail.com>
|
20
|
+
|
21
|
+
# Manages options that are specific to a given source
|
22
|
+
class SrcOpt < Diggit::Addon
|
23
|
+
SOURCES_OPTIONS_FILE = 'sources_options'
|
24
|
+
|
25
|
+
def initialize(*args)
|
26
|
+
super
|
27
|
+
sources_options_path = Diggit::Dig.it.config_path(SOURCES_OPTIONS_FILE)
|
28
|
+
@sources_options = {}
|
29
|
+
@sources_options = Oj.load_file(sources_options_path) if File.exist? sources_options_path
|
30
|
+
end
|
31
|
+
|
32
|
+
def [](source)
|
33
|
+
@sources_options[source.url]
|
34
|
+
end
|
35
|
+
end
|
data/plugins/analysis/cloc.rb
CHANGED
@@ -16,7 +16,6 @@
|
|
16
16
|
# along with Diggit. If not, see <http://www.gnu.org/licenses/>.
|
17
17
|
#
|
18
18
|
# Copyright 2015 Jean-Rémy Falleri <jr.falleri@gmail.com>
|
19
|
-
#
|
20
19
|
|
21
20
|
require 'yaml'
|
22
21
|
|
@@ -28,15 +27,22 @@ class Cloc < Diggit::Analysis
|
|
28
27
|
end
|
29
28
|
|
30
29
|
def run
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
30
|
+
walker = Rugged::Walker.new(repo)
|
31
|
+
walker.sorting(Rugged::SORT_TOPO | Rugged::SORT_REVERSE)
|
32
|
+
walker.push(repo.head.name)
|
33
|
+
walker.each do |c|
|
34
|
+
repo.checkout(c.oid, { strategy: [:force, :remove_untracked] })
|
35
|
+
cloc = `cloc #{@source.folder} --progress-rate=0 --quiet --yaml`
|
36
|
+
next if cloc.empty?
|
37
|
+
yaml = YAML.load(cloc.lines[2..-1].join)
|
38
|
+
yaml.delete('header')
|
39
|
+
output = { source: @source.url, commit: c.oid, cloc: yaml }
|
40
|
+
db.client['cloc'].insert_one(output)
|
41
|
+
end
|
37
42
|
end
|
38
43
|
|
39
44
|
def clean
|
40
|
-
db.client['cloc'].find({ source: @source.url }).
|
45
|
+
db.client['cloc'].find({ source: @source.url }).delete_many
|
46
|
+
repo.checkout('master')
|
41
47
|
end
|
42
48
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# This file is part of Diggit.
|
4
|
+
#
|
5
|
+
# Diggit is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# Diggit is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU Lesser General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
16
|
+
# along with Diggit. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
#
|
18
|
+
# Copyright 2015 Jean-Rémy Falleri <jr.falleri@gmail.com>
|
19
|
+
# Copyright 2015 Matthieu Foucault <foucaultmatthieu@gmail.com>
|
20
|
+
|
21
|
+
class ClocPerFile < Diggit::Analysis
|
22
|
+
require_addons 'db', 'src_opt'
|
23
|
+
|
24
|
+
def run
|
25
|
+
commit_oid = src_opt[@source]["cloc-commit-id"] unless src_opt[@source].nil?
|
26
|
+
commit_oid = 'HEAD' if commit_oid.nil?
|
27
|
+
repo.checkout(commit_oid, { strategy: [:force, :remove_untracked] })
|
28
|
+
folder = File.expand_path(@source.folder)
|
29
|
+
cloc = `cloc #{folder} --progress-rate=0 --quiet --by-file --yaml --script-lang=Python,python`
|
30
|
+
return if cloc.empty?
|
31
|
+
yaml = YAML.load(cloc.lines[2..-1].join)
|
32
|
+
yaml.delete('header')
|
33
|
+
yaml.delete('SUM')
|
34
|
+
cloc_a = []
|
35
|
+
yaml.each do |key, value|
|
36
|
+
# transform the hash so the filenames are not keys anymore (as they may contain a '.' it is incompatible with mongo)
|
37
|
+
path = File.expand_path(key).gsub(folder, '').gsub(%r{^/}, '')
|
38
|
+
cloc_a << value.merge({ path: path })
|
39
|
+
end
|
40
|
+
output = { source: @source.url, commit_oid: commit_oid.to_s, cloc: cloc_a }
|
41
|
+
col = db.client['cloc-file']
|
42
|
+
col.insert_one(output)
|
43
|
+
end
|
44
|
+
|
45
|
+
def clean
|
46
|
+
db.client['cloc-file'].find({ source: @source.url }).delete_one
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# This file is part of Diggit.
|
4
|
+
#
|
5
|
+
# Diggit is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# Diggit is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU Lesser General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
16
|
+
# along with Diggit. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
#
|
18
|
+
# Copyright 2015 Jean-Rémy Falleri <jr.falleri@gmail.com>
|
19
|
+
|
20
|
+
require 'fileutils'
|
21
|
+
|
22
|
+
class Tex < Diggit::Analysis
|
23
|
+
require_addons 'out'
|
24
|
+
|
25
|
+
def initialize(options)
|
26
|
+
super(options)
|
27
|
+
end
|
28
|
+
|
29
|
+
def run
|
30
|
+
walker = Rugged::Walker.new(repo)
|
31
|
+
walker.sorting(Rugged::SORT_TOPO | Rugged::SORT_REVERSE)
|
32
|
+
walker.push(repo.head.name)
|
33
|
+
walker.each do |c|
|
34
|
+
repo.checkout(c.oid, { strategy: [:force, :remove_untracked] })
|
35
|
+
words = Dir["**/*.tex"].reduce(0) { |a, e| a + `cat "#{e}" | wc -w`.to_i }
|
36
|
+
File.open(file, 'a') { |f| f.puts("#{source.url};#{c.oid};#{words}\n") }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def clean
|
41
|
+
FileUtils.rm_rf(file)
|
42
|
+
repo.checkout("master")
|
43
|
+
end
|
44
|
+
|
45
|
+
def file
|
46
|
+
"#{out.out}/words.csv"
|
47
|
+
end
|
48
|
+
end
|
data/spec/core_spec.rb
CHANGED
@@ -16,7 +16,6 @@
|
|
16
16
|
# along with Diggit. If not, see <http://www.gnu.org/licenses/>.
|
17
17
|
#
|
18
18
|
# Copyright 2015 Jean-Rémy Falleri <jr.falleri@gmail.com>
|
19
|
-
#
|
20
19
|
|
21
20
|
require 'spec_helper'
|
22
21
|
require 'fileutils'
|
@@ -110,9 +109,10 @@ RSpec.describe Diggit::Dig do
|
|
110
109
|
|
111
110
|
it "should perform analyses in order" do
|
112
111
|
Diggit::Dig.it.config.add_analysis("test_analysis")
|
112
|
+
expect_any_instance_of(TestAnalysis).to receive(:run)
|
113
113
|
Diggit::Dig.it.config.add_analysis("test_analysis_with_addon")
|
114
|
+
expect_any_instance_of(TestAnalysisWithAddon).to receive(:run)
|
114
115
|
Diggit::Dig.it.analyze
|
115
|
-
# expect(TestAnalysis.state).to eq("runned")
|
116
116
|
expect(Diggit::Dig.it.journal.sources_by_ids(0)[0].all_analyses).to eq(%w(test_analysis test_analysis_with_addon))
|
117
117
|
Diggit::Dig.init("spec/dgit")
|
118
118
|
expect(Diggit::Dig.it.journal.sources_by_ids(0)[0].all_analyses).to eq(%w(test_analysis test_analysis_with_addon))
|
@@ -130,10 +130,38 @@ RSpec.describe Diggit::Dig do
|
|
130
130
|
it "should perform joins" do
|
131
131
|
Diggit::Dig.it.config.add_join("test_join")
|
132
132
|
Diggit::Dig.it.config.add_join("test_join_with_addon")
|
133
|
+
expect_any_instance_of(TestJoin).to receive(:run)
|
134
|
+
expect_any_instance_of(TestJoinWithAddon).not_to receive(:run)
|
133
135
|
Diggit::Dig.it.join
|
134
136
|
expect(Diggit::Dig.it.journal.join?("test_join")).to be true
|
135
|
-
expect(TestJoin.sources.size).to eq 1
|
136
|
-
expect(TestJoin.sources[0].url).to eq TEST_URL
|
137
137
|
expect(Diggit::Dig.it.journal.join?("test_join_with_addon")).to be false
|
138
138
|
end
|
139
|
+
|
140
|
+
it "should clean joins" do
|
141
|
+
expect_any_instance_of(TestJoin).to receive(:clean)
|
142
|
+
expect_any_instance_of(TestJoinWithAddon).to receive(:clean)
|
143
|
+
Diggit::Dig.it.join([], [], :clean)
|
144
|
+
end
|
145
|
+
|
146
|
+
it "should clean analyses" do
|
147
|
+
expect_any_instance_of(TestAnalysis).to receive(:clean)
|
148
|
+
expect_any_instance_of(TestAnalysisWithAddon).to receive(:clean)
|
149
|
+
Diggit::Dig.it.analyze([], [], :clean)
|
150
|
+
expect(Diggit::Dig.it.journal.sources_by_ids(0)[0].all_analyses).to eq([])
|
151
|
+
end
|
152
|
+
|
153
|
+
it "should read source options" do
|
154
|
+
File.open("spec/dgit/.dgit/sources_options", "w") do |f|
|
155
|
+
f.write('{
|
156
|
+
"https://github.com/jrfaller/test-git.git":{
|
157
|
+
"myOption":"myValue"
|
158
|
+
}
|
159
|
+
}')
|
160
|
+
end
|
161
|
+
|
162
|
+
Diggit::Dig.it.config.add_analysis("test_analysis_with_sources_options")
|
163
|
+
expect { Diggit::Dig.it.analyze }.to output(/myValue/).to_stdout
|
164
|
+
Diggit::Dig.it.analyze([], [], :clean)
|
165
|
+
Diggit::Dig.it.config.del_analysis("test_analysis_with_sources_options")
|
166
|
+
end
|
139
167
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# This file is part of Diggit.
|
4
|
+
#
|
5
|
+
# Diggit is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# Diggit is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU Lesser General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
16
|
+
# along with Diggit. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
#
|
18
|
+
# Copyright 2015 Jean-Rémy Falleri <jr.falleri@gmail.com>
|
19
|
+
#
|
20
|
+
|
21
|
+
class TestAnalysisWithSourcesOptions < Diggit::Analysis
|
22
|
+
require_addons "src_opt"
|
23
|
+
|
24
|
+
def initialize(*args)
|
25
|
+
super(args)
|
26
|
+
end
|
27
|
+
|
28
|
+
def run
|
29
|
+
p(src_opt[@source]["myOption"])
|
30
|
+
end
|
31
|
+
|
32
|
+
def clean
|
33
|
+
end
|
34
|
+
end
|
@@ -16,18 +16,13 @@
|
|
16
16
|
# along with Diggit. If not, see <http://www.gnu.org/licenses/>.
|
17
17
|
#
|
18
18
|
# Copyright 2015 Jean-Rémy Falleri <jr.falleri@gmail.com>
|
19
|
-
#
|
20
19
|
|
21
20
|
class TestJoin < Diggit::Join
|
22
21
|
require_analyses 'test_analysis'
|
23
22
|
|
24
|
-
|
25
|
-
attr_accessor :sources
|
23
|
+
def run
|
26
24
|
end
|
27
25
|
|
28
|
-
|
29
|
-
|
30
|
-
def run
|
31
|
-
self.class.sources = @sources
|
26
|
+
def clean
|
32
27
|
end
|
33
28
|
end
|
@@ -16,9 +16,14 @@
|
|
16
16
|
# along with Diggit. If not, see <http://www.gnu.org/licenses/>.
|
17
17
|
#
|
18
18
|
# Copyright 2015 Jean-Rémy Falleri <jr.falleri@gmail.com>
|
19
|
-
#
|
20
19
|
|
21
20
|
class TestJoinWithAddon < Diggit::Join
|
22
21
|
require_addons 'test_addon'
|
23
22
|
require_analyses 'test_analysis_with_error'
|
23
|
+
|
24
|
+
def run
|
25
|
+
end
|
26
|
+
|
27
|
+
def clean
|
28
|
+
end
|
24
29
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: diggit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jean-Rémy Falleri
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-10-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rugged
|
@@ -173,7 +173,10 @@ files:
|
|
173
173
|
- plugins/addon/db.rb
|
174
174
|
- plugins/addon/out.rb
|
175
175
|
- plugins/addon/r.rb
|
176
|
+
- plugins/addon/src_opt.rb
|
176
177
|
- plugins/analysis/cloc.rb
|
178
|
+
- plugins/analysis/cloc_per_file.rb
|
179
|
+
- plugins/analysis/tex.rb
|
177
180
|
- spec/core_spec.rb
|
178
181
|
- spec/dgit/plugins/addon/test_addon.rb
|
179
182
|
- spec/dgit/plugins/analysis/duplicate_analysis.rb
|
@@ -182,6 +185,7 @@ files:
|
|
182
185
|
- spec/dgit/plugins/analysis/test_analysis.rb
|
183
186
|
- spec/dgit/plugins/analysis/test_analysis_with_addon.rb
|
184
187
|
- spec/dgit/plugins/analysis/test_analysis_with_error.rb
|
188
|
+
- spec/dgit/plugins/analysis/test_analysis_with_sources_options.rb
|
185
189
|
- spec/dgit/plugins/join/test_join.rb
|
186
190
|
- spec/dgit/plugins/join/test_join_with_addon.rb
|
187
191
|
- spec/spec_helper.rb
|
@@ -205,7 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
205
209
|
version: '0'
|
206
210
|
requirements: []
|
207
211
|
rubyforge_project:
|
208
|
-
rubygems_version: 2.4.5
|
212
|
+
rubygems_version: 2.4.5.1
|
209
213
|
signing_key:
|
210
214
|
specification_version: 4
|
211
215
|
summary: A Git repository analysis tool.
|