vx-builder 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vx/builder.rb +15 -2
- data/lib/vx/builder/build_configuration.rb +12 -13
- data/lib/vx/builder/build_configuration/deploy.rb +10 -17
- data/lib/vx/builder/build_configuration/deploy/base.rb +64 -0
- data/lib/vx/builder/build_configuration/deploy/shell.rb +21 -0
- data/lib/vx/builder/build_configuration/env.rb +11 -4
- data/lib/vx/builder/deploy_builder.rb +59 -0
- data/lib/vx/builder/{matrix.rb → matrix_builder.rb} +8 -20
- data/lib/vx/builder/script_builder.rb +127 -0
- data/lib/vx/builder/script_builder/base.rb +59 -0
- data/lib/vx/builder/{script/base.rb → script_builder/base.rb-e} +13 -10
- data/lib/vx/builder/{script/artifacts.rb → script_builder/cache.rb} +13 -30
- data/lib/vx/builder/{script/cache.rb → script_builder/cache.rb-e} +0 -0
- data/lib/vx/builder/script_builder/clojure.rb +34 -0
- data/lib/vx/builder/{script/clojure.rb → script_builder/clojure.rb-e} +0 -0
- data/lib/vx/builder/script_builder/deploy.rb +34 -0
- data/lib/vx/builder/script_builder/deploy.rb-e +34 -0
- data/lib/vx/builder/script_builder/env.rb +39 -0
- data/lib/vx/builder/{script/env.rb → script_builder/env.rb-e} +0 -0
- data/lib/vx/builder/script_builder/java.rb +31 -0
- data/lib/vx/builder/{script/java.rb → script_builder/java.rb-e} +0 -0
- data/lib/vx/builder/script_builder/prepare.rb +72 -0
- data/lib/vx/builder/{script/prepare.rb → script_builder/prepare.rb-e} +0 -0
- data/lib/vx/builder/script_builder/ruby.rb +80 -0
- data/lib/vx/builder/{script/ruby.rb → script_builder/ruby.rb-e} +0 -0
- data/lib/vx/builder/script_builder/scala.rb +50 -0
- data/lib/vx/builder/{script/scala.rb → script_builder/scala.rb-e} +0 -0
- data/lib/vx/builder/script_builder/script.rb +32 -0
- data/lib/vx/builder/script_builder/script.rb-e +32 -0
- data/lib/vx/builder/script_builder/services.rb +26 -0
- data/lib/vx/builder/{script/services.rb → script_builder/services.rb-e} +0 -0
- data/lib/vx/builder/task.rb +1 -7
- data/lib/vx/builder/version.rb +1 -1
- data/spec/fixtures/integration/ruby/deploy/config.yml +6 -2
- data/spec/fixtures/integration/ruby/deploy/d.after_script.sh +1 -1
- data/spec/fixtures/integration/ruby/deploy/d.before_script.sh +3 -1
- data/spec/fixtures/integration/ruby/deploy/d.script.sh +6 -2
- data/spec/fixtures/integration/ruby/matrix/config.yml +4 -1
- data/spec/fixtures/integration/ruby/matrix/d.after_script.sh +1 -1
- data/spec/fixtures/integration/ruby/matrix/d.before_script.sh +1 -1
- data/spec/fixtures/integration/ruby/matrix/d.script.sh +6 -2
- data/spec/fixtures/travis.yml +2 -7
- data/spec/integration/ruby_spec.rb +14 -19
- data/spec/lib/builder/build_configuration/cache_spec.rb +35 -0
- data/spec/lib/builder/build_configuration/deploy/base_spec.rb +33 -0
- data/spec/lib/builder/build_configuration/deploy/shell_spec.rb +61 -0
- data/spec/lib/builder/build_configuration/deploy_spec.rb +50 -0
- data/spec/lib/builder/build_configuration/env_spec.rb +43 -0
- data/spec/lib/builder/build_configuration_spec.rb +4 -124
- data/spec/lib/builder/deploy_builder_spec.rb +82 -0
- data/spec/lib/builder/{matrix_spec.rb → matrix_builder_spec.rb} +9 -67
- data/spec/lib/builder/{script → script_builder}/cache_spec.rb +1 -1
- data/spec/lib/builder/{script → script_builder}/clojure_spec.rb +1 -1
- data/spec/lib/builder/{script → script_builder}/env_spec.rb +1 -1
- data/spec/lib/builder/{script → script_builder}/java_spec.rb +1 -1
- data/spec/lib/builder/{script → script_builder}/prepare_spec.rb +2 -2
- data/spec/lib/builder/{script → script_builder}/ruby_spec.rb +1 -1
- data/spec/lib/builder/{script → script_builder}/scala_spec.rb +1 -1
- data/spec/lib/builder/{script_spec.rb → script_builder_spec.rb} +1 -1
- data/spec/lib/builder/task_spec.rb +0 -2
- data/spec/support/create.rb +24 -11
- metadata +59 -38
- data/lib/vx/builder/build_configuration/artifacts.rb +0 -68
- data/lib/vx/builder/build_configuration/deploy/provider.rb +0 -58
- data/lib/vx/builder/script.rb +0 -145
- data/lib/vx/builder/script/deploy.rb +0 -40
- data/lib/vx/builder/script/script.rb +0 -39
- data/spec/lib/builder/script/artifacts_spec.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4931a543965ca9828a090a0d2fee1cec1e7bedca
|
4
|
+
data.tar.gz: 916c04fd44e0df9dbb26ed7de24fe356fc58660a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa0e9cc22069c4d13042252a10d08dbeb356ab81800d1dccae33e77504dfe57f062a9ba3b4c1565a8f09e71ce189f8112f0588b77d8542660eb1e6b83db4e44e
|
7
|
+
data.tar.gz: 1e7a835fbfbf8d4b254bfaab6de087b4ecec84ee16cf7407c1ff38c055254c17ca5648b54f264c97f2c1bd8ce161a2afcb1f03395dfbe8b3a6b5680d23379456
|
data/lib/vx/builder.rb
CHANGED
@@ -3,11 +3,12 @@ require File.expand_path("../builder/version", __FILE__)
|
|
3
3
|
module Vx
|
4
4
|
module Builder
|
5
5
|
autoload :Source, File.expand_path("../builder/source", __FILE__)
|
6
|
-
autoload :Script, File.expand_path("../builder/script", __FILE__)
|
7
6
|
autoload :Task, File.expand_path("../builder/task", __FILE__)
|
8
7
|
autoload :Configuration, File.expand_path("../builder/configuration", __FILE__)
|
9
8
|
autoload :BuildConfiguration, File.expand_path("../builder/build_configuration", __FILE__)
|
10
|
-
autoload :
|
9
|
+
autoload :MatrixBuilder, File.expand_path("../builder/matrix_builder", __FILE__)
|
10
|
+
autoload :DeployBuilder, File.expand_path("../builder/deploy_builder", __FILE__)
|
11
|
+
autoload :ScriptBuilder, File.expand_path("../builder/script_builder", __FILE__)
|
11
12
|
|
12
13
|
module Helper
|
13
14
|
autoload :Config, File.expand_path("../builder/helper/config", __FILE__)
|
@@ -31,5 +32,17 @@ module Vx
|
|
31
32
|
@config = nil
|
32
33
|
end
|
33
34
|
|
35
|
+
def matrix(build_configuration)
|
36
|
+
MatrixBuilder.new(build_configuration)
|
37
|
+
end
|
38
|
+
|
39
|
+
def deploy(matrix_builder, options = {})
|
40
|
+
DeployBuilder.new(matrix_builder, options)
|
41
|
+
end
|
42
|
+
|
43
|
+
def script(task, build_configuration)
|
44
|
+
ScriptBuilder.new task, build_configuration
|
45
|
+
end
|
46
|
+
|
34
47
|
end
|
35
48
|
end
|
@@ -41,15 +41,15 @@ module Vx
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
attr_reader :env, :cache, :
|
44
|
+
attr_reader :env, :cache, :deploy, :attributes, :deploy_modules
|
45
45
|
|
46
46
|
def initialize(new_attributes = {}, matrix_attributes = {})
|
47
47
|
new_attributes = {} unless new_attributes.is_a?(Hash)
|
48
48
|
|
49
|
-
@env
|
50
|
-
@cache
|
51
|
-
@
|
52
|
-
@
|
49
|
+
@env = Env.new new_attributes.delete("env")
|
50
|
+
@cache = Cache.new new_attributes.delete("cache")
|
51
|
+
@deploy = Deploy.new new_attributes.delete("deploy")
|
52
|
+
@deploy_modules = new_attributes.delete("deploy_modules") || []
|
53
53
|
|
54
54
|
@matrix_attributes = matrix_attributes
|
55
55
|
|
@@ -70,11 +70,11 @@ module Vx
|
|
70
70
|
end
|
71
71
|
|
72
72
|
def deploy?
|
73
|
-
|
73
|
+
deploy.attributes.any?
|
74
74
|
end
|
75
75
|
|
76
|
-
def
|
77
|
-
|
76
|
+
def deploy_modules?
|
77
|
+
deploy_modules.any?
|
78
78
|
end
|
79
79
|
|
80
80
|
# for tests
|
@@ -83,10 +83,9 @@ module Vx
|
|
83
83
|
end
|
84
84
|
|
85
85
|
def to_hash
|
86
|
-
attributes.merge("env"
|
87
|
-
.merge("cache"
|
88
|
-
.merge("
|
89
|
-
.merge("deploy" => deploy.attributes)
|
86
|
+
attributes.merge("env" => env.attributes)
|
87
|
+
.merge("cache" => cache.attributes)
|
88
|
+
.merge("deploy" => deploy.attributes)
|
90
89
|
end
|
91
90
|
|
92
91
|
def to_yaml
|
@@ -102,7 +101,7 @@ module Vx
|
|
102
101
|
end
|
103
102
|
|
104
103
|
def cached_directories
|
105
|
-
|
104
|
+
cache.enabled? and cache.directories
|
106
105
|
end
|
107
106
|
|
108
107
|
(ATTRIBUTES - %w{ language }).each do |attr|
|
@@ -13,10 +13,16 @@ module Vx
|
|
13
13
|
@attributes
|
14
14
|
end
|
15
15
|
|
16
|
-
def
|
17
|
-
|
18
|
-
|
16
|
+
def find_modules(branch)
|
17
|
+
modules = []
|
18
|
+
Base.loaded.each do |l|
|
19
|
+
attributes.each do |attr|
|
20
|
+
if l.detect(attr)
|
21
|
+
modules << l.new(attr)
|
22
|
+
end
|
23
|
+
end
|
19
24
|
end
|
25
|
+
modules.select{ |m| m.branch?(branch) }
|
20
26
|
end
|
21
27
|
|
22
28
|
private
|
@@ -28,8 +34,6 @@ module Vx
|
|
28
34
|
new_env
|
29
35
|
when Hash
|
30
36
|
[new_env]
|
31
|
-
when String
|
32
|
-
[new_env]
|
33
37
|
else
|
34
38
|
[]
|
35
39
|
end
|
@@ -39,18 +43,7 @@ module Vx
|
|
39
43
|
|
40
44
|
def normalize_each(new_env)
|
41
45
|
@attributes = []
|
42
|
-
new_env.
|
43
|
-
case env
|
44
|
-
when Hash
|
45
|
-
if env["provider"]
|
46
|
-
@attributes.push env
|
47
|
-
else
|
48
|
-
@attributes.push env.merge("provider" => "shell")
|
49
|
-
end
|
50
|
-
when String
|
51
|
-
@attributes.push("provider" => "shell", "command" => env)
|
52
|
-
end
|
53
|
-
end
|
46
|
+
@attributes = new_env.select{|i| i.is_a?(Hash) }
|
54
47
|
end
|
55
48
|
|
56
49
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Vx
|
2
|
+
module Builder
|
3
|
+
class BuildConfiguration
|
4
|
+
class Deploy
|
5
|
+
|
6
|
+
class Base
|
7
|
+
|
8
|
+
class << self
|
9
|
+
|
10
|
+
@@loaded = []
|
11
|
+
|
12
|
+
def loaded
|
13
|
+
@@loaded
|
14
|
+
end
|
15
|
+
|
16
|
+
def provide(val)
|
17
|
+
loaded.push self
|
18
|
+
@key = val
|
19
|
+
end
|
20
|
+
|
21
|
+
def key
|
22
|
+
@key
|
23
|
+
end
|
24
|
+
|
25
|
+
def detect(params)
|
26
|
+
params.key?(key.to_s) if key
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
attr_reader :params, :branch
|
31
|
+
|
32
|
+
def initialize(params)
|
33
|
+
@params = params.is_a?(Hash) ? params : {}
|
34
|
+
self.branch = params["branch"]
|
35
|
+
end
|
36
|
+
|
37
|
+
def branch=(value)
|
38
|
+
@branch = Array(value).map(&:to_s)
|
39
|
+
end
|
40
|
+
|
41
|
+
def branch?(name)
|
42
|
+
if branch.empty?
|
43
|
+
true
|
44
|
+
else
|
45
|
+
branch.include?(name)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def key
|
50
|
+
if self.class.key
|
51
|
+
Array(params[self.class.key.to_s])
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_commands
|
56
|
+
nil
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require File.expand_path("../base", __FILE__)
|
2
|
+
|
3
|
+
module Vx
|
4
|
+
module Builder
|
5
|
+
class BuildConfiguration
|
6
|
+
class Deploy
|
7
|
+
|
8
|
+
class Shell < Base
|
9
|
+
|
10
|
+
provide :shell
|
11
|
+
|
12
|
+
def to_commands
|
13
|
+
key.map(&:to_s)
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -23,16 +23,23 @@ module Vx
|
|
23
23
|
|
24
24
|
@attributes =
|
25
25
|
case new_env
|
26
|
+
when String
|
27
|
+
{
|
28
|
+
"matrix" => [],
|
29
|
+
"global" => Array(new_env)
|
30
|
+
}
|
26
31
|
when Hash
|
27
32
|
{
|
28
33
|
"matrix" => Array(new_env['matrix']),
|
29
34
|
"global" => Array(new_env['global'])
|
30
35
|
}
|
31
36
|
else
|
32
|
-
|
33
|
-
|
34
|
-
"
|
35
|
-
|
37
|
+
env = Array(new_env).flatten.map(&:to_s)
|
38
|
+
if env.size == 1
|
39
|
+
{ "matrix" => [], "global" => env }
|
40
|
+
else
|
41
|
+
{ "matrix" => env, "global" => [] }
|
42
|
+
end
|
36
43
|
end
|
37
44
|
|
38
45
|
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Vx
|
2
|
+
module Builder
|
3
|
+
class DeployBuilder
|
4
|
+
|
5
|
+
BLACK_LIST = %w{
|
6
|
+
image
|
7
|
+
before_script
|
8
|
+
after_success
|
9
|
+
script
|
10
|
+
}
|
11
|
+
|
12
|
+
attr_reader :base_build_configuration, :matrix_build_configuration, :branch
|
13
|
+
|
14
|
+
def initialize(matrix_builder, options = {})
|
15
|
+
@base_build_configuration = matrix_builder.build_configuration
|
16
|
+
@matrix_build_configuration = matrix_builder.build.first
|
17
|
+
@branch = options[:branch]
|
18
|
+
end
|
19
|
+
|
20
|
+
def build
|
21
|
+
@build ||= begin
|
22
|
+
return false unless valid?
|
23
|
+
|
24
|
+
hash = matrix_build_configuration.to_hash
|
25
|
+
|
26
|
+
BLACK_LIST.each do |key|
|
27
|
+
hash.delete key
|
28
|
+
end
|
29
|
+
|
30
|
+
hash["env"]["matrix"] = []
|
31
|
+
|
32
|
+
BuildConfiguration.new(
|
33
|
+
hash.merge(
|
34
|
+
"deploy_modules" => deploy_modules,
|
35
|
+
"deploy" => nil
|
36
|
+
)
|
37
|
+
)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def valid?
|
42
|
+
deploy? and deploy_modules.any?
|
43
|
+
end
|
44
|
+
|
45
|
+
def deploy_modules
|
46
|
+
@deploy_modules ||= deploy.find_modules(branch)
|
47
|
+
end
|
48
|
+
|
49
|
+
def deploy
|
50
|
+
base_build_configuration.deploy
|
51
|
+
end
|
52
|
+
|
53
|
+
def deploy?
|
54
|
+
deploy.attributes.any?
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Vx
|
2
2
|
module Builder
|
3
|
-
|
3
|
+
MatrixBuilder = Struct.new(:build_configuration) do
|
4
4
|
|
5
5
|
KEYS = %w{
|
6
6
|
rvm
|
@@ -16,24 +16,12 @@ module Vx
|
|
16
16
|
extract_keys_from_builds_configuration.map(&:first).sort
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
26
|
-
|
27
|
-
def deploy_configuration(branch)
|
28
|
-
return unless build_configuration.deploy?
|
29
|
-
|
30
|
-
availabled_providers = build_configuration.deploy.providers.select do |provider|
|
31
|
-
provider.branch?(branch)
|
32
|
-
end
|
33
|
-
|
34
|
-
unless availabled_providers.empty?
|
35
|
-
build_configurations.first.dup.tap do |config|
|
36
|
-
config.deploy_attributes = availabled_providers.map(&:to_hash)
|
19
|
+
def build
|
20
|
+
@build ||= begin
|
21
|
+
new_attributes = build_configuration.to_hash.dup
|
22
|
+
attributes_for_new_build_configurations_with_merged_env.map do |matrix_attributes|
|
23
|
+
new_attributes.merge!(matrix_attributes)
|
24
|
+
BuildConfiguration.new new_attributes, matrix_attributes
|
37
25
|
end
|
38
26
|
end
|
39
27
|
end
|
@@ -44,7 +32,7 @@ module Vx
|
|
44
32
|
attrs.map! do |a|
|
45
33
|
env = a["env"]
|
46
34
|
a["env"] = {
|
47
|
-
"global" =>
|
35
|
+
"global" => build_configuration.env.global,
|
48
36
|
"matrix" => Array(env)
|
49
37
|
}
|
50
38
|
a
|
@@ -0,0 +1,127 @@
|
|
1
|
+
require 'vx/common'
|
2
|
+
|
3
|
+
module Vx
|
4
|
+
module Builder
|
5
|
+
class ScriptBuilder
|
6
|
+
|
7
|
+
autoload :Base, File.expand_path("../script_builder/base", __FILE__)
|
8
|
+
autoload :Env, File.expand_path("../script_builder/env", __FILE__)
|
9
|
+
autoload :Ruby, File.expand_path("../script_builder/ruby", __FILE__)
|
10
|
+
autoload :Java, File.expand_path("../script_builder/java", __FILE__)
|
11
|
+
autoload :Scala, File.expand_path("../script_builder/scala", __FILE__)
|
12
|
+
autoload :Clojure, File.expand_path("../script_builder/clojure", __FILE__)
|
13
|
+
autoload :Script, File.expand_path("../script_builder/script", __FILE__)
|
14
|
+
autoload :Prepare, File.expand_path("../script_builder/prepare", __FILE__)
|
15
|
+
autoload :Databases, File.expand_path("../script_builder/databases", __FILE__)
|
16
|
+
autoload :Cache, File.expand_path("../script_builder/cache", __FILE__)
|
17
|
+
autoload :Services, File.expand_path("../script_builder/services", __FILE__)
|
18
|
+
autoload :Deploy, File.expand_path("../script_builder/deploy", __FILE__)
|
19
|
+
|
20
|
+
include Common::Helper::Middlewares
|
21
|
+
|
22
|
+
middlewares do
|
23
|
+
use Builder::ScriptBuilder::Cache
|
24
|
+
use Builder::ScriptBuilder::Env
|
25
|
+
use Builder::ScriptBuilder::Services
|
26
|
+
use Builder::ScriptBuilder::Prepare
|
27
|
+
use Builder::ScriptBuilder::Java
|
28
|
+
use Builder::ScriptBuilder::Scala
|
29
|
+
use Builder::ScriptBuilder::Clojure
|
30
|
+
use Builder::ScriptBuilder::Ruby
|
31
|
+
use Builder::ScriptBuilder::Deploy
|
32
|
+
use Builder::ScriptBuilder::Script
|
33
|
+
end
|
34
|
+
|
35
|
+
attr_reader :source, :task
|
36
|
+
|
37
|
+
def initialize(task, source)
|
38
|
+
@source = source
|
39
|
+
@task = task
|
40
|
+
end
|
41
|
+
|
42
|
+
def image
|
43
|
+
source.image.first
|
44
|
+
end
|
45
|
+
|
46
|
+
def to_before_script
|
47
|
+
a = []
|
48
|
+
a << "\n# init"
|
49
|
+
a += env.init
|
50
|
+
|
51
|
+
a << "\n# before install"
|
52
|
+
a += env.before_install
|
53
|
+
|
54
|
+
a << "\n# announce"
|
55
|
+
a += env.announce
|
56
|
+
|
57
|
+
a << "\n# install"
|
58
|
+
a += env.install
|
59
|
+
|
60
|
+
a << "\n# before script"
|
61
|
+
a += env.before_script
|
62
|
+
|
63
|
+
a.join("\n")
|
64
|
+
end
|
65
|
+
|
66
|
+
def to_after_script
|
67
|
+
a = []
|
68
|
+
a << "\n# after script init"
|
69
|
+
a += env.after_script_init
|
70
|
+
|
71
|
+
a << "\n# after script"
|
72
|
+
a += env.after_script
|
73
|
+
a.join("\n")
|
74
|
+
end
|
75
|
+
|
76
|
+
def to_script
|
77
|
+
a = []
|
78
|
+
|
79
|
+
a << "\n# script"
|
80
|
+
a += env.script
|
81
|
+
|
82
|
+
a << "\n# after success"
|
83
|
+
a += env.after_success
|
84
|
+
|
85
|
+
a.join("\n")
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
def env
|
91
|
+
@env ||= run_middlewares(default_env) {|_| _ }
|
92
|
+
end
|
93
|
+
|
94
|
+
def default_env
|
95
|
+
OpenStruct.new(
|
96
|
+
# initialization, repo does not exists
|
97
|
+
init: [],
|
98
|
+
|
99
|
+
# before instalation, using for system setup
|
100
|
+
before_install: [],
|
101
|
+
|
102
|
+
# instalation, using for application setup
|
103
|
+
install: [],
|
104
|
+
|
105
|
+
# announce software and services version
|
106
|
+
announce: [],
|
107
|
+
|
108
|
+
before_script: [],
|
109
|
+
script: [],
|
110
|
+
after_success: [],
|
111
|
+
|
112
|
+
after_script_init: [],
|
113
|
+
after_script: [],
|
114
|
+
|
115
|
+
before_deploy: [],
|
116
|
+
deploy: [],
|
117
|
+
|
118
|
+
source: source,
|
119
|
+
task: task,
|
120
|
+
cache_key: [],
|
121
|
+
cached_directories: []
|
122
|
+
)
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|