dtk-client 0.10.6 → 0.10.7
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 +8 -8
- data/lib/cli/version.rb +1 -1
- data/lib/client/git_repo/adapter/git_gem.rb +4 -2
- data/lib/client/operation/module/install.rb +6 -2
- data/lib/client/operation/module/install/dependent_modules.rb +88 -0
- data/lib/client/operation/module/install/dependent_modules/component_module.rb +37 -0
- data/lib/client/operation/module/install/dependent_modules/local_dependencies.rb +53 -0
- data/lib/client/operation/module/install/dependent_modules/remote_dependencies.rb +67 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
Y2M4YzBhNDk4N2Q5NDM2ZTI5ZGY1NDNlN2VmYWFiMjU1MTRlMzc1Yg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MzliN2I5MzNjMTFkM2Y0OWRhNjM4ZmE3MTYwZWMyMzUzMTNhMzFmMA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MjZmZDgzY2E0ODJhNGM1NTE0YzQ4M2Q0ZTVlNGRlZDVlY2VlZmU0ODllNWJj
|
10
|
+
MDgwNjY3MDE1MzM5NGM5YjBkZGViMTNmZDYyOWE2ZWVhMjQ2ZTk3YjdiNzky
|
11
|
+
YzU1OWU3NmExYjA0NmY5MzRjNDZmMjhiM2MzMWY2OWYzMTY4Y2U=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NWUxNzQ4MWU4NDNiOWQyMDk2NTZkNjE0M2FhYWY2NmE2YjdhOTJhZDA0OGY2
|
14
|
+
YzlhN2E1M2IxYTc3ZDNmM2ViOTVkYWVjY2Y0M2I5ZjBmMzFlMmRlNjU2ZmZj
|
15
|
+
ODc5ZmYyY2RlOTYxM2VlNDFmNmY2ZGRlNzRmYjFlY2U0YzZjNTQ=
|
data/lib/cli/version.rb
CHANGED
@@ -297,8 +297,10 @@ module DTK::Client
|
|
297
297
|
deletions = 0
|
298
298
|
insertions = 0
|
299
299
|
changes[0].each do |item|
|
300
|
-
|
301
|
-
|
300
|
+
if diff_item = diff[item]
|
301
|
+
deletions += (diff_item||{})[:deletions]
|
302
|
+
insertions += (diff_item||{})[:insertions]
|
303
|
+
end
|
302
304
|
puts "\t#{item} | #{insertions + deletions} " + "+".colorize(:green) * insertions + "-".colorize(:red) * deletions
|
303
305
|
end
|
304
306
|
puts "\t#{file_changed} file changed, #{deletions} deletions(-), #{insertions} insertions(+)"
|
@@ -64,8 +64,12 @@ module DTK::Client
|
|
64
64
|
end
|
65
65
|
|
66
66
|
unless dependent_modules.empty?
|
67
|
-
begin
|
68
|
-
|
67
|
+
begin
|
68
|
+
if @has_remote_repo
|
69
|
+
DependentModules.install(@base_module_ref, dependent_modules, :skip_prompt => opts[:skip_prompt])
|
70
|
+
else
|
71
|
+
DependentModules.install_with_local(@base_module_ref, dependent_modules, :skip_prompt => opts[:skip_prompt])
|
72
|
+
end
|
69
73
|
rescue TerminateInstall
|
70
74
|
@print_helper.print_terminated_installation
|
71
75
|
return nil
|
@@ -21,6 +21,8 @@ module DTK::Client
|
|
21
21
|
require_relative('dependent_modules/prompt_helper')
|
22
22
|
require_relative('dependent_modules/component_dependency_tree')
|
23
23
|
require_relative('dependent_modules/component_module')
|
24
|
+
require_relative('dependent_modules/local_dependencies')
|
25
|
+
require_relative('dependent_modules/remote_dependencies')
|
24
26
|
|
25
27
|
BaseRoute = "modules"
|
26
28
|
# opts can have keys:
|
@@ -41,6 +43,18 @@ module DTK::Client
|
|
41
43
|
new(*args).install
|
42
44
|
end
|
43
45
|
|
46
|
+
def self.install_with_local(*args)
|
47
|
+
new(*args).install_with_local
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.resolved
|
51
|
+
@resolved ||= []
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.add_to_resolved(module_name)
|
55
|
+
resolved << module_name
|
56
|
+
end
|
57
|
+
|
44
58
|
def install
|
45
59
|
@print_helper.print_getting_dependencies
|
46
60
|
unified_module_refs = get_unified_dependent_module_refs
|
@@ -58,12 +72,86 @@ module DTK::Client
|
|
58
72
|
end
|
59
73
|
end
|
60
74
|
|
75
|
+
def install_with_local
|
76
|
+
@component_module_refs.each do |component_module_ref|
|
77
|
+
unless self.class.resolved.include?("#{component_module_ref.namespace}:#{component_module_ref.module_name}")
|
78
|
+
self.class.add_to_resolved("#{component_module_ref.namespace}:#{component_module_ref.module_name}")
|
79
|
+
if component_module_ref.is_master_version?
|
80
|
+
server_response = self.class.get_server_dependencies(component_module_ref)
|
81
|
+
if module_info = server_response.data(:module_info)
|
82
|
+
if module_info['has_remote']
|
83
|
+
new_print_helper = PrintHelper.new(:module_ref => component_module_ref, :source => :remote)
|
84
|
+
if @prompt_helper.pull_module_update?(new_print_helper)
|
85
|
+
ComponentModule.install_or_pull_new?(component_module_ref, @prompt_helper, new_print_helper) unless component_module_ref.is_base_module?
|
86
|
+
RemoteDependencies.install_or_pull?(component_module_ref, @prompt_helper, new_print_helper)
|
87
|
+
else
|
88
|
+
new_print_helper.print_using_installed_dependent_module
|
89
|
+
LocalDependencies.install_or_pull?(server_response, @prompt_helper, new_print_helper)
|
90
|
+
end
|
91
|
+
else
|
92
|
+
# does not have remote but exist locally
|
93
|
+
new_print_helper = PrintHelper.new(:module_ref => component_module_ref, :source => :remote)
|
94
|
+
new_print_helper.print_using_installed_dependent_module
|
95
|
+
|
96
|
+
LocalDependencies.install_or_pull?(server_response, @prompt_helper, new_print_helper)
|
97
|
+
end
|
98
|
+
else
|
99
|
+
remote_response = nil
|
100
|
+
new_print_helper = PrintHelper.new(:module_ref => component_module_ref, :source => :remote)
|
101
|
+
cmp = ComponentModule.new(component_module_ref, @prompt_helper, new_print_helper)
|
102
|
+
if component_module_ref.module_installed?(cmp)
|
103
|
+
if @prompt_helper.pull_module_update?(new_print_helper)
|
104
|
+
ComponentModule.install_or_pull_new?(component_module_ref, @prompt_helper, new_print_helper) unless component_module_ref.is_base_module?
|
105
|
+
else
|
106
|
+
new_print_helper.print_using_installed_dependent_module
|
107
|
+
end
|
108
|
+
else
|
109
|
+
ComponentModule.install_or_pull_new?(component_module_ref, @prompt_helper, new_print_helper) unless component_module_ref.is_base_module?
|
110
|
+
end
|
111
|
+
end
|
112
|
+
else
|
113
|
+
new_print_helper = PrintHelper.new(:module_ref => component_module_ref, :source => :remote)
|
114
|
+
new_print_helper.print_using_installed_dependent_module
|
115
|
+
cmp = ComponentModule.new(component_module_ref, @prompt_helper, new_print_helper)
|
116
|
+
unless component_module_ref.module_installed?(cmp)
|
117
|
+
ComponentModule.install_or_pull_new?(component_module_ref, @prompt_helper, new_print_helper)
|
118
|
+
end
|
119
|
+
|
120
|
+
server_response = self.class.get_server_dependencies(component_module_ref)
|
121
|
+
LocalDependencies.install_or_pull?(server_response, @prompt_helper, new_print_helper)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def self.create_module_ref(ref_hash, opts = {})
|
128
|
+
module_ref_hash = {
|
129
|
+
:namespace => ref_hash['namespace'],
|
130
|
+
:module_name => ref_hash['name'],
|
131
|
+
:version => ref_hash['version']
|
132
|
+
}
|
133
|
+
Install::ModuleRef.new(module_ref_hash)
|
134
|
+
end
|
135
|
+
|
61
136
|
def get_unified_dependent_module_refs
|
62
137
|
component_dependency_tree = ComponentDependencyTree.create(@base_module_ref, @component_module_refs, @print_helper)
|
63
138
|
# returns an array of module_refs that have been unified so only one version and namespace per module name
|
64
139
|
component_dependency_tree.resolve_conflicts_and_versions
|
65
140
|
end
|
66
141
|
|
142
|
+
def get_local_modules_info
|
143
|
+
component_dependency_tree = ComponentDependencyTree.create(@base_module_ref, @component_module_refs, @print_helper, 'local')
|
144
|
+
component_dependency_tree.resolve_conflicts_and_versions
|
145
|
+
end
|
146
|
+
|
147
|
+
def self.get_server_dependencies(component_module_ref)
|
148
|
+
hash = {
|
149
|
+
:module_name => component_module_ref.module_name,
|
150
|
+
:namespace => component_module_ref.namespace,
|
151
|
+
:version? => component_module_ref.version
|
152
|
+
}
|
153
|
+
rest_get "#{BaseRoute}/module_info_with_local_dependencies", QueryStringHash.new(hash)
|
154
|
+
end
|
67
155
|
end
|
68
156
|
end
|
69
157
|
end
|
@@ -31,6 +31,10 @@ module DTK::Client; class Operation::Module
|
|
31
31
|
def self.install_or_pull?(module_ref, prompt_helper, print_helper)
|
32
32
|
new(module_ref, prompt_helper, print_helper).install_or_pull?
|
33
33
|
end
|
34
|
+
|
35
|
+
def self.install_or_pull_new?(module_ref, prompt_helper, print_helper)
|
36
|
+
new(module_ref, prompt_helper, print_helper).install_or_pull_new?
|
37
|
+
end
|
34
38
|
|
35
39
|
def install_or_pull?
|
36
40
|
if @module_ref.module_installed?(self)
|
@@ -44,6 +48,18 @@ module DTK::Client; class Operation::Module
|
|
44
48
|
end
|
45
49
|
end
|
46
50
|
|
51
|
+
def install_or_pull_new?
|
52
|
+
if @module_ref.module_installed?(self)
|
53
|
+
if @module_ref.is_master_version?
|
54
|
+
pull_module_update_new?
|
55
|
+
else
|
56
|
+
@print_helper.print_using_installed_dependent_module
|
57
|
+
end
|
58
|
+
else
|
59
|
+
install_module
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
47
63
|
def query_if_component_module_is_installed?
|
48
64
|
# TODO: :type => :component_module is for legacy; once we get past having legacy can change to :common_module
|
49
65
|
module_version_exists?(@module_ref, :type => :component_module)
|
@@ -51,6 +67,27 @@ module DTK::Client; class Operation::Module
|
|
51
67
|
|
52
68
|
private
|
53
69
|
|
70
|
+
def pull_module_update_new?
|
71
|
+
# return unless @prompt_helper.pull_module_update?(@print_helper)
|
72
|
+
@print_helper.print_continuation_pulling_dependency_update
|
73
|
+
|
74
|
+
post_body = {
|
75
|
+
:module_name => module_name,
|
76
|
+
:namespace => namespace,
|
77
|
+
:rsa_pub_key => SSHUtil.rsa_pub_key_content,
|
78
|
+
:version? => version,
|
79
|
+
:force => true # TODO: hardwired
|
80
|
+
}
|
81
|
+
response = rest_post "#{BaseRoute}/pull_component_info_from_remote", PostBody.new(post_body)
|
82
|
+
|
83
|
+
if (response.data(:diffs) || {}).empty?
|
84
|
+
# OsUtil.print("No changes to pull from remote.", :yellow) unless response['errors']
|
85
|
+
OsUtil.print("No changes to pull from remote.", :yellow)
|
86
|
+
else
|
87
|
+
OsUtil.print("Changes pulled from remote", :green)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
54
91
|
def pull_module_update?
|
55
92
|
return unless @prompt_helper.pull_module_update?(@print_helper)
|
56
93
|
@print_helper.print_continuation_pulling_dependency_update
|
@@ -0,0 +1,53 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2010-2016 dtk contributors
|
3
|
+
#
|
4
|
+
# This file is part of the dtk project.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
module DTK::Client; class Operation::Module
|
19
|
+
class Install::DependentModules
|
20
|
+
class LocalDependencies < Operation::Module
|
21
|
+
include Install::Mixin
|
22
|
+
BaseRoute = "modules"
|
23
|
+
|
24
|
+
def initialize(module_ref, prompt_helper, print_helper)
|
25
|
+
@module_ref = module_ref
|
26
|
+
@prompt_helper = prompt_helper
|
27
|
+
@print_helper = print_helper.set_module_ref!(module_ref)
|
28
|
+
end
|
29
|
+
private :initialize
|
30
|
+
|
31
|
+
def self.install_or_pull?(server_response, prompt_helper, print_helper)
|
32
|
+
if dependencies = (server_response.data(:dependencies)||{})['required_modules']
|
33
|
+
dependencies.each do |dep|
|
34
|
+
unless Install::DependentModules.resolved.include?("#{dep['namespace']}:#{dep['name']}")
|
35
|
+
Install::DependentModules.add_to_resolved("#{dep['namespace']}:#{dep['name']}")
|
36
|
+
dep_module_ref = Install::DependentModules.create_module_ref(dep, opts = {})
|
37
|
+
if dep_ref_info = module_version_exists?(dep_module_ref, :type => :component_module, :remote_info => true, :rsa_pub_key => SSHUtil.rsa_pub_key_content)
|
38
|
+
new_print_helper = Install::PrintHelper.new(:module_ref => dep_module_ref, :source => :remote)
|
39
|
+
if dep_ref_info.data(:has_remote) && !prompt_helper.update_none
|
40
|
+
ComponentModule.install_or_pull?(dep_module_ref, prompt_helper, new_print_helper) unless dep_module_ref.is_base_module?
|
41
|
+
else
|
42
|
+
new_print_helper.print_using_installed_dependent_module
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end; end
|
52
|
+
|
53
|
+
|
@@ -0,0 +1,67 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2010-2016 dtk contributors
|
3
|
+
#
|
4
|
+
# This file is part of the dtk project.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
module DTK::Client; class Operation::Module
|
19
|
+
class Install::DependentModules
|
20
|
+
class RemoteDependencies < Operation::Module
|
21
|
+
include Install::Mixin
|
22
|
+
BaseRoute = "modules"
|
23
|
+
|
24
|
+
def initialize(module_ref, prompt_helper, print_helper)
|
25
|
+
@module_ref = module_ref
|
26
|
+
@prompt_helper = prompt_helper
|
27
|
+
@print_helper = print_helper.set_module_ref!(module_ref)
|
28
|
+
end
|
29
|
+
private :initialize
|
30
|
+
|
31
|
+
def self.install_or_pull?(component_module_ref, prompt_helper, print_helper)
|
32
|
+
remote_response = nil
|
33
|
+
begin
|
34
|
+
hash = {
|
35
|
+
:module_name => component_module_ref.module_name,
|
36
|
+
:namespace => component_module_ref.namespace,
|
37
|
+
:rsa_pub_key => SSHUtil.rsa_pub_key_content,
|
38
|
+
:version? => component_module_ref.version
|
39
|
+
}
|
40
|
+
remote_response = rest_get "#{BaseRoute}/module_dependencies", QueryStringHash.new(hash)
|
41
|
+
rescue Error::ServerNotOkResponse => e
|
42
|
+
# temp fix for issue when dependent module is imported from puppet forge
|
43
|
+
if errors = e.response && e.response['errors']
|
44
|
+
remote_response = nil if errors.first.include?('not found')
|
45
|
+
else
|
46
|
+
raise e
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
if remote_required = remote_response.data(:required_modules)
|
51
|
+
remote_required.each do |req_module|
|
52
|
+
unless Install::DependentModules.resolved.include?("#{req_module['namespace']}:#{req_module['name']}")
|
53
|
+
Install::DependentModules.add_to_resolved("#{req_module['namespace']}:#{req_module['name']}")
|
54
|
+
req_ref = Install::DependentModules.create_module_ref(req_module)
|
55
|
+
new_print_helper = Install::PrintHelper.new(:module_ref => req_ref, :source => :remote)
|
56
|
+
if prompt_helper.pull_module_update?(new_print_helper)
|
57
|
+
ComponentModule.install_or_pull_new?(req_ref, prompt_helper, new_print_helper) unless req_ref.is_base_module?
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end; end
|
66
|
+
|
67
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dtk-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Reactor8
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dtk-common-core
|
@@ -259,7 +259,9 @@ files:
|
|
259
259
|
- lib/client/operation/module/install/dependent_modules/component_dependency_tree/cache.rb
|
260
260
|
- lib/client/operation/module/install/dependent_modules/component_dependency_tree/resolve_modules.rb
|
261
261
|
- lib/client/operation/module/install/dependent_modules/component_module.rb
|
262
|
+
- lib/client/operation/module/install/dependent_modules/local_dependencies.rb
|
262
263
|
- lib/client/operation/module/install/dependent_modules/prompt_helper.rb
|
264
|
+
- lib/client/operation/module/install/dependent_modules/remote_dependencies.rb
|
263
265
|
- lib/client/operation/module/install/mixin.rb
|
264
266
|
- lib/client/operation/module/install/module_ref.rb
|
265
267
|
- lib/client/operation/module/install/print_helper.rb
|
@@ -385,7 +387,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
385
387
|
version: '0'
|
386
388
|
requirements: []
|
387
389
|
rubyforge_project:
|
388
|
-
rubygems_version: 2.
|
390
|
+
rubygems_version: 2.6.11
|
389
391
|
signing_key:
|
390
392
|
specification_version: 4
|
391
393
|
summary: DTK CLI client for DTK server interaction.
|