diggit 2.1.0 → 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +16 -5
- data/bin/dgit +30 -7
- data/lib/dgit/core.rb +46 -42
- data/lib/dgit/entries.rb +7 -18
- data/lib/dgit/version.rb +2 -1
- data/plugins/addon/db.rb +3 -2
- data/plugins/addon/out.rb +25 -3
- data/plugins/addon/src_opt.rb +2 -1
- data/plugins/analysis/conflict_merge.rb +118 -0
- data/plugins/analysis/javadoc.rb +152 -10
- data/plugins/analysis/tex.rb +1 -1
- data/spec/cli_spec.rb +114 -0
- data/spec/core_spec.rb +47 -17
- data/spec/dgit/plugins/analysis/test_analysis_with_clean_error.rb +1 -1
- data/spec/dgit/plugins/analysis/test_analysis_with_error.rb +1 -1
- data/spec/dgit/plugins/join/test_join_with_clean_error.rb +1 -1
- data/spec/dgit/plugins/join/test_join_with_error.rb +1 -1
- data/spec/spec_helper.rb +13 -3
- metadata +24 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60e58099916b06eceaa99f9bad1f18822ac74106
|
4
|
+
data.tar.gz: 5568fc8c3a6bd36f09f25d7ceeb9233da126ffea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84dd036f313699556b0fafc8604d56b45ceb7441dc7f4530061c98816973f6bb0c71406245b3569dcfa9cf244caab20d96702ba16e9f802dafce94994f6ea2e5
|
7
|
+
data.tar.gz: d82cc5a83c57e774af69f367df32dc695b72cb2807963e687502f3de309d7bf4ea784b4fa7bad6216484feab48e2c1e675f3120fefb99af444784e92c98217b3
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Changelog of Diggit
|
2
2
|
|
3
|
+
### Version 2.1.1
|
4
|
+
* Fixed small bugs in the CLI
|
5
|
+
* Fixed source error not showing up in case of clone error
|
6
|
+
* Now urls can have a trailing |id to enable checkout a tag, branch or commit with a specific id
|
7
|
+
* Out addon have more utility methods
|
8
|
+
|
3
9
|
### Version 2.1.0
|
4
10
|
* Now repositories are reseted to master by default
|
5
11
|
* Journal infrastructure has been vastly improved
|
data/README.md
CHANGED
@@ -8,9 +8,20 @@ A ruby tool to analyze Git repositories
|
|
8
8
|
|
9
9
|
Just run `gem install diggit`.
|
10
10
|
|
11
|
-
## From the source
|
11
|
+
## From the source, with bundler
|
12
12
|
|
13
|
-
|
13
|
+
Install diggit using the following commands:
|
14
|
+
```
|
15
|
+
git clone https://github.com/jrfaller/diggit.git
|
16
|
+
cd diggit
|
17
|
+
gem install bundler --user-install
|
18
|
+
bundler install
|
19
|
+
```
|
20
|
+
Beware, the gem bin directory must be in your path. Also, the `dgit` command is in the `bin` folder of diggit.
|
21
|
+
|
22
|
+
## From the source, with vagrant
|
23
|
+
|
24
|
+
You can automatically get a working VM with all required dependencies with only one command, how cool is that? For this, just install [vagrant](https://www.vagrantup.com/) and [virtualbox](https://www.virtualbox.org/), and `vagrant up` in a freshly cloned diggit folder (see previous section). Beware, this magic only works on Mac OS and Linux because it uses NFS shared folders.
|
14
25
|
|
15
26
|
# Usage
|
16
27
|
|
@@ -26,15 +37,15 @@ You can add some repositories to be analyzed with the following command: `dgit s
|
|
26
37
|
|
27
38
|
### Using addons
|
28
39
|
|
29
|
-
Addons add features the the diggit tool: for instance capability of writing to a MongoDB database, etc. To enable addons for your current diggit folder you can use the following command: `dgit addons add
|
40
|
+
Addons add features the the diggit tool: for instance capability of writing to a MongoDB database, etc. To enable addons for your current diggit folder you can use the following command: `dgit addons add test_addon`.
|
30
41
|
|
31
42
|
### Setting-up analyses
|
32
43
|
|
33
|
-
An analysis is applied to each repository. You can configure the analyses to be performed with the following command: `dgit analyses add
|
44
|
+
An analysis is applied to each repository. You can configure the analyses to be performed with the following command: `dgit analyses add test_analysis`. Analyses are performed in the order they have been added.
|
34
45
|
|
35
46
|
### Setting-up joins
|
36
47
|
|
37
|
-
A join is performed after all analyses of all repositories have been performed. You can configure the joins to be performed with the following command: `dgit joins add
|
48
|
+
A join is performed after all analyses of all repositories have been performed. You can configure the joins to be performed with the following command: `dgit joins add test_join`. Joins are performed in the order they have been added.
|
38
49
|
|
39
50
|
## Running analyses
|
40
51
|
|
data/bin/dgit
CHANGED
@@ -49,8 +49,8 @@ module Diggit
|
|
49
49
|
c.action do |_global_options, _options, _args|
|
50
50
|
Log.info "Config"
|
51
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(', ')}"
|
52
|
+
Log.info "- Analyses: #{Diggit::Dig.it.config.get_analyses.map(&:name).join(', ')}"
|
53
|
+
Log.info "- Joins: #{Diggit::Dig.it.config.get_joins.map(&:name).join(', ')}"
|
54
54
|
Log.info ""
|
55
55
|
Log.info "Journal"
|
56
56
|
Log.info "======="
|
@@ -64,6 +64,20 @@ module Diggit
|
|
64
64
|
Log.ok "* Ok: #{Diggit::Dig.it.journal.sources_by_state(:cloned).size}"
|
65
65
|
Log.error "* Error: #{Diggit::Dig.it.journal.sources_by_state(:cloned, true).size}"
|
66
66
|
end
|
67
|
+
Log.info "- Performed joins:" unless Diggit::Dig.it.journal.workspace.performed.empty?
|
68
|
+
Diggit::Dig.it.journal.workspace.performed.each do |e|
|
69
|
+
Log.indent { Log.info "#{e.name}, time: #{e.duration}" }
|
70
|
+
end
|
71
|
+
Log.info "- Canceled joins:" unless Diggit::Dig.it.journal.workspace.canceled.empty?
|
72
|
+
Diggit::Dig.it.journal.workspace.canceled.each do |e|
|
73
|
+
Log.indent do
|
74
|
+
Log.info "#{e.name}, time: #{e.duration}"
|
75
|
+
Log.indent do
|
76
|
+
Log.error e.error.message
|
77
|
+
Log.error e.error.backtrace.join("\n")
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
67
81
|
end
|
68
82
|
end
|
69
83
|
|
@@ -74,7 +88,7 @@ module Diggit
|
|
74
88
|
list.action do |_global_options, _options, _args|
|
75
89
|
sources = Diggit::Dig.it.journal.sources
|
76
90
|
sources.each_index do |idx|
|
77
|
-
msg = "#{idx} #{sources[idx].url} (#{sources[idx].state})"
|
91
|
+
msg = "#{idx} #{sources[idx].url} (#{sources[idx].entry.state})"
|
78
92
|
sources[idx].entry.error? ? Log.error(msg) : Log.ok(msg)
|
79
93
|
end
|
80
94
|
end
|
@@ -86,11 +100,18 @@ module Diggit
|
|
86
100
|
Diggit::Dig.it.journal.add_source args[0]
|
87
101
|
end
|
88
102
|
end
|
103
|
+
c.desc 'Delete a source.'
|
104
|
+
c.arg_name 'id'
|
105
|
+
c.command :del do |del|
|
106
|
+
del.action do |_global_options, _options, args|
|
107
|
+
Diggit::Dig.it.journal.del_source args[0]
|
108
|
+
end
|
109
|
+
end
|
89
110
|
c.desc 'Import sources from a file.'
|
90
111
|
c.arg_name 'file'
|
91
112
|
c.command :import do |import|
|
92
113
|
import.action do |_global_options, _options, args|
|
93
|
-
File.open(args[0]).each { |line| Diggit::Dig.it.journal.add_source(line) }
|
114
|
+
File.open(args[0]).each { |line| Diggit::Dig.it.journal.add_source(line.strip) }
|
94
115
|
end
|
95
116
|
end
|
96
117
|
c.desc 'Display all sources in error.'
|
@@ -110,11 +131,13 @@ module Diggit
|
|
110
131
|
src = Diggit::Dig.it.journal.sources_by_ids(args[0].to_i)[0]
|
111
132
|
Log.info "URL: #{src.url}"
|
112
133
|
Log.info "State: #{src.entry.state}"
|
134
|
+
unless src.entry.error.nil?
|
135
|
+
Log.error src.entry.error.message
|
136
|
+
Log.error src.entry.error.backtrace.join("\n")
|
137
|
+
end
|
113
138
|
Log.info "Performed analyses:" unless src.entry.performed.empty?
|
114
139
|
src.entry.performed.each do |e|
|
115
|
-
Log.indent
|
116
|
-
Log.info "#{e.name}, time: #{e.duration}"
|
117
|
-
end
|
140
|
+
Log.indent { Log.info "#{e.name}, time: #{e.duration}" }
|
118
141
|
end
|
119
142
|
Log.info "Canceled analyses:" unless src.entry.canceled.empty?
|
120
143
|
src.entry.canceled.each do |e|
|
data/lib/dgit/core.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# encoding: utf-8
|
2
3
|
#
|
3
4
|
# This file is part of Diggit.
|
@@ -28,8 +29,7 @@ class String
|
|
28
29
|
# Returns a underscore cased version of the string.
|
29
30
|
# @return [String]
|
30
31
|
def underscore
|
31
|
-
gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
32
|
-
.gsub(/([a-z\d])([A-Z])/, '\1_\2'). tr("-", "_").downcase
|
32
|
+
gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').gsub(/([a-z\d])([A-Z])/, '\1_\2'). tr("-", "_").downcase
|
33
33
|
end
|
34
34
|
|
35
35
|
# Returns a camel cased version of the string.
|
@@ -57,10 +57,14 @@ end
|
|
57
57
|
|
58
58
|
module Diggit
|
59
59
|
class Source
|
60
|
-
|
60
|
+
DEFAULT_BRANCH = "origin/master".freeze
|
61
|
+
|
62
|
+
attr_reader :url, :repository, :entry, :oid
|
61
63
|
|
62
64
|
def initialize(url)
|
63
|
-
|
65
|
+
infos = url.split(/\|/)
|
66
|
+
@url = infos[0]
|
67
|
+
@oid = infos.size > 1 ? infos[1] : DEFAULT_BRANCH
|
64
68
|
@entry = SourceEntry.new
|
65
69
|
@repository = nil
|
66
70
|
end
|
@@ -75,21 +79,19 @@ module Diggit
|
|
75
79
|
|
76
80
|
def clone
|
77
81
|
@entry.error = nil
|
78
|
-
|
79
|
-
|
80
|
-
else
|
81
|
-
Rugged::Repository.clone_at(url, folder)
|
82
|
-
end
|
82
|
+
@repository = File.exist?(folder) ? Rugged::Repository.new(folder) : Rugged::Repository.clone_at(url, folder)
|
83
|
+
@repository.checkout(@oid, { strategy: :force })
|
83
84
|
@entry.state = :cloned
|
84
85
|
rescue => e
|
85
|
-
Log.error "Error cloning #{url}
|
86
|
+
Log.error "Error cloning #{url}: #{e}"
|
87
|
+
e.backtrace.each { |l| Log.debug(l) }
|
86
88
|
@entry.error = e
|
87
89
|
end
|
88
90
|
|
89
91
|
def load_repository
|
90
|
-
|
92
|
+
raise "Source not cloned #{url}." if @entry.new?
|
91
93
|
@repository = Rugged::Repository.new(folder)
|
92
|
-
@repository.checkout(
|
94
|
+
@repository.checkout(@oid, { strategy: :force })
|
93
95
|
end
|
94
96
|
end
|
95
97
|
|
@@ -114,7 +116,7 @@ module Diggit
|
|
114
116
|
source_array = sources
|
115
117
|
result = []
|
116
118
|
ids.each do |id|
|
117
|
-
|
119
|
+
raise "No such source index #{id}." if id >= source_array.length
|
118
120
|
result << source_array[id]
|
119
121
|
end
|
120
122
|
result
|
@@ -125,7 +127,14 @@ module Diggit
|
|
125
127
|
end
|
126
128
|
|
127
129
|
def add_source(url)
|
128
|
-
|
130
|
+
key = url.split(/\|/)[0]
|
131
|
+
@sources[key] = Source.new(url) unless @sources.key?(key)
|
132
|
+
Dig.it.save_journal
|
133
|
+
end
|
134
|
+
|
135
|
+
def del_source(id)
|
136
|
+
source = sources_by_ids(id).first
|
137
|
+
@sources.delete(source.url)
|
129
138
|
Dig.it.save_journal
|
130
139
|
end
|
131
140
|
end
|
@@ -207,7 +216,7 @@ module Diggit
|
|
207
216
|
class PluginLoader
|
208
217
|
include Singleton
|
209
218
|
|
210
|
-
PLUGINS_TYPES = [:addon, :analysis, :join]
|
219
|
+
PLUGINS_TYPES = [:addon, :analysis, :join].freeze
|
211
220
|
|
212
221
|
# Load the plugin with the given name and type.
|
213
222
|
# @param name [String] the name of the plugin
|
@@ -216,15 +225,9 @@ module Diggit
|
|
216
225
|
# @return [Plugin, Class] the instance or class of the plugin.
|
217
226
|
def load_plugin(name, type, instance = false)
|
218
227
|
plugin = search_plugin(name, type)
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
else
|
223
|
-
return plugin
|
224
|
-
end
|
225
|
-
else
|
226
|
-
fail "Plugin #{name} not found."
|
227
|
-
end
|
228
|
+
raise "Plugin #{name} not found." unless plugin
|
229
|
+
return plugin.new(Dig.it.options) if instance
|
230
|
+
plugin
|
228
231
|
end
|
229
232
|
|
230
233
|
def self.plugin_paths(name, type, root)
|
@@ -241,13 +244,13 @@ module Diggit
|
|
241
244
|
|
242
245
|
def search_plugin(name, type)
|
243
246
|
return @plugins[name] if @plugins.key?(name)
|
244
|
-
|
245
|
-
|
247
|
+
raise "Unknown plugin type #{type}." unless PLUGINS_TYPES.include?(type)
|
248
|
+
raise "File #{name}.rb in #{type} directories not found." unless load_file(name, type)
|
246
249
|
|
247
250
|
base_class = Object.const_get("Diggit::#{type.to_s.camel_case}")
|
248
251
|
plugins = ObjectSpace.each_object(Class).select { |c| c < base_class && c.simple_name == name }
|
249
252
|
|
250
|
-
|
253
|
+
raise "No plugin #{name} of kind #{type} found." if plugins.empty?
|
251
254
|
warn "Ambiguous plugin name: several plugins of kind #{type} named #{name} were found." if plugins.size > 1
|
252
255
|
|
253
256
|
@plugins[name] = plugins[0]
|
@@ -291,11 +294,11 @@ module Diggit
|
|
291
294
|
# @!attribute [r] plugin_loader
|
292
295
|
# @return [PluginLoader] utility classes to load plugins.
|
293
296
|
class Dig
|
294
|
-
DGIT_FOLDER = ".dgit"
|
295
|
-
DGIT_SOURCES = "sources"
|
296
|
-
DGIT_CONFIG = "config"
|
297
|
-
DGIT_OPTIONS = "options"
|
298
|
-
DGIT_JOURNAL = "journal"
|
297
|
+
DGIT_FOLDER = ".dgit".freeze
|
298
|
+
DGIT_SOURCES = "sources".freeze
|
299
|
+
DGIT_CONFIG = "config".freeze
|
300
|
+
DGIT_OPTIONS = "options".freeze
|
301
|
+
DGIT_JOURNAL = "journal".freeze
|
299
302
|
|
300
303
|
private_constant :DGIT_SOURCES, :DGIT_CONFIG, :DGIT_OPTIONS, :DGIT_JOURNAL
|
301
304
|
|
@@ -306,7 +309,7 @@ module Diggit
|
|
306
309
|
# Returns the diggit instance.
|
307
310
|
# @return [Dig] the instance.
|
308
311
|
def self.it
|
309
|
-
|
312
|
+
raise "Diggit has not been initialized." if @diggit.nil?
|
310
313
|
@diggit
|
311
314
|
end
|
312
315
|
|
@@ -338,12 +341,11 @@ module Diggit
|
|
338
341
|
Oj.to_file(File.expand_path(DGIT_JOURNAL, dgit_folder), Journal.new)
|
339
342
|
end
|
340
343
|
FileUtils.mkdir(File.expand_path('sources', folder)) unless File.exist?(File.expand_path('sources', folder))
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
end
|
344
|
+
return if File.exist?(File.expand_path("plugins", folder))
|
345
|
+
FileUtils.mkdir_p(File.expand_path("plugins", folder))
|
346
|
+
FileUtils.mkdir_p(File.expand_path("plugins/analysis", folder))
|
347
|
+
FileUtils.mkdir_p(File.expand_path("plugins/addon", folder))
|
348
|
+
FileUtils.mkdir_p(File.expand_path("plugins/join", folder))
|
347
349
|
end
|
348
350
|
|
349
351
|
# Return the path of the given config file
|
@@ -364,7 +366,7 @@ module Diggit
|
|
364
366
|
# Use {.init} and {.it} instead.
|
365
367
|
# @return [Dig] a diggit object.
|
366
368
|
def initialize(folder)
|
367
|
-
|
369
|
+
raise "Folder #{folder} is not a diggit folder." unless File.exist?(File.expand_path(DGIT_FOLDER, folder))
|
368
370
|
@plugin_loader = PluginLoader.instance
|
369
371
|
@folder = folder
|
370
372
|
end
|
@@ -474,7 +476,8 @@ module Diggit
|
|
474
476
|
entry.toc
|
475
477
|
entry.error = e
|
476
478
|
placeholder.canceled << entry
|
477
|
-
Log.error "Error cleaning #{runnable.name}"
|
479
|
+
Log.error "Error cleaning #{runnable.name}: #{e}"
|
480
|
+
e.backtrace.each { |l| Log.debug(l) }
|
478
481
|
ensure
|
479
482
|
save_journal
|
480
483
|
end
|
@@ -488,7 +491,8 @@ module Diggit
|
|
488
491
|
entry.toc
|
489
492
|
entry.error = e
|
490
493
|
placeholder.canceled << entry
|
491
|
-
Log.error "Error running #{runnable.name}"
|
494
|
+
Log.error "Error running #{runnable.name}: #{e}"
|
495
|
+
e.backtrace.each { |l| Log.debug(l) }
|
492
496
|
else
|
493
497
|
entry.toc
|
494
498
|
placeholder.performed << entry
|
data/lib/dgit/entries.rb
CHANGED
@@ -29,11 +29,7 @@ module Diggit
|
|
29
29
|
# @param e [Exception, nil] the error, to indicate an absence of error, pass +nil+.
|
30
30
|
# @return [void]
|
31
31
|
def error=(e)
|
32
|
-
|
33
|
-
@error = nil
|
34
|
-
else
|
35
|
-
@error = ErrorEntry.new(e)
|
36
|
-
end
|
32
|
+
@error = e.nil? ? nil : ErrorEntry.new(e)
|
37
33
|
end
|
38
34
|
end
|
39
35
|
|
@@ -54,7 +50,7 @@ module Diggit
|
|
54
50
|
# Error status of the element.
|
55
51
|
# @return [Boolean]
|
56
52
|
def error?
|
57
|
-
|
53
|
+
!@canceled.empty?
|
58
54
|
end
|
59
55
|
|
60
56
|
# Check if a runnable has been performed or canceled.
|
@@ -63,13 +59,9 @@ module Diggit
|
|
63
59
|
# @return [Boolean]
|
64
60
|
def has?(runnable_or_string, state = :all)
|
65
61
|
name = retrieve_name(runnable_or_string)
|
66
|
-
if state == :performed
|
67
|
-
|
68
|
-
|
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
|
62
|
+
return @performed.count { |e| e.name == name } > 0 if state == :performed
|
63
|
+
return @canceled.count { |e| e.name == name } > 0 if state == :canceled
|
64
|
+
return (@performed + @canceled).count { |e| e.name == name } > 0 if state == :all
|
73
65
|
end
|
74
66
|
|
75
67
|
# Remove a runnable from all the entries.
|
@@ -84,11 +76,8 @@ module Diggit
|
|
84
76
|
private
|
85
77
|
|
86
78
|
def retrieve_name(runnable_or_string)
|
87
|
-
if runnable_or_string.is_a? String
|
88
|
-
|
89
|
-
else
|
90
|
-
return runnable_or_string.name
|
91
|
-
end
|
79
|
+
return runnable_or_string if runnable_or_string.is_a? String
|
80
|
+
runnable_or_string.name
|
92
81
|
end
|
93
82
|
end
|
94
83
|
|
data/lib/dgit/version.rb
CHANGED
data/plugins/addon/db.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# encoding: utf-8
|
2
3
|
#
|
3
4
|
# This file is part of Diggit.
|
@@ -25,8 +26,8 @@ require 'mongo'
|
|
25
26
|
# @!attribute [r] db
|
26
27
|
# @return [Mongo::DB] the mongo database object.
|
27
28
|
class Db < Diggit::Addon
|
28
|
-
DEFAULT_SERVER = '127.0.0.1:27017'
|
29
|
-
DEFAULT_DB = 'diggit'
|
29
|
+
DEFAULT_SERVER = '127.0.0.1:27017'.freeze
|
30
|
+
DEFAULT_DB = 'diggit'.freeze
|
30
31
|
|
31
32
|
attr_reader :client
|
32
33
|
|
data/plugins/addon/out.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# encoding: utf-8
|
2
3
|
#
|
3
4
|
# This file is part of Diggit.
|
@@ -17,7 +18,7 @@
|
|
17
18
|
#
|
18
19
|
# Copyright 2015 Jean-Rémy Falleri <jr.falleri@gmail.com>
|
19
20
|
|
20
|
-
#
|
21
|
+
# An output addon for Diggit. The name of the addon is :output, and can be reached in the
|
21
22
|
# addons hash. This addon might use an :output hash in the global options. In this hash, the
|
22
23
|
# :out key allows to configure the name of the output folder and :tmp the name of the temporary output
|
23
24
|
# folder.
|
@@ -28,8 +29,8 @@
|
|
28
29
|
class Out < Diggit::Addon
|
29
30
|
attr_reader :out, :tmp
|
30
31
|
|
31
|
-
DEFAULT_OUT = 'out'
|
32
|
-
DEFAULT_TMP = 'tmp'
|
32
|
+
DEFAULT_OUT = 'out'.freeze
|
33
|
+
DEFAULT_TMP = 'tmp'.freeze
|
33
34
|
|
34
35
|
def initialize(*args)
|
35
36
|
super
|
@@ -45,4 +46,25 @@ class Out < Diggit::Addon
|
|
45
46
|
FileUtils.mkdir_p(@out) unless File.exist?(@out)
|
46
47
|
FileUtils.mkdir_p(@tmp) unless File.exist?(@tmp)
|
47
48
|
end
|
49
|
+
|
50
|
+
# Get an output path for a file/directory.
|
51
|
+
# @param paths [Array<String>] the different folders of the path.
|
52
|
+
# @return [String] the absolute path.
|
53
|
+
def out_path(*paths)
|
54
|
+
File.join(@out, *paths)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Get a temporary path for a file/directory.
|
58
|
+
# @param paths [Array<String>] the different folders of the path.
|
59
|
+
# @return [String] the absolute path.
|
60
|
+
def tmp_path(*paths)
|
61
|
+
File.join(@tmp, *paths)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Clean the output and temporary folders.
|
65
|
+
# @return [void]
|
66
|
+
def clean
|
67
|
+
FileUtils.rm_rf(@out)
|
68
|
+
FileUtils.rm_rf(@tmp)
|
69
|
+
end
|
48
70
|
end
|