avm-tools 0.62.1 → 0.62.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/lib/avm/launcher/context/instance_manager.rb +76 -0
- data/lib/avm/launcher/context/instance_manager/cached_instance.rb +37 -0
- data/lib/avm/launcher/context/instance_manager/cached_instances.rb +35 -0
- data/lib/avm/launcher/errors/base.rb +10 -0
- data/lib/avm/launcher/errors/non_project.rb +15 -0
- data/lib/avm/launcher/instances/base.rb +94 -0
- data/lib/avm/launcher/instances/base/cache.rb +43 -0
- data/lib/avm/projects/stereotypes/git_subrepo/warp.rb +5 -4
- data/lib/avm/tools/version.rb +1 -1
- data/lib/eac_launcher/context.rb +2 -2
- data/lib/eac_launcher/context/instance_discovery.rb +2 -2
- data/lib/eac_launcher/git/sub_warp_base.rb +3 -2
- data/lib/eac_launcher/instances.rb +2 -2
- data/lib/eac_launcher/instances/error.rb +7 -3
- data/lib/eac_launcher/paths/logical.rb +2 -2
- data/lib/eac_launcher/publish/base.rb +2 -2
- metadata +8 -4
- data/lib/eac_launcher/context/instance_manager.rb +0 -95
- data/lib/eac_launcher/instances/base.rb +0 -91
- data/lib/eac_launcher/instances/base/cache.rb +0 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 023b291269b46cb2a272642eac7febb8cbecd15429aeae61435260d0977c0958
|
4
|
+
data.tar.gz: 4ff8f6c8c50ad54a5f7b84be35780e7a221608c7e955a0cb2e241b6f31aa88e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df68926e69e0e8912f73e452fd50b218909620040eb2a69a0695ddce9542f8616e881cd455248df8a9cb89028f6ad9ff9d66aa204c7c79ba0559d317779c2e56
|
7
|
+
data.tar.gz: 155dbcdd721e28b5d4cd021ddb25f35daf4b4f26c2b530cb5ba21377c72ee7a0329a5149831a6031d0c7cfd12e777254b251954774ea7eb9e317b7d57f034f10
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
require 'eac_launcher/publish/check_result'
|
5
|
+
require('yaml')
|
6
|
+
|
7
|
+
module Avm
|
8
|
+
module Launcher
|
9
|
+
class Context
|
10
|
+
class InstanceManager
|
11
|
+
require_sub __FILE__
|
12
|
+
enable_simple_cache
|
13
|
+
common_constructor :context
|
14
|
+
|
15
|
+
def publish_state_set(instance, stereotype_name, check_status)
|
16
|
+
data = cached_instances_file_content_uncached
|
17
|
+
data[instance.logical] ||= {}
|
18
|
+
data[instance.logical][:publish_state] ||= {}
|
19
|
+
data[instance.logical][:publish_state][stereotype_name] = check_status
|
20
|
+
write_cache_file(data)
|
21
|
+
end
|
22
|
+
|
23
|
+
def pending_instances
|
24
|
+
instances.select { |instance| pending_instance?(instance) }
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def instances_uncached
|
30
|
+
(cached_instances || search_instances).select(&:included?)
|
31
|
+
end
|
32
|
+
|
33
|
+
def search_instances
|
34
|
+
cache_instances(::EacLauncher::Context::InstanceDiscovery.new(context).instances)
|
35
|
+
end
|
36
|
+
|
37
|
+
def cached_instances
|
38
|
+
return nil if context.recache
|
39
|
+
return nil unless cached_instances_file_content
|
40
|
+
|
41
|
+
CachedInstances.new(self, cached_instances_file_content).instances
|
42
|
+
end
|
43
|
+
|
44
|
+
def cached_instances_file_content_uncached
|
45
|
+
r = YAML.load_file(cache_file_path)
|
46
|
+
r.is_a?(::Hash) ? r : nil
|
47
|
+
rescue Errno::ENOENT
|
48
|
+
nil
|
49
|
+
end
|
50
|
+
|
51
|
+
def cache_instances(instances)
|
52
|
+
write_cache_file(Hash[instances.map { |i| [i.logical, i.to_h] }])
|
53
|
+
instances
|
54
|
+
end
|
55
|
+
|
56
|
+
def write_cache_file(data)
|
57
|
+
::File.write(cache_file_path, data.to_yaml)
|
58
|
+
end
|
59
|
+
|
60
|
+
def cache_file_path
|
61
|
+
::File.join(context.cache_root, 'instances.yml')
|
62
|
+
end
|
63
|
+
|
64
|
+
def pending_instance?(instance)
|
65
|
+
data = cached_instances_file_content
|
66
|
+
return false unless data[instance.logical]
|
67
|
+
return false unless data[instance.logical][:publish_state].is_a?(Hash)
|
68
|
+
|
69
|
+
data[instance.logical][:publish_state].any? do |_k, v|
|
70
|
+
::EacLauncher::Publish::CheckResult.pending_status?(v)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avm/launcher/instances/base'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
|
6
|
+
module Avm
|
7
|
+
module Launcher
|
8
|
+
class Context
|
9
|
+
class InstanceManager
|
10
|
+
class CachedInstance
|
11
|
+
enable_console_speaker
|
12
|
+
enable_simple_cache
|
13
|
+
common_constructor :cached_instances, :data
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def instance_uncached
|
18
|
+
::Avm::Launcher::Instances::Base.instanciate(path, parent_instance)
|
19
|
+
rescue ::Avm::Launcher::Errors::NonProject
|
20
|
+
warn "Cached instance \"#{data[:logical]}\" not found"
|
21
|
+
nil
|
22
|
+
end
|
23
|
+
|
24
|
+
def parent_instance_uncached
|
25
|
+
data[:parent]
|
26
|
+
.if_present { |v| cached_instances.by_logical_path(v) }
|
27
|
+
.if_present(&:instance)
|
28
|
+
end
|
29
|
+
|
30
|
+
def path_uncached
|
31
|
+
::EacLauncher::Paths::Logical.from_h(cached_instances.context, data)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avm/launcher/context/instance_manager/cached_instance'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
|
6
|
+
module Avm
|
7
|
+
module Launcher
|
8
|
+
class Context
|
9
|
+
class InstanceManager
|
10
|
+
class CachedInstances
|
11
|
+
enable_simple_cache
|
12
|
+
common_constructor :context, :content
|
13
|
+
|
14
|
+
def instances
|
15
|
+
content.keys.map { |k| by_logical_path(k).instance }.reject(&:blank?)
|
16
|
+
end
|
17
|
+
|
18
|
+
def by_logical_path(key)
|
19
|
+
cached_instances[key].if_blank do
|
20
|
+
cached_instances[key] = ::Avm::Launcher::Context::InstanceManager::CachedInstance.new(
|
21
|
+
self, content.fetch(key)
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def cached_instances_uncached
|
29
|
+
{}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avm/launcher/errors/base'
|
4
|
+
|
5
|
+
module Avm
|
6
|
+
module Launcher
|
7
|
+
module Errors
|
8
|
+
class NonProject < ::Avm::Launcher::Errors::Base
|
9
|
+
def initialize(path)
|
10
|
+
super("#{path} is not a project")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base/cache'
|
4
|
+
require 'avm/launcher/errors/non_project'
|
5
|
+
|
6
|
+
module Avm
|
7
|
+
module Launcher
|
8
|
+
module Instances
|
9
|
+
module Base
|
10
|
+
class << self
|
11
|
+
def extend_object(object)
|
12
|
+
object.extend ::EacRubyUtils::SimpleCache
|
13
|
+
object.extend ::EacRubyUtils::Console::Speaker
|
14
|
+
object.extend ::Avm::Launcher::Instances::Base::Cache
|
15
|
+
super
|
16
|
+
end
|
17
|
+
|
18
|
+
def instanciate(path, parent)
|
19
|
+
unless path.is_a?(::Avm::Launcher::Instances::Base)
|
20
|
+
raise ::Avm::Launcher::Errors::NonProject, path unless path.project?
|
21
|
+
|
22
|
+
path.extend(::Avm::Launcher::Instances::Base)
|
23
|
+
path.parent = parent
|
24
|
+
end
|
25
|
+
path
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
attr_accessor :parent
|
30
|
+
|
31
|
+
def name
|
32
|
+
logical
|
33
|
+
end
|
34
|
+
|
35
|
+
def stereotype?(stereotype)
|
36
|
+
stereotypes.include?(stereotype)
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_parent_path
|
40
|
+
return self unless @parent
|
41
|
+
|
42
|
+
logical.gsub(/\A#{Regexp.quote(@parent.logical)}/, '')
|
43
|
+
end
|
44
|
+
|
45
|
+
def project?
|
46
|
+
stereotypes.any?
|
47
|
+
end
|
48
|
+
|
49
|
+
def publish_run
|
50
|
+
stereotypes.each do |s|
|
51
|
+
next unless publish?(s)
|
52
|
+
|
53
|
+
infov(name, "publishing #{s.label}")
|
54
|
+
s.publish_class.new(self).run
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def publish_check
|
59
|
+
stereotypes.each do |s|
|
60
|
+
next unless publish?(s)
|
61
|
+
|
62
|
+
puts "#{name.to_s.cyan}|#{s.label}|" \
|
63
|
+
"#{s.publish_class.new(self).check}"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def project_name
|
68
|
+
::File.basename(logical)
|
69
|
+
end
|
70
|
+
|
71
|
+
def included?
|
72
|
+
!::EacLauncher::Context.current.settings.excluded_projects.include?(project_name)
|
73
|
+
end
|
74
|
+
|
75
|
+
def to_h
|
76
|
+
super.to_h.merge(parent: parent ? parent.logical : nil)
|
77
|
+
end
|
78
|
+
|
79
|
+
private
|
80
|
+
|
81
|
+
def publish?(stereotype)
|
82
|
+
return false unless stereotype.publish_class
|
83
|
+
|
84
|
+
filter = ::EacLauncher::Context.current.publish_options[:stereotype]
|
85
|
+
filter.blank? ? true : filter == stereotype.name.demodulize
|
86
|
+
end
|
87
|
+
|
88
|
+
def options_uncached
|
89
|
+
::EacLauncher::Context.current.settings.instance_settings(self)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avm
|
4
|
+
module Launcher
|
5
|
+
module Instances
|
6
|
+
module Base
|
7
|
+
module Cache
|
8
|
+
def cache_path(subpath)
|
9
|
+
File.join(cache_root, subpath)
|
10
|
+
end
|
11
|
+
|
12
|
+
def cache_key(key, &block)
|
13
|
+
v = cache_key_get(key)
|
14
|
+
return v if v.present? || block.nil?
|
15
|
+
|
16
|
+
v = yield
|
17
|
+
cache_key_write(key, v)
|
18
|
+
v
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def cache_key_get(key)
|
24
|
+
File.file?(cache_key_path(key)) ? File.read(cache_key_path(key)) : nil
|
25
|
+
end
|
26
|
+
|
27
|
+
def cache_key_write(key, value)
|
28
|
+
FileUtils.mkdir_p(File.dirname(cache_key_path(key)))
|
29
|
+
File.write(cache_key_path(key), value)
|
30
|
+
end
|
31
|
+
|
32
|
+
def cache_key_path(key)
|
33
|
+
File.join(cache_root, 'keys', key.parameterize)
|
34
|
+
end
|
35
|
+
|
36
|
+
def cache_root
|
37
|
+
File.join(::EacLauncher::Context.current.cache_root, name.parameterize)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'eac_ruby_utils/simple_cache'
|
4
4
|
require 'eac_launcher/git/sub_warp_base'
|
5
|
-
require '
|
5
|
+
require 'avm/launcher/errors/base'
|
6
6
|
require 'eac_launcher/paths/real'
|
7
7
|
require 'eac_launcher/vendor/github'
|
8
8
|
|
@@ -32,8 +32,9 @@ module Avm
|
|
32
32
|
return if parent_git_warped.rev_parse(subrepo_parent_hash) &&
|
33
33
|
parent_git_warped.descendant?('HEAD', subrepo_parent_hash)
|
34
34
|
|
35
|
-
raise EacLauncher::Instances::
|
36
|
-
|
35
|
+
raise EacLauncher::Instances::Errors::Base,
|
36
|
+
"Subrepo parent hash \"#{subrepo_parent_hash}\"" \
|
37
|
+
" not found in \"#{parent_git_warped}\""
|
37
38
|
end
|
38
39
|
|
39
40
|
def subrepo_parent_hash
|
@@ -41,7 +42,7 @@ module Avm
|
|
41
42
|
h = data['Pull Parent']
|
42
43
|
return h if h.present?
|
43
44
|
|
44
|
-
raise EacLauncher::Instances::
|
45
|
+
raise EacLauncher::Instances::Errors::Base, "Subrepo parent hash is blank: #{data}"
|
45
46
|
end
|
46
47
|
|
47
48
|
def init_aux
|
data/lib/avm/tools/version.rb
CHANGED
data/lib/eac_launcher/context.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'active_support/core_ext/hash/indifferent_access'
|
4
|
+
require 'avm/launcher/context/instance_manager'
|
4
5
|
require 'eac_ruby_utils/simple_cache'
|
5
6
|
require 'eac_ruby_utils/console/speaker'
|
6
7
|
require 'eac_launcher/context/instance_discovery'
|
7
|
-
require 'eac_launcher/context/instance_manager'
|
8
8
|
require 'eac_launcher/context/settings'
|
9
9
|
require 'eac_launcher/paths/logical'
|
10
10
|
require 'eac_launcher/project'
|
@@ -39,7 +39,7 @@ module EacLauncher
|
|
39
39
|
@settings = ::EacLauncher::Context::Settings.new(build_option(:settings_file))
|
40
40
|
@cache_root = build_option(:cache_root)
|
41
41
|
@publish_options = { new: false, confirm: false, stereotype: nil }
|
42
|
-
@instance_manager = ::
|
42
|
+
@instance_manager = ::Avm::Launcher::Context::InstanceManager.new(self)
|
43
43
|
@recache = false
|
44
44
|
end
|
45
45
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'ruby-progressbar'
|
4
|
-
require '
|
4
|
+
require 'avm/launcher/instances/base'
|
5
5
|
|
6
6
|
module EacLauncher
|
7
7
|
class Context
|
@@ -22,7 +22,7 @@ module EacLauncher
|
|
22
22
|
update_progress_format(path)
|
23
23
|
on_rescued_path_instances(path) do |r|
|
24
24
|
if path.project?
|
25
|
-
parent_instance = ::
|
25
|
+
parent_instance = ::Avm::Launcher::Instances::Base.instanciate(path, parent_instance)
|
26
26
|
r << path
|
27
27
|
end
|
28
28
|
children = path.children
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'avm/projects/stereotype'
|
4
|
+
require 'avm/launcher/errors/base'
|
4
5
|
|
5
6
|
module EacLauncher
|
6
7
|
module Git
|
@@ -11,7 +12,7 @@ module EacLauncher
|
|
11
12
|
r = find_parent_instance(instance.parent)
|
12
13
|
return r if r
|
13
14
|
|
14
|
-
::EacLauncher::Instances::
|
15
|
+
::EacLauncher::Instances::Errors::Base.new('Git parent not found')
|
15
16
|
end
|
16
17
|
|
17
18
|
def find_parent_instance(current)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
4
|
-
require '
|
3
|
+
require 'avm/launcher/errors/base'
|
4
|
+
require 'avm/launcher/instances/base'
|
5
5
|
require 'eac_launcher/instances/runner_helper'
|
6
6
|
require 'eac_launcher/instances/settings'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'avm/stereotypes'
|
3
|
+
require 'avm/projects/stereotypes'
|
4
4
|
require 'eac_launcher/paths/real'
|
5
5
|
|
6
6
|
module EacLauncher
|
@@ -68,7 +68,7 @@ module EacLauncher
|
|
68
68
|
end
|
69
69
|
|
70
70
|
def warped_uncached
|
71
|
-
if is_a?(::
|
71
|
+
if is_a?(::Avm::Launcher::Instances::Base)
|
72
72
|
stereotypes.each do |s|
|
73
73
|
return s.warp_class.new(self) if s.warp_class
|
74
74
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'avm/launcher/errors/base'
|
4
4
|
|
5
5
|
module EacLauncher
|
6
6
|
module Publish
|
@@ -35,7 +35,7 @@ module EacLauncher
|
|
35
35
|
|
36
36
|
def check_with_rescue
|
37
37
|
internal_check
|
38
|
-
rescue ::EacLauncher::Instances::
|
38
|
+
rescue ::EacLauncher::Instances::Errors::Base => e
|
39
39
|
::EacLauncher::Publish::CheckResult.blocked("Error: #{e}")
|
40
40
|
rescue ::EacLauncher::Git::Error => e
|
41
41
|
::EacLauncher::Publish::CheckResult.blocked("Git error: #{e}")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: avm-tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.62.
|
4
|
+
version: 0.62.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Esquilo Azul Company
|
@@ -363,6 +363,13 @@ files:
|
|
363
363
|
- lib/avm/instances/entries.rb
|
364
364
|
- lib/avm/instances/entries/entry_reader.rb
|
365
365
|
- lib/avm/instances/entry_keys.rb
|
366
|
+
- lib/avm/launcher/context/instance_manager.rb
|
367
|
+
- lib/avm/launcher/context/instance_manager/cached_instance.rb
|
368
|
+
- lib/avm/launcher/context/instance_manager/cached_instances.rb
|
369
|
+
- lib/avm/launcher/errors/base.rb
|
370
|
+
- lib/avm/launcher/errors/non_project.rb
|
371
|
+
- lib/avm/launcher/instances/base.rb
|
372
|
+
- lib/avm/launcher/instances/base/cache.rb
|
366
373
|
- lib/avm/local_projects.rb
|
367
374
|
- lib/avm/local_projects/instance.rb
|
368
375
|
- lib/avm/local_projects/jobs/update.rb
|
@@ -487,7 +494,6 @@ files:
|
|
487
494
|
- lib/eac_launcher.rb
|
488
495
|
- lib/eac_launcher/context.rb
|
489
496
|
- lib/eac_launcher/context/instance_discovery.rb
|
490
|
-
- lib/eac_launcher/context/instance_manager.rb
|
491
497
|
- lib/eac_launcher/context/settings.rb
|
492
498
|
- lib/eac_launcher/git.rb
|
493
499
|
- lib/eac_launcher/git/base.rb
|
@@ -503,8 +509,6 @@ files:
|
|
503
509
|
- lib/eac_launcher/git/sub_warp_base.rb
|
504
510
|
- lib/eac_launcher/git/warp_base.rb
|
505
511
|
- lib/eac_launcher/instances.rb
|
506
|
-
- lib/eac_launcher/instances/base.rb
|
507
|
-
- lib/eac_launcher/instances/base/cache.rb
|
508
512
|
- lib/eac_launcher/instances/error.rb
|
509
513
|
- lib/eac_launcher/instances/runner_helper.rb
|
510
514
|
- lib/eac_launcher/instances/settings.rb
|
@@ -1,95 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'eac_launcher/publish/check_result'
|
4
|
-
require('yaml')
|
5
|
-
|
6
|
-
module EacLauncher
|
7
|
-
class Context
|
8
|
-
class InstanceManager
|
9
|
-
include ::EacRubyUtils::SimpleCache
|
10
|
-
|
11
|
-
def initialize(context)
|
12
|
-
@context = context
|
13
|
-
end
|
14
|
-
|
15
|
-
def publish_state_set(instance, stereotype_name, check_status)
|
16
|
-
data = cached_instances_file_content_uncached
|
17
|
-
data[instance.logical] ||= {}
|
18
|
-
data[instance.logical][:publish_state] ||= {}
|
19
|
-
data[instance.logical][:publish_state][stereotype_name] = check_status
|
20
|
-
write_cache_file(data)
|
21
|
-
end
|
22
|
-
|
23
|
-
def pending_instances
|
24
|
-
instances.select { |instance| pending_instance?(instance) }
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
def instances_uncached
|
30
|
-
(cached_instances || search_instances).select(&:included?)
|
31
|
-
end
|
32
|
-
|
33
|
-
def search_instances
|
34
|
-
cache_instances(::EacLauncher::Context::InstanceDiscovery.new(@context).instances)
|
35
|
-
end
|
36
|
-
|
37
|
-
def cached_instances
|
38
|
-
return nil if @context.recache
|
39
|
-
return nil unless cached_instances_file_content
|
40
|
-
|
41
|
-
CachedInstances.new(cached_instances_file_content).instances
|
42
|
-
end
|
43
|
-
|
44
|
-
def cached_instances_file_content_uncached
|
45
|
-
r = YAML.load_file(cache_file_path)
|
46
|
-
r.is_a?(::Hash) ? r : nil
|
47
|
-
rescue Errno::ENOENT
|
48
|
-
nil
|
49
|
-
end
|
50
|
-
|
51
|
-
def cache_instances(instances)
|
52
|
-
write_cache_file(Hash[instances.map { |i| [i.logical, i.to_h] }])
|
53
|
-
instances
|
54
|
-
end
|
55
|
-
|
56
|
-
def write_cache_file(data)
|
57
|
-
::File.write(cache_file_path, data.to_yaml)
|
58
|
-
end
|
59
|
-
|
60
|
-
def cache_file_path
|
61
|
-
::File.join(@context.cache_root, 'instances.yml')
|
62
|
-
end
|
63
|
-
|
64
|
-
def pending_instance?(instance)
|
65
|
-
data = cached_instances_file_content
|
66
|
-
return false unless data[instance.logical]
|
67
|
-
return false unless data[instance.logical][:publish_state].is_a?(Hash)
|
68
|
-
|
69
|
-
data[instance.logical][:publish_state].any? do |_k, v|
|
70
|
-
::EacLauncher::Publish::CheckResult.pending_status?(v)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
class CachedInstances
|
75
|
-
def initialize(content)
|
76
|
-
@content = content
|
77
|
-
@instances = {}
|
78
|
-
end
|
79
|
-
|
80
|
-
def instances
|
81
|
-
@content.keys.map { |k| by_logical_path(k) }
|
82
|
-
end
|
83
|
-
|
84
|
-
def by_logical_path(key)
|
85
|
-
return @instances[key] if @instances.key?(key)
|
86
|
-
|
87
|
-
h = @content[key]
|
88
|
-
parent_instance = h[:parent] ? by_logical_path(h[:parent]) : nil
|
89
|
-
path = ::EacLauncher::Paths::Logical.from_h(@context, h)
|
90
|
-
@instances[key] = ::EacLauncher::Instances::Base.instanciate(path, parent_instance)
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
@@ -1,91 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'base/cache'
|
4
|
-
|
5
|
-
module EacLauncher
|
6
|
-
module Instances
|
7
|
-
module Base
|
8
|
-
class << self
|
9
|
-
def extend_object(object)
|
10
|
-
object.extend ::EacRubyUtils::SimpleCache
|
11
|
-
object.extend ::EacRubyUtils::Console::Speaker
|
12
|
-
object.extend ::EacLauncher::Instances::Base::Cache
|
13
|
-
super
|
14
|
-
end
|
15
|
-
|
16
|
-
def instanciate(path, parent)
|
17
|
-
unless path.is_a?(::EacLauncher::Instances::Base)
|
18
|
-
raise "#{path} is not a project" unless path.project?
|
19
|
-
|
20
|
-
path.extend(::EacLauncher::Instances::Base)
|
21
|
-
path.parent = parent
|
22
|
-
end
|
23
|
-
path
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
attr_accessor :parent
|
28
|
-
|
29
|
-
def name
|
30
|
-
logical
|
31
|
-
end
|
32
|
-
|
33
|
-
def stereotype?(stereotype)
|
34
|
-
stereotypes.include?(stereotype)
|
35
|
-
end
|
36
|
-
|
37
|
-
def to_parent_path
|
38
|
-
return self unless @parent
|
39
|
-
|
40
|
-
logical.gsub(/\A#{Regexp.quote(@parent.logical)}/, '')
|
41
|
-
end
|
42
|
-
|
43
|
-
def project?
|
44
|
-
stereotypes.any?
|
45
|
-
end
|
46
|
-
|
47
|
-
def publish_run
|
48
|
-
stereotypes.each do |s|
|
49
|
-
next unless publish?(s)
|
50
|
-
|
51
|
-
infov(name, "publishing #{s.label}")
|
52
|
-
s.publish_class.new(self).run
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def publish_check
|
57
|
-
stereotypes.each do |s|
|
58
|
-
next unless publish?(s)
|
59
|
-
|
60
|
-
puts "#{name.to_s.cyan}|#{s.label}|" \
|
61
|
-
"#{s.publish_class.new(self).check}"
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def project_name
|
66
|
-
::File.basename(logical)
|
67
|
-
end
|
68
|
-
|
69
|
-
def included?
|
70
|
-
!::EacLauncher::Context.current.settings.excluded_projects.include?(project_name)
|
71
|
-
end
|
72
|
-
|
73
|
-
def to_h
|
74
|
-
super.to_h.merge(parent: parent ? parent.logical : nil)
|
75
|
-
end
|
76
|
-
|
77
|
-
private
|
78
|
-
|
79
|
-
def publish?(stereotype)
|
80
|
-
return false unless stereotype.publish_class
|
81
|
-
|
82
|
-
filter = ::EacLauncher::Context.current.publish_options[:stereotype]
|
83
|
-
filter.blank? ? true : filter == stereotype.name.demodulize
|
84
|
-
end
|
85
|
-
|
86
|
-
def options_uncached
|
87
|
-
::EacLauncher::Context.current.settings.instance_settings(self)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module EacLauncher
|
4
|
-
module Instances
|
5
|
-
module Base
|
6
|
-
module Cache
|
7
|
-
def cache_path(subpath)
|
8
|
-
File.join(cache_root, subpath)
|
9
|
-
end
|
10
|
-
|
11
|
-
def cache_key(key, &block)
|
12
|
-
v = cache_key_get(key)
|
13
|
-
return v if v.present? || block.nil?
|
14
|
-
|
15
|
-
v = yield
|
16
|
-
cache_key_write(key, v)
|
17
|
-
v
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
def cache_key_get(key)
|
23
|
-
File.file?(cache_key_path(key)) ? File.read(cache_key_path(key)) : nil
|
24
|
-
end
|
25
|
-
|
26
|
-
def cache_key_write(key, value)
|
27
|
-
FileUtils.mkdir_p(File.dirname(cache_key_path(key)))
|
28
|
-
File.write(cache_key_path(key), value)
|
29
|
-
end
|
30
|
-
|
31
|
-
def cache_key_path(key)
|
32
|
-
File.join(cache_root, 'keys', key.parameterize)
|
33
|
-
end
|
34
|
-
|
35
|
-
def cache_root
|
36
|
-
File.join(::EacLauncher::Context.current.cache_root, name.parameterize)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|