diggit 2.0.2 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ea02ededd6c7a3836496975d8d994a75e131c4dc
4
- data.tar.gz: efb7cd6e4cabca46c43449a71de61ed52b9233e9
3
+ metadata.gz: 2fa14be04009f4668ce08541bcc05aa050308de7
4
+ data.tar.gz: 2f956728d1a7d6e2ea999a0d2aa59d60ecbad58a
5
5
  SHA512:
6
- metadata.gz: a4eddd07d9a7102df17b2b8841d3f3c10ef11c1c60cb3d035cf43c3af5bcdc91c4adb5caa4ed814ab8d74dc97c8f6ff41ed0c98d43af3f9e76395163cb85d861
7
- data.tar.gz: 59a4947128381985ad25d2b27aaa52b12ec48362c4cda8c0b885919fdab9504d54579dc15f29e5f841682e20c536e9e622c36df86fd82980d64a36dfa7e4bd13
6
+ metadata.gz: 53da80f0affd555bb133b5b36129772d1a915fb5d04661f1d5b7a7c94d00a1cf347d092d5775f05372bd7b434ee28a21e6b3c0822d4a84485e4d94c4e2c20d7c
7
+ data.tar.gz: 44488dca2f0ad7d39b788012e73c1ee17c608d958bde77be62cdb1cd6d20c5f84f11a6ac022e0e8663d0ad054a63f6bd89ce730e0a8d16d760ef477adbb82d90
@@ -1,5 +1,11 @@
1
1
  # Changelog of Diggit
2
2
 
3
+ ### Version 2.1.0
4
+ * Now repositories are reseted to master by default
5
+ * Journal infrastructure has been vastly improved
6
+ * Journal now records time for analyses and joins
7
+ * Journal now handles runnables with clean errors
8
+
3
9
  ### Version 2.0.2
4
10
  * Fixed analysis cleaning
5
11
  * Fixed error in gemspec
data/bin/dgit CHANGED
@@ -75,7 +75,7 @@ module Diggit
75
75
  sources = Diggit::Dig.it.journal.sources
76
76
  sources.each_index do |idx|
77
77
  msg = "#{idx} #{sources[idx].url} (#{sources[idx].state})"
78
- sources[idx].error? ? Log.error(msg) : Log.ok(msg)
78
+ sources[idx].entry.error? ? Log.error(msg) : Log.ok(msg)
79
79
  end
80
80
  end
81
81
  end
@@ -98,8 +98,8 @@ module Diggit
98
98
  errors.action do |_global_options, _options, _args|
99
99
  sources = Diggit::Dig.it.journal.sources
100
100
  sources.each_index do |idx|
101
- msg = "#{idx} #{sources[idx].url} (#{sources[idx].state})"
102
- Log.error msg if sources[idx].error?
101
+ msg = "#{idx} #{sources[idx].url} (#{sources[idx].entry.state})"
102
+ Log.error msg if sources[idx].entry.error?
103
103
  end
104
104
  end
105
105
  end
@@ -108,16 +108,22 @@ module Diggit
108
108
  c.command :info do |info|
109
109
  info.action do |_global_options, _options, args|
110
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
111
+ Log.info "URL: #{src.url}"
112
+ Log.info "State: #{src.entry.state}"
113
+ Log.info "Performed analyses:" unless src.entry.performed.empty?
114
+ src.entry.performed.each do |e|
115
+ Log.indent do
116
+ Log.info "#{e.name}, time: #{e.duration}"
117
+ end
118
+ end
119
+ Log.info "Canceled analyses:" unless src.entry.canceled.empty?
120
+ src.entry.canceled.each do |e|
118
121
  Log.indent do
119
- Log.error error[:message]
120
- Log.info error[:backtrace].join("\n")
122
+ Log.info "#{e.name}, time: #{e.duration}"
123
+ Log.indent do
124
+ Log.error e.error.message
125
+ Log.error e.error.backtrace.join("\n")
126
+ end
121
127
  end
122
128
  end
123
129
  end
@@ -21,3 +21,4 @@ require_relative 'dgit/core'
21
21
  require_relative 'dgit/plugins'
22
22
  require_relative 'dgit/version'
23
23
  require_relative 'dgit/log'
24
+ require_relative 'dgit/entries'
@@ -22,6 +22,7 @@ require 'oj'
22
22
  require 'rugged'
23
23
  require 'singleton'
24
24
  require_relative 'log'
25
+ require_relative 'entries'
25
26
 
26
27
  class String
27
28
  # Returns a underscore cased version of the string.
@@ -56,12 +57,11 @@ end
56
57
 
57
58
  module Diggit
58
59
  class Source
59
- attr_reader :url, :repository
60
- attr_accessor :entry
60
+ attr_reader :url, :repository, :entry
61
61
 
62
62
  def initialize(url)
63
63
  @url = url
64
- @entry = Journal.new_source_entry
64
+ @entry = SourceEntry.new
65
65
  @repository = nil
66
66
  end
67
67
 
@@ -73,81 +73,32 @@ module Diggit
73
73
  Dig.it.file_path("sources/#{id}")
74
74
  end
75
75
 
76
- def error?
77
- !(@entry[:last_error].nil? || @entry[:last_error].empty?)
78
- end
79
-
80
- def error
81
- @entry[:last_error]
82
- end
83
-
84
- def error=(error)
85
- @entry[:last_error] = error
86
- end
87
-
88
- def state
89
- @entry[:state]
90
- end
91
-
92
- def state=(state)
93
- @entry[:state] = state
94
- end
95
-
96
- def new?
97
- @entry[:state] == :new
98
- end
99
-
100
- def cloned?
101
- @entry[:state] == :cloned
102
- end
103
-
104
- def all_analyses
105
- performed_analyses + ongoing_analyses
106
- end
107
-
108
- def performed_analyses
109
- @entry[:performed_analyses]
110
- end
111
-
112
- def ongoing_analyses
113
- @entry[:ongoing_analyses]
114
- end
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
-
121
76
  def clone
77
+ @entry.error = nil
122
78
  if File.exist?(folder)
123
79
  Rugged::Repository.new(folder)
124
80
  else
125
81
  Rugged::Repository.clone_at(url, folder)
126
82
  end
127
- self.state = :cloned
128
- self.error = nil
83
+ @entry.state = :cloned
129
84
  rescue => e
130
85
  Log.error "Error cloning #{url}."
131
- self.error = Journal.dump_error(e)
86
+ @entry.error = e
132
87
  end
133
88
 
134
89
  def load_repository
135
- fail "Source not cloned #{url}." if new?
90
+ fail "Source not cloned #{url}." if @entry.new?
136
91
  @repository = Rugged::Repository.new(folder)
92
+ @repository.checkout("origin/master")
137
93
  end
138
94
  end
139
95
 
140
96
  class Journal
141
- def initialize(hash)
97
+ attr_reader :sources, :workspace
98
+
99
+ def initialize
142
100
  @sources = {}
143
- @workspace = {}
144
- hash[:urls].each do |u|
145
- s = Source.new(u)
146
- s.entry = hash[:sources][u] if !hash[:sources].nil? && hash[:sources].key?(u)
147
- @sources[u] = s
148
- end
149
- @workspace = hash[:workspace]
150
- @workspace = Journal.new_workspace_entry if hash[:workspace].nil? || hash[:workspace].empty?
101
+ @workspace = WorkspaceEntry.new
151
102
  end
152
103
 
153
104
  def sources
@@ -155,7 +106,7 @@ module Diggit
155
106
  end
156
107
 
157
108
  def sources_by_state(state, error = false)
158
- @sources.select { |_u, s| s.state == state && s.error? == error }.values
109
+ @sources.select { |_u, s| s.entry.state == state && s.entry.error? == error }.values
159
110
  end
160
111
 
161
112
  def sources_by_ids(*ids)
@@ -169,56 +120,14 @@ module Diggit
169
120
  result
170
121
  end
171
122
 
172
- def update_source(source)
173
- fail "No such source #{source}." unless @sources.key?(source.url)
174
- @sources[source.url] = source
175
- Dig.it.save_journal
123
+ def source?(url)
124
+ @sources.key?(url)
176
125
  end
177
126
 
178
127
  def add_source(url)
179
128
  @sources[url] = Source.new(url) unless @sources.key?(url)
180
129
  Dig.it.save_journal
181
130
  end
182
-
183
- def join?(name)
184
- @workspace[:performed_joins].include?(name)
185
- end
186
-
187
- def add_join(name)
188
- @workspace[:performed_joins] << name
189
- Dig.it.save_journal
190
- end
191
-
192
- def join_error?
193
- !@workspace[:last_error].nil?
194
- end
195
-
196
- def join_error
197
- @workspace[:last_error]
198
- end
199
-
200
- def join_error=(error)
201
- @workspace[:last_error] = Journal.dump_error(error)
202
- Dig.it.save_journal
203
- end
204
-
205
- def to_hash
206
- entry_hash = {}
207
- @sources.each { |entry| entry_hash[entry[0]] = entry[1].entry }
208
- { urls: @sources.keys, sources: entry_hash, workspace: @workspace }
209
- end
210
-
211
- def self.new_source_entry
212
- { state: :new, performed_analyses: [], error_analyses: [], ongoing_analyses: [], last_error: {} }
213
- end
214
-
215
- def self.new_workspace_entry
216
- { performed_joins: [], last_error: {} }
217
- end
218
-
219
- def self.dump_error(error)
220
- { name: error.class.name, message: error.to_s, backtrace: error.backtrace }
221
- end
222
131
  end
223
132
 
224
133
  class Config
@@ -249,6 +158,11 @@ module Diggit
249
158
  Dig.it.save_config
250
159
  end
251
160
 
161
+ def del_all_analyses
162
+ @analyses = []
163
+ Dig.it.save_config
164
+ end
165
+
252
166
  def get_analyses(*names)
253
167
  return analyses if names.empty?
254
168
  analyses.select { |a| names.include?(a.simple_name) }
@@ -268,6 +182,11 @@ module Diggit
268
182
  Dig.it.save_config
269
183
  end
270
184
 
185
+ def del_all_joins
186
+ @joins = []
187
+ Dig.it.save_config
188
+ end
189
+
271
190
  def get_joins(*names)
272
191
  return joins if names.empty?
273
192
  joins.select { |j| joins.include?(j.simple_name) }
@@ -416,7 +335,7 @@ module Diggit
416
335
  Oj.to_file(File.expand_path(DGIT_CONFIG, dgit_folder), Config.empty_config)
417
336
  Oj.to_file(File.expand_path(DGIT_OPTIONS, dgit_folder), {})
418
337
  FileUtils.touch(File.expand_path(DGIT_SOURCES, dgit_folder))
419
- Oj.to_file(File.expand_path(DGIT_JOURNAL, dgit_folder), {})
338
+ Oj.to_file(File.expand_path(DGIT_JOURNAL, dgit_folder), Journal.new)
420
339
  end
421
340
  FileUtils.mkdir(File.expand_path('sources', folder)) unless File.exist?(File.expand_path('sources', folder))
422
341
  unless File.exist?(File.expand_path("plugins", folder))
@@ -455,17 +374,17 @@ module Diggit
455
374
  def load_journal
456
375
  url_array = []
457
376
  IO.readlines(config_path(DGIT_SOURCES)).each { |l| url_array << l.strip }
458
- saved_hash = Oj.load_file(config_path(DGIT_JOURNAL))
459
- hash = { urls: url_array, sources: saved_hash[:sources], workspace: saved_hash[:workspace] }
460
- @journal = Journal.new(hash)
377
+ @journal = Oj.load_file(config_path(DGIT_JOURNAL))
378
+ url_array.each do |url|
379
+ @journal.add_source(url)
380
+ end
461
381
  end
462
382
 
463
383
  # Save the journal to +.dgit/journal+
464
384
  # @return [void]
465
385
  def save_journal
466
- hash = @journal.to_hash
467
- File.open(config_path(DGIT_SOURCES), "w") { |f| hash[:urls].each { |u| f.puts(u) } }
468
- Oj.to_file(config_path(DGIT_JOURNAL), { sources: hash[:sources], workspace: hash[:workspace] })
386
+ File.open(config_path(DGIT_SOURCES), "w") { |f| @journal.sources.each { |source| f.puts(source.url) } }
387
+ Oj.to_file(config_path(DGIT_JOURNAL), @journal, indent: 2)
469
388
  end
470
389
 
471
390
  # Load the options from +.dgit/options+
@@ -497,7 +416,7 @@ module Diggit
497
416
  # @param source_ids [Array<Integer>] the ids of the sources.
498
417
  # @return [void]
499
418
  def clone(*source_ids)
500
- @journal.sources_by_ids(*source_ids).select(&:new?).each(&:clone)
419
+ @journal.sources_by_ids(*source_ids).select { |s| s.entry.new? }.each(&:clone)
501
420
  ensure
502
421
  save_journal
503
422
  end
@@ -508,13 +427,13 @@ module Diggit
508
427
  # @param mode [Symbol] the mode: +:run+, +:rerun+ or +:clean+.
509
428
  # @return [void]
510
429
  def analyze(source_ids = [], analyses = [], mode = :run)
511
- @journal.sources_by_ids(*source_ids).select(&:cloned?).each do |s|
430
+ @journal.sources_by_ids(*source_ids).select { |s| s.entry.cloned? }.each do |s|
512
431
  @config.get_analyses(*analyses).each do |klass|
513
432
  a = klass.new(@options)
514
433
  s.load_repository
515
434
  a.source = s
516
- clean_analysis(s, a) if clean_mode?(mode) && s.all_analyses.include?(a.name)
517
- run_analysis(s, a) if run_mode?(mode) && !s.performed_analyses.include?(a.name)
435
+ clean(a, s.entry) if clean_mode?(mode) && s.entry.has?(a)
436
+ run(a, s.entry) if run_mode?(mode) && !s.entry.has?(a)
518
437
  end
519
438
  end
520
439
  end
@@ -527,11 +446,12 @@ module Diggit
527
446
  def join(source_ids = [], joins = [], mode = :run)
528
447
  @config.get_joins(*joins).each do |klass|
529
448
  j = klass.new(@options)
530
- j.clean if clean_mode?(mode)
449
+ clean(j, @journal.workspace) if clean_mode?(mode) && @journal.workspace.has?(j)
531
450
  source_array = @journal.sources_by_ids(*source_ids).select do |s|
532
- s.cloned? && (klass.required_analyses - s.performed_analyses).empty?
451
+ s.entry.cloned? && (klass.required_analyses - s.entry.performed.map(&:name)).empty?
533
452
  end
534
- run_join(j, source_array) if run_mode?(mode) && !source_array.empty?
453
+ j.sources = source_array
454
+ run(j, @journal.workspace) if run_mode?(mode) && !source_array.empty? && !@journal.workspace.has?(j)
535
455
  end
536
456
  end
537
457
 
@@ -545,34 +465,36 @@ module Diggit
545
465
  mode == :rerun || mode == :run
546
466
  end
547
467
 
548
- def clean_analysis(s, a)
549
- a.clean
550
- s.clean_analysis(a)
551
- ensure
552
- save_journal
553
- end
554
-
555
- def run_analysis(s, a)
556
- s.ongoing_analyses << a.name
557
- a.run
558
- s.ongoing_analyses.pop
559
- s.performed_analyses << a.name
560
- rescue => e
561
- Log.error "Error applying analysis #{a.name} on #{s.url}"
562
- s.error = Journal.dump_error(e)
563
- ensure
564
- save_journal
468
+ def clean(runnable, placeholder)
469
+ placeholder.clean(runnable)
470
+ entry = RunnableEntry.new(runnable)
471
+ begin
472
+ runnable.clean
473
+ rescue => e
474
+ entry.toc
475
+ entry.error = e
476
+ placeholder.canceled << entry
477
+ Log.error "Error cleaning #{runnable.name}"
478
+ ensure
479
+ save_journal
480
+ end
565
481
  end
566
482
 
567
- def run_join(j, source_array)
568
- j.sources = source_array
569
- j.run
570
- @journal.add_join(j.name)
571
- rescue => e
572
- Log.error "Error applying join #{j.name}"
573
- @journal.join_error = e
574
- ensure
575
- save_journal
483
+ def run(runnable, placeholder)
484
+ entry = RunnableEntry.new(runnable)
485
+ begin
486
+ runnable.run
487
+ rescue => e
488
+ entry.toc
489
+ entry.error = e
490
+ placeholder.canceled << entry
491
+ Log.error "Error running #{runnable.name}"
492
+ else
493
+ entry.toc
494
+ placeholder.performed << entry
495
+ ensure
496
+ save_journal
497
+ end
576
498
  end
577
499
  end
578
500
  end
@@ -0,0 +1,159 @@
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
+ module Diggit
21
+ # Journal entry for elements that can have error.
22
+ #
23
+ # @!attribute [r] error
24
+ # @return [ErrorEntry, nil] the error entry.
25
+ module EntryWithError
26
+ attr_reader :error
27
+
28
+ # Set the error of the entry.
29
+ # @param e [Exception, nil] the error, to indicate an absence of error, pass +nil+.
30
+ # @return [void]
31
+ def error=(e)
32
+ if e.nil?
33
+ @error = nil
34
+ else
35
+ @error = ErrorEntry.new(e)
36
+ end
37
+ end
38
+ end
39
+
40
+ # Journal entry for elements that can launch runnables.
41
+ #
42
+ # @!attribute [r] performed
43
+ # @return [Array<RunnableEntry>] the list of performed runnables.
44
+ # @!attribute [r] canceled
45
+ # @return [Array<RunnableEntry>] the list of canceled runnables.
46
+ class EntryWithRunnables
47
+ attr_reader :performed, :canceled
48
+
49
+ def initialize
50
+ @performed = []
51
+ @canceled = []
52
+ end
53
+
54
+ # Error status of the element.
55
+ # @return [Boolean]
56
+ def error?
57
+ @canceled.size > 0
58
+ end
59
+
60
+ # Check if a runnable has been performed or canceled.
61
+ # @param runnable_or_string [Runnable, String] the runnable or the name of the runnable.
62
+ # @param state [Symbol] the status of the runnable: +:performed+, +:canceled+ or +:all+.
63
+ # @return [Boolean]
64
+ def has?(runnable_or_string, state = :all)
65
+ name = retrieve_name(runnable_or_string)
66
+ if state == :performed
67
+ return @performed.count { |e| e.name == name } > 0
68
+ elsif state == :canceled
69
+ return @canceled.count { |e| e.name == name } > 0
70
+ elsif state == :all
71
+ return (@performed + @canceled).count { |e| e.name == name } > 0
72
+ end
73
+ end
74
+
75
+ # Remove a runnable from all the entries.
76
+ # @param runnable_or_string [Runnable, String] the runnable or the name of the runnable
77
+ # @return [void]
78
+ def clean(runnable_or_string)
79
+ name = retrieve_name(runnable_or_string)
80
+ @performed.delete_if { |e| e.name == name }
81
+ @canceled.delete_if { |e| e.name == name }
82
+ end
83
+
84
+ private
85
+
86
+ def retrieve_name(runnable_or_string)
87
+ if runnable_or_string.is_a? String
88
+ return runnable_or_string
89
+ else
90
+ return runnable_or_string.name
91
+ end
92
+ end
93
+ end
94
+
95
+ class ErrorEntry
96
+ attr_reader :name, :message, :backtrace
97
+
98
+ def initialize(error)
99
+ @name = error.class.name
100
+ @message = error.to_s
101
+ @backtrace = error.backtrace
102
+ end
103
+ end
104
+
105
+ class RunnableEntry
106
+ include EntryWithError
107
+ attr_accessor :start, :end, :name
108
+
109
+ def initialize(runnable)
110
+ @name = runnable.name
111
+ @end = nil
112
+ tic
113
+ end
114
+
115
+ def error?
116
+ !@error.nil?
117
+ end
118
+
119
+ def tic
120
+ @start = Time.now
121
+ end
122
+
123
+ def toc
124
+ @end = Time.now
125
+ end
126
+
127
+ def duration
128
+ @end - @start
129
+ end
130
+ end
131
+
132
+ class SourceEntry < EntryWithRunnables
133
+ include EntryWithError
134
+ attr_accessor :state
135
+
136
+ def initialize
137
+ super
138
+ @state = :new
139
+ end
140
+
141
+ def error?
142
+ super || !@error.nil?
143
+ end
144
+
145
+ def new?
146
+ @state == :new
147
+ end
148
+
149
+ def cloned?
150
+ @state == :cloned
151
+ end
152
+ end
153
+
154
+ class WorkspaceEntry < EntryWithRunnables
155
+ def initialize
156
+ super
157
+ end
158
+ end
159
+ end
@@ -18,5 +18,5 @@
18
18
  # Copyright 2015 Jean-Rémy Falleri <jr.falleri@gmail.com>
19
19
 
20
20
  module Diggit
21
- VERSION = "2.0.2"
21
+ VERSION = '2.1.0'
22
22
  end
@@ -43,6 +43,5 @@ class Cloc < Diggit::Analysis
43
43
 
44
44
  def clean
45
45
  db.client['cloc'].find({ source: @source.url }).delete_many
46
- repo.checkout('master')
47
46
  end
48
47
  end
@@ -0,0 +1,43 @@
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 'jsonpath'
21
+
22
+ class Javadoc < Diggit::Analysis
23
+ def initialize(options)
24
+ super(options)
25
+ end
26
+
27
+ def run
28
+ path_md = JsonPath.new("$..*[?(@.typeLabel == 'MethodDeclaration')]")
29
+ files = Dir['**/*.java']
30
+ files.each do |file|
31
+ puts file
32
+ json = `gumtree parse "#{file}"`
33
+ md = path_md.on(json)
34
+ md.each do |m|
35
+ puts m
36
+ exit
37
+ end
38
+ end
39
+ end
40
+
41
+ def clean
42
+ end
43
+ end
@@ -39,7 +39,6 @@ class Tex < Diggit::Analysis
39
39
 
40
40
  def clean
41
41
  FileUtils.rm_rf(file)
42
- repo.checkout("master")
43
42
  end
44
43
 
45
44
  def file
@@ -100,7 +100,7 @@ RSpec.describe Diggit::Dig do
100
100
  Diggit::Dig.it.clone
101
101
  expect(File.exist?("spec/dgit/sources/#{TEST_URL.id}/.git")).to be true
102
102
  expect(Diggit::Dig.it.journal.sources_by_ids(0)[0].url).to eq TEST_URL
103
- Diggit::Dig.it.journal.sources_by_ids(0)[0].state = :new
103
+ Diggit::Dig.it.journal.sources_by_ids(0)[0].entry.state = :new
104
104
  Diggit::Dig.it.clone
105
105
  expect(Diggit::Dig.it.journal.sources_by_ids(0)[0].url).to eq TEST_URL
106
106
  Diggit::Dig.init("spec/dgit")
@@ -113,18 +113,23 @@ RSpec.describe Diggit::Dig do
113
113
  Diggit::Dig.it.config.add_analysis("test_analysis_with_addon")
114
114
  expect_any_instance_of(TestAnalysisWithAddon).to receive(:run)
115
115
  Diggit::Dig.it.analyze
116
- expect(Diggit::Dig.it.journal.sources_by_ids(0)[0].all_analyses).to eq(%w(test_analysis test_analysis_with_addon))
116
+ src = Diggit::Dig.it.journal.sources_by_ids(0)[0]
117
+ expect(src.entry.has?("test_analysis", :performed)).to be true
118
+ expect(src.entry.has?("test_analysis_with_addon", :performed)).to be true
117
119
  Diggit::Dig.init("spec/dgit")
118
- expect(Diggit::Dig.it.journal.sources_by_ids(0)[0].all_analyses).to eq(%w(test_analysis test_analysis_with_addon))
120
+ src = Diggit::Dig.it.journal.sources_by_ids(0)[0]
121
+ expect(src.entry.has?("test_analysis", :performed)).to be true
122
+ expect(src.entry.has?("test_analysis_with_addon", :performed)).to be true
119
123
  end
120
124
 
121
125
  it "should handle analyses with error" do
122
126
  Diggit::Dig.it.config.add_analysis("test_analysis_with_error")
123
127
  Diggit::Dig.it.analyze
124
128
  src = Diggit::Dig.it.journal.sources_by_ids(0)[0]
125
- expect(src.all_analyses).to include("test_analysis")
126
- expect(src.error?).to be true
127
- expect(src.error[:message]).to eq("Error!")
129
+ expect(src.entry.has?("test_analysis_with_error", :performed)).to be false
130
+ expect(src.entry.has?("test_analysis_with_error", :canceled)).to be true
131
+ expect(src.entry.error?).to be true
132
+ expect(src.entry.canceled[0].error.message).to eq("Error!")
128
133
  end
129
134
 
130
135
  it "should perform joins" do
@@ -133,21 +138,55 @@ RSpec.describe Diggit::Dig do
133
138
  expect_any_instance_of(TestJoin).to receive(:run)
134
139
  expect_any_instance_of(TestJoinWithAddon).not_to receive(:run)
135
140
  Diggit::Dig.it.join
136
- expect(Diggit::Dig.it.journal.join?("test_join")).to be true
137
- expect(Diggit::Dig.it.journal.join?("test_join_with_addon")).to be false
141
+ expect(Diggit::Dig.it.journal.workspace.has?("test_join", :performed)).to be true
142
+ expect(Diggit::Dig.it.journal.workspace.has?("test_join_with_addon", :performed)).to be false
143
+ end
144
+
145
+ it "should handle joins with error" do
146
+ Diggit::Dig.it.config.add_join("test_join_with_error")
147
+ Diggit::Dig.it.join
148
+ expect(Diggit::Dig.it.journal.workspace.has?("test_join_with_error", :performed)).to be false
149
+ expect(Diggit::Dig.it.journal.workspace.has?("test_join_with_error", :canceled)).to be true
150
+ expect(Diggit::Dig.it.journal.workspace.error?).to be true
151
+ expect(Diggit::Dig.it.journal.workspace.canceled[0].error.message).to eq("Error!")
138
152
  end
139
153
 
140
154
  it "should clean joins" do
141
155
  expect_any_instance_of(TestJoin).to receive(:clean)
142
- expect_any_instance_of(TestJoinWithAddon).to receive(:clean)
156
+ expect_any_instance_of(TestJoinWithAddon).not_to receive(:clean)
143
157
  Diggit::Dig.it.join([], [], :clean)
158
+ expect(Diggit::Dig.it.journal.workspace.has?("test_join")).to be false
159
+ expect(Diggit::Dig.it.journal.workspace.has?("test_join_with_addon")).to be false
160
+ Diggit::Dig.it.config.del_all_joins
161
+ end
162
+
163
+ it "should handle joins with clean errors" do
164
+ Diggit::Dig.it.config.add_join("test_join_with_clean_error")
165
+ Diggit::Dig.it.join
166
+ expect(Diggit::Dig.it.journal.workspace.has?("test_join_with_clean_error", :performed)).to be true
167
+ Diggit::Dig.it.join([], [], :clean)
168
+ expect(Diggit::Dig.it.journal.workspace.has?("test_join_with_clean_error", :performed)).to be false
169
+ expect(Diggit::Dig.it.journal.workspace.has?("test_join_with_clean_error", :canceled)).to be true
144
170
  end
145
171
 
146
172
  it "should clean analyses" do
147
173
  expect_any_instance_of(TestAnalysis).to receive(:clean)
148
174
  expect_any_instance_of(TestAnalysisWithAddon).to receive(:clean)
149
175
  Diggit::Dig.it.analyze([], [], :clean)
150
- expect(Diggit::Dig.it.journal.sources_by_ids(0)[0].all_analyses).to eq([])
176
+ src = Diggit::Dig.it.journal.sources_by_ids(0)[0]
177
+ expect(src.entry.has?("test_analysis")).to be false
178
+ expect(src.entry.has?("test_analysis_with_addon")).to be false
179
+ Diggit::Dig.it.config.del_all_analyses
180
+ end
181
+
182
+ it "should handle analyses with clean errors" do
183
+ Diggit::Dig.it.config.add_analysis("test_analysis_with_clean_error")
184
+ Diggit::Dig.it.analyze([], ["test_analysis_with_clean_error"])
185
+ src = Diggit::Dig.it.journal.sources_by_ids(0)[0]
186
+ expect(src.entry.has?("test_analysis_with_clean_error", :performed)).to be true
187
+ Diggit::Dig.it.analyze([], [], :clean)
188
+ expect(src.entry.has?("test_analysis_with_clean_error", :performed)).to be false
189
+ expect(src.entry.has?("test_analysis_with_clean_error", :canceled)).to be true
151
190
  end
152
191
 
153
192
  it "should read source options" do
@@ -161,7 +200,6 @@ RSpec.describe Diggit::Dig do
161
200
 
162
201
  Diggit::Dig.it.config.add_analysis("test_analysis_with_sources_options")
163
202
  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")
203
+ Diggit::Dig.it.config.del_all_analyses
166
204
  end
167
205
  end
@@ -0,0 +1,27 @@
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
+ class TestAnalysisWithCleanError < Diggit::Analysis
21
+ def run
22
+ end
23
+
24
+ def clean
25
+ fail "Error!"
26
+ end
27
+ end
@@ -26,7 +26,7 @@ class TestAnalysisWithSourcesOptions < Diggit::Analysis
26
26
  end
27
27
 
28
28
  def run
29
- p(src_opt[@source]["myOption"])
29
+ puts src_opt[@source]["myOption"]
30
30
  end
31
31
 
32
32
  def clean
@@ -0,0 +1,29 @@
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
+ class TestJoinWithCleanError < Diggit::Join
21
+ require_analyses 'test_analysis'
22
+
23
+ def run
24
+ end
25
+
26
+ def clean
27
+ fail "Error!"
28
+ end
29
+ end
@@ -0,0 +1,29 @@
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
+ class TestJoinWithError < Diggit::Join
21
+ require_analyses 'test_analysis'
22
+
23
+ def run
24
+ fail "Error!"
25
+ end
26
+
27
+ def clean
28
+ end
29
+ end
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.2
4
+ version: 2.1.0
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-10-13 00:00:00.000000000 Z
12
+ date: 2015-11-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rugged
@@ -167,6 +167,7 @@ files:
167
167
  - bin/dgit
168
168
  - lib/dgit.rb
169
169
  - lib/dgit/core.rb
170
+ - lib/dgit/entries.rb
170
171
  - lib/dgit/log.rb
171
172
  - lib/dgit/plugins.rb
172
173
  - lib/dgit/version.rb
@@ -176,6 +177,7 @@ files:
176
177
  - plugins/addon/src_opt.rb
177
178
  - plugins/analysis/cloc.rb
178
179
  - plugins/analysis/cloc_per_file.rb
180
+ - plugins/analysis/javadoc.rb
179
181
  - plugins/analysis/tex.rb
180
182
  - spec/core_spec.rb
181
183
  - spec/dgit/plugins/addon/test_addon.rb
@@ -184,10 +186,13 @@ files:
184
186
  - spec/dgit/plugins/analysis/my_module/other_analysis.rb
185
187
  - spec/dgit/plugins/analysis/test_analysis.rb
186
188
  - spec/dgit/plugins/analysis/test_analysis_with_addon.rb
189
+ - spec/dgit/plugins/analysis/test_analysis_with_clean_error.rb
187
190
  - spec/dgit/plugins/analysis/test_analysis_with_error.rb
188
191
  - spec/dgit/plugins/analysis/test_analysis_with_sources_options.rb
189
192
  - spec/dgit/plugins/join/test_join.rb
190
193
  - spec/dgit/plugins/join/test_join_with_addon.rb
194
+ - spec/dgit/plugins/join/test_join_with_clean_error.rb
195
+ - spec/dgit/plugins/join/test_join_with_error.rb
191
196
  - spec/spec_helper.rb
192
197
  homepage: https://github.com/jrfaller/diggit
193
198
  licenses: