dtk-client 0.5.17 → 0.5.18
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/command_helpers/git_repo.rb +82 -48
- data/lib/command_helpers/service_importer.rb +26 -17
- data/lib/command_helpers/test_module_creator.rb +6 -5
- data/lib/commands/common/thor/access_control.rb +5 -4
- data/lib/commands/common/thor/assembly_template.rb +75 -0
- data/lib/commands/common/thor/assembly_workspace.rb +86 -71
- data/lib/commands/common/thor/clone.rb +9 -7
- data/lib/commands/common/thor/common.rb +17 -10
- data/lib/commands/common/thor/edit.rb +65 -6
- data/lib/commands/common/thor/list_diffs.rb +4 -3
- data/lib/commands/common/thor/module.rb +86 -89
- data/lib/commands/common/thor/pull_clone_changes.rb +3 -2
- data/lib/commands/common/thor/pull_from_remote.rb +9 -5
- data/lib/commands/common/thor/purge_clone.rb +2 -2
- data/lib/commands/common/thor/push_clone_changes.rb +39 -16
- data/lib/commands/common/thor/push_to_remote.rb +3 -3
- data/lib/commands/thor/account.rb +16 -4
- data/lib/commands/thor/assembly.rb +66 -89
- data/lib/commands/thor/component_module.rb +40 -24
- data/lib/commands/thor/node.rb +7 -0
- data/lib/commands/thor/provider.rb +45 -23
- data/lib/commands/thor/service.rb +4 -7
- data/lib/commands/thor/service_module.rb +45 -20
- data/lib/commands/thor/test_module.rb +36 -22
- data/lib/commands/thor/workspace.rb +6 -6
- data/lib/core.rb +18 -17
- data/lib/domain/git_adapter.rb +30 -9
- data/lib/dtk-client/version.rb +1 -1
- data/lib/parser/adapters/thor.rb +47 -25
- data/lib/shell/context.rb +10 -2
- data/lib/shell.rb +18 -12
- data/lib/util/module_util.rb +41 -0
- data/lib/util/os_util.rb +25 -7
- metadata +4 -2
@@ -43,11 +43,15 @@ module DTK::Client
|
|
43
43
|
get_cached_response(:service_module, "service_module/list", {})
|
44
44
|
end
|
45
45
|
|
46
|
+
def self.whoami()
|
47
|
+
return :service_module, "service_module/list", nil
|
48
|
+
end
|
49
|
+
|
46
50
|
def self.override_allowed_methods()
|
47
51
|
return DTK::Shell::OverrideTasks.new({
|
48
52
|
:command_only => {
|
49
53
|
:self => [
|
50
|
-
["list"," list [--remote] [--diff]","# List service modules (local/remote). Use --diff to compare loaded and remote modules."]
|
54
|
+
["list"," list [--remote] [--diff] [-n NAMESPACE]","# List service modules (local/remote). Use --diff to compare loaded and remote modules."]
|
51
55
|
],
|
52
56
|
:"assembly" => [
|
53
57
|
["list","list","# List assemblies for given service module."]
|
@@ -63,8 +67,10 @@ module DTK::Client
|
|
63
67
|
["stage", "stage [INSTANCE-NAME] [-t TARGET-NAME/ID]", "# Stage assembly in target."],
|
64
68
|
# ["deploy","deploy [-v VERSION] [INSTANCE-NAME] [-t TARGET-NAME/ID] [-m COMMIT-MSG]", "# Stage and deploy assembly in target."],
|
65
69
|
# ["deploy","deploy [INSTANCE-NAME] [-t TARGET-NAME/ID] [-m COMMIT-MSG]", "# Stage and deploy assembly in target."],
|
70
|
+
["deploy","deploy [INSTANCE-NAME] [-m COMMIT-MSG]", "# Stage and deploy assembly in target."],
|
66
71
|
["list-nodes","list-nodes", "# List all nodes for given assembly."],
|
67
|
-
["list-components","list-components", "# List all components for given assembly."]
|
72
|
+
["list-components","list-components", "# List all components for given assembly."],
|
73
|
+
["list-settings","list-settings", "# List all settings for given assembly."]
|
68
74
|
]
|
69
75
|
}
|
70
76
|
|
@@ -91,9 +97,13 @@ module DTK::Client
|
|
91
97
|
list(context_params)
|
92
98
|
end
|
93
99
|
|
94
|
-
desc "list [--remote] [--diff]","List service modules (local/remote). Use --diff to compare loaded and remote modules."
|
100
|
+
desc "list [--remote] [--diff] [-n NAMESPACE]","List service modules (local/remote). Use --diff to compare loaded and remote modules."
|
95
101
|
method_option :remote, :type => :boolean, :default => false
|
96
102
|
method_option :diff, :type => :boolean, :default => false
|
103
|
+
method_option :namespace, :aliases => "-n" ,
|
104
|
+
:type => :string,
|
105
|
+
:banner => "NAMESPACE",
|
106
|
+
:desc => "List modules only in specific namespace."
|
97
107
|
def list(context_params)
|
98
108
|
service_module_id, about, service_module_name = context_params.retrieve_arguments([:service_module_id, :option_1, :option_2],method_argument_names)
|
99
109
|
datatype = nil
|
@@ -111,6 +121,7 @@ module DTK::Client
|
|
111
121
|
action = options.remote? ? "list_remote" : "list"
|
112
122
|
post_body = (options.remote? ? { :rsa_pub_key => SSHUtil.rsa_pub_key_content() } : {:detail_to_include => ["remotes"]})
|
113
123
|
post_body[:diff] = options.diff? ? options.diff : {}
|
124
|
+
post_body.merge!(:module_namespace => options.namespace)
|
114
125
|
|
115
126
|
response = post rest_url("service_module/#{action}"), post_body
|
116
127
|
# If user is on service identifier level, list task can't have '--remote' option.
|
@@ -125,8 +136,7 @@ module DTK::Client
|
|
125
136
|
data_type = :assembly_template
|
126
137
|
action = "list_assemblies"
|
127
138
|
when "modules"
|
128
|
-
|
129
|
-
data_type = options.remote? ? :component_remote : :component
|
139
|
+
data_type = options.remote? ? :component_remote : :component_module
|
130
140
|
action = "list_component_modules"
|
131
141
|
else
|
132
142
|
raise_validation_error_method_usage('list')
|
@@ -159,7 +169,7 @@ module DTK::Client
|
|
159
169
|
# end
|
160
170
|
|
161
171
|
# version_method_option
|
162
|
-
desc "install
|
172
|
+
desc "install NAMESPACE/REMOTE-SERVICE-MODULE-NAME [-y] [-i]", "Install remote service module into local environment. -y will automatically clone component modules. -i will ignore component import error."
|
163
173
|
method_option :force, :aliases => '-y', :type => :boolean, :default => false
|
164
174
|
method_option :ignore, :aliases => '-i', :type => :boolean, :default => false
|
165
175
|
def install(context_params)
|
@@ -388,12 +398,13 @@ module DTK::Client
|
|
388
398
|
# end
|
389
399
|
|
390
400
|
# TODO: put in two versions, one that creates empty and anotehr taht creates from local dir; use --empty flag
|
391
|
-
desc "import SERVICE-MODULE-NAME", "Create new service module from local clone"
|
401
|
+
desc "import [NAMESPACE:]SERVICE-MODULE-NAME", "Create new service module from local clone"
|
392
402
|
def import(context_params)
|
393
403
|
module_name = context_params.retrieve_arguments([:option_1!],method_argument_names)
|
404
|
+
namespace, local_module_name = get_namespace_and_name(module_name, ':')
|
394
405
|
|
395
406
|
# first check that there is a directory there and it is not already a git repo, and it ha appropriate content
|
396
|
-
response = Helper(:git_repo).check_local_dir_exists_with_content(:service_module,
|
407
|
+
response = Helper(:git_repo).check_local_dir_exists_with_content(:service_module, local_module_name, nil, namespace)
|
397
408
|
return response unless response.ok?
|
398
409
|
service_directory = response.data(:module_directory)
|
399
410
|
|
@@ -401,23 +412,20 @@ module DTK::Client
|
|
401
412
|
reparse_aux(service_directory)
|
402
413
|
|
403
414
|
# first call to create empty module
|
404
|
-
response = post rest_url("service_module/create"), { :module_name =>
|
415
|
+
response = post rest_url("service_module/create"), { :module_name => local_module_name, :module_namespace => namespace }
|
405
416
|
return response unless response.ok?
|
406
417
|
@@invalidate_map << :service_module
|
407
418
|
|
408
|
-
if error = response.data(:dsl_parsed_info)
|
409
|
-
dsl_parsed_message = ServiceImporter.error_message(module_name, error)
|
410
|
-
DTK::Client::OsUtil.print(dsl_parsed_message, :red)
|
411
|
-
end
|
412
|
-
|
413
419
|
# initial commit for given service module
|
414
|
-
service_module_id, repo_info
|
415
|
-
repo_url,repo_id,module_id,branch = [:repo_url,:repo_id,:module_id,:workspace_branch].map { |k| repo_info[k.to_s] }
|
416
|
-
|
420
|
+
service_module_id, repo_info = response.data(:service_module_id, :repo_info)
|
421
|
+
repo_url,repo_id,module_id,branch,new_module_name = [:repo_url,:repo_id,:module_id,:workspace_branch,:full_module_name].map { |k| repo_info[k.to_s] }
|
422
|
+
|
423
|
+
response = Helper(:git_repo).rename_and_initialize_clone_and_push(:service_module, local_module_name, new_module_name,branch,repo_url,service_directory)
|
417
424
|
return response unless response.ok?
|
425
|
+
|
418
426
|
repo_obj,commit_sha = response.data(:repo_obj,:commit_sha)
|
419
427
|
|
420
|
-
context_params.add_context_to_params(
|
428
|
+
context_params.add_context_to_params(local_module_name, :"service-module", module_id)
|
421
429
|
push(context_params,true)
|
422
430
|
end
|
423
431
|
|
@@ -517,13 +525,13 @@ module DTK::Client
|
|
517
525
|
response
|
518
526
|
end
|
519
527
|
|
520
|
-
desc "delete-from-catalog
|
528
|
+
desc "delete-from-catalog NAMESPACE/REMOTE-SERVICE-MODULE-NAME [-y]", "Delete the service module from the DTK Network catalog"
|
521
529
|
method_option :force, :aliases => '-y', :type => :boolean, :default => false
|
522
530
|
def delete_from_catalog(context_params)
|
523
531
|
delete_from_catalog_aux(context_params)
|
524
532
|
end
|
525
533
|
|
526
|
-
desc "SERVICE-MODULE-NAME/ID delete-assembly ASSEMBLY-
|
534
|
+
desc "SERVICE-MODULE-NAME/ID delete-assembly ASSEMBLY-NAME [-y]", "Delete assembly from service module."
|
527
535
|
method_option :force, :aliases => '-y', :type => :boolean, :default => false
|
528
536
|
def delete_assembly(context_params)
|
529
537
|
response = delete_assembly_aux(context_params)
|
@@ -531,6 +539,23 @@ module DTK::Client
|
|
531
539
|
|
532
540
|
response
|
533
541
|
end
|
542
|
+
|
543
|
+
#
|
544
|
+
# DEVELOPMENT MODE METHODS
|
545
|
+
#
|
546
|
+
if DTK::Configuration.get(:development_mode)
|
547
|
+
|
548
|
+
desc "delete-all","Delete all service modules"
|
549
|
+
def delete_all(context_params)
|
550
|
+
return unless Console.confirmation_prompt("This will DELETE ALL service modules, are you sure"+'?')
|
551
|
+
response = list(context_params)
|
552
|
+
|
553
|
+
response.data().each do |e|
|
554
|
+
run_shell_command("delete #{e['display_name']} -y -p")
|
555
|
+
end
|
556
|
+
end
|
557
|
+
|
558
|
+
end
|
534
559
|
=begin
|
535
560
|
desc "SERVICE-NAME/ID assembly-templates list", "List assembly templates optionally filtered by service ID/NAME."
|
536
561
|
def assembly_template(context_params)
|
@@ -47,25 +47,24 @@ module DTK::Client
|
|
47
47
|
set_attribute_module_aux(context_params)
|
48
48
|
end
|
49
49
|
|
50
|
-
desc "list [--remote] [--diff]", "List loaded or remote test modules. Use --diff to compare loaded and remote test modules."
|
50
|
+
desc "list [--remote] [--diff] [-n NAMESPACE]", "List loaded or remote test modules. Use --diff to compare loaded and remote test modules."
|
51
51
|
method_option :remote, :type => :boolean, :default => false
|
52
52
|
method_option :diff, :type => :boolean, :default => false
|
53
|
+
method_option :namespace, :aliases => "-n" ,
|
54
|
+
:type => :string,
|
55
|
+
:banner => "NAMESPACE",
|
56
|
+
:desc => "List modules only in specific namespace."
|
53
57
|
def list(context_params)
|
54
|
-
|
55
|
-
#if context_params.is_there_command?(:attribute)
|
56
|
-
# return module_info_about(context_params, :attributes, :attribute)
|
57
|
-
#elsif context_params.is_there_command?(:"component-template")
|
58
|
-
# if context_params.is_there_command?(:"component-template")
|
59
|
-
if context_params.is_there_command?(:"component")
|
60
|
-
return module_info_about(context_params, :components, :component)
|
61
|
-
end
|
58
|
+
return module_info_about(context_params, :components, :component) if context_params.is_there_command?(:"component")
|
62
59
|
|
63
60
|
forwarded_remote = context_params.get_forwarded_options()["remote"] if context_params.get_forwarded_options()
|
64
61
|
remote = options.remote? || forwarded_remote
|
65
62
|
action = (remote ? "list_remote" : "list")
|
66
|
-
|
63
|
+
|
67
64
|
post_body = (remote ? { :rsa_pub_key => SSHUtil.rsa_pub_key_content() } : {:detail_to_include => ["remotes"]})
|
68
65
|
post_body[:diff] = options.diff? ? options.diff : {}
|
66
|
+
post_body.merge!(:module_namespace => options.namespace)
|
67
|
+
|
69
68
|
response = post rest_url("test_module/#{action}"),post_body
|
70
69
|
|
71
70
|
return response unless response.ok?
|
@@ -87,7 +86,7 @@ module DTK::Client
|
|
87
86
|
module_info_about(context_params, :instances, :component)
|
88
87
|
end
|
89
88
|
|
90
|
-
desc "import TEST-MODULE-NAME", "Create new test module from local clone"
|
89
|
+
desc "import [NAMESPACE:]TEST-MODULE-NAME", "Create new test module from local clone"
|
91
90
|
def import(context_params)
|
92
91
|
response = import_module_aux(context_params)
|
93
92
|
@@invalidate_map << :test_module if response && response.ok?
|
@@ -95,7 +94,15 @@ module DTK::Client
|
|
95
94
|
response
|
96
95
|
end
|
97
96
|
|
98
|
-
|
97
|
+
#
|
98
|
+
# Creates component module from input git repo, removing .git dir to rid of pointing to user github, and creates component module
|
99
|
+
#
|
100
|
+
desc "import-git GIT-SSH-REPO-URL [NAMESPACE:]TEST-MODULE-NAME", "Create new local test module by importing from provided git repo URL"
|
101
|
+
def import_git(context_params)
|
102
|
+
import_git_module_aux(context_params)
|
103
|
+
end
|
104
|
+
|
105
|
+
desc "install NAMESPACE/REMOTE-TEST-MODULE-NAME","Install remote test module into local environment"
|
99
106
|
method_option "repo-manager",:aliases => "-r" ,
|
100
107
|
:type => :string,
|
101
108
|
:banner => "REPO-MANAGER",
|
@@ -107,20 +114,12 @@ module DTK::Client
|
|
107
114
|
response
|
108
115
|
end
|
109
116
|
|
110
|
-
|
111
|
-
# Creates component module from input git repo, removing .git dir to rid of pointing to user github, and creates component module
|
112
|
-
#
|
113
|
-
desc "import-git GIT-SSH-REPO-URL TEST-MODULE-NAME", "Create new local test module by importing from provided git repo URL"
|
114
|
-
def import_git(context_params)
|
115
|
-
import_git_module_aux(context_params)
|
116
|
-
end
|
117
|
-
|
118
|
-
desc "create TEST-MODULE-NAME", "Create template test module and generate all needed test module helper files"
|
117
|
+
desc "create [NAMESPACE:]TEST-MODULE-NAME", "Create template test module and generate all needed test module helper files"
|
119
118
|
def create(context_params)
|
120
119
|
create_test_module_aux(context_params)
|
121
120
|
end
|
122
121
|
|
123
|
-
desc "delete-from-catalog
|
122
|
+
desc "delete-from-catalog NAMESPACE/REMOTE-TEST-MODULE-NAME [-y]", "Delete the test module from the DTK Network catalog"
|
124
123
|
method_option :force, :aliases => '-y', :type => :boolean, :default => false
|
125
124
|
def delete_from_catalog(context_params)
|
126
125
|
delete_from_catalog_aux(context_params)
|
@@ -225,5 +224,20 @@ module DTK::Client
|
|
225
224
|
list_diffs_module_aux(context_params)
|
226
225
|
end
|
227
226
|
|
227
|
+
|
228
|
+
#
|
229
|
+
# DEVELOPMENT MODE METHODS
|
230
|
+
#
|
231
|
+
if DTK::Configuration.get(:development_mode)
|
232
|
+
desc "delete-all","Delete all service modules"
|
233
|
+
def delete_all(context_params)
|
234
|
+
return unless Console.confirmation_prompt("This will DELETE ALL test modules, are you sure"+'?')
|
235
|
+
response = list(context_params)
|
236
|
+
|
237
|
+
response.data().each do |e|
|
238
|
+
run_shell_command("delete #{e['display_name']} -y -p")
|
239
|
+
end
|
240
|
+
end
|
241
|
+
end
|
228
242
|
end
|
229
243
|
end
|
@@ -179,7 +179,7 @@ module DTK::Client
|
|
179
179
|
push_module_updates_aux(context_params)
|
180
180
|
end
|
181
181
|
|
182
|
-
desc "WORKSPACE-NAME/ID push-assembly-updates SERVICE-MODULE-NAME/ASSEMBLY-NAME", "Push changes made to this workspace to the designated assembly."
|
182
|
+
desc "WORKSPACE-NAME/ID push-assembly-updates [NAMESPACE:]SERVICE-MODULE-NAME/ASSEMBLY-NAME", "Push changes made to this workspace to the designated assembly."
|
183
183
|
def push_assembly_updates(context_params)
|
184
184
|
workspace_id, qualified_assembly_name = context_params.retrieve_arguments([:workspace_id!,:option_1!],method_argument_names)
|
185
185
|
if qualified_assembly_name =~ /(^[^\/]*)\/([^\/]*$)/
|
@@ -193,12 +193,12 @@ module DTK::Client
|
|
193
193
|
Response::Ok.new()
|
194
194
|
end
|
195
195
|
|
196
|
-
desc "WORKSPACE-NAME/ID create-assembly SERVICE-MODULE-NAME ASSEMBLY-NAME [-p]", "Create a new assembly from the workspace instance in the designated service module."
|
196
|
+
desc "WORKSPACE-NAME/ID create-assembly [NAMESPACE:]SERVICE-MODULE-NAME ASSEMBLY-NAME [-p]", "Create a new assembly from the workspace instance in the designated service module."
|
197
197
|
# The option -p will purge the workspace after assembly creation."
|
198
198
|
method_option :purge, :aliases => '-p', :type => :boolean, :default => false
|
199
199
|
def create_assembly(context_params)
|
200
|
-
workspace_id,
|
201
|
-
response = promote_assembly_aux(:create,workspace_id,
|
200
|
+
workspace_id, service_module_full_name, assembly_template_name = context_params.retrieve_arguments([:workspace_id!,:option_1!,:option_2!],method_argument_names)
|
201
|
+
response = promote_assembly_aux(:create,workspace_id,service_module_full_name,assembly_template_name)
|
202
202
|
return response unless response.ok?
|
203
203
|
if options.purge?
|
204
204
|
response = purge_aux(context_params)
|
@@ -303,12 +303,12 @@ module DTK::Client
|
|
303
303
|
def edit_workflow(context_params)
|
304
304
|
edit_workflow_aux(context_params)
|
305
305
|
end
|
306
|
-
|
306
|
+
|
307
307
|
desc "WORKSPACE-NAME/ID edit-attributes", "Edit workspace's attributes."
|
308
308
|
def edit_attributes(context_params)
|
309
309
|
edit_attributes_aux(context_params)
|
310
310
|
end
|
311
|
-
|
311
|
+
|
312
312
|
# using HIDE_FROM_BASE to hide this command from base context (dtk:/workspace>)
|
313
313
|
desc "HIDE_FROM_BASE get-netstats", "Get netstats"
|
314
314
|
def get_netstats(context_params)
|
data/lib/core.rb
CHANGED
@@ -15,6 +15,7 @@ dtk_require_from_base('util/ssh_util')
|
|
15
15
|
dtk_require_from_base('util/common_util')
|
16
16
|
dtk_require_from_base('util/permission_util')
|
17
17
|
dtk_require_from_base('util/remote_dependency_util')
|
18
|
+
dtk_require_from_base('util/module_util')
|
18
19
|
|
19
20
|
dtk_require("config/configuration")
|
20
21
|
|
@@ -43,7 +44,7 @@ def top_level_execute_core(entity_name, method_name, context_params=nil, options
|
|
43
44
|
|
44
45
|
# if connection parameters are not set up properly then don't execute any command
|
45
46
|
return if validate_connection(conn)
|
46
|
-
|
47
|
+
|
47
48
|
# call proper thor class and task
|
48
49
|
entity_class = DTK::Client.const_get "#{cap_form(entity_name)}"
|
49
50
|
|
@@ -53,12 +54,12 @@ def top_level_execute_core(entity_name, method_name, context_params=nil, options
|
|
53
54
|
end
|
54
55
|
|
55
56
|
response_ruby_obj = entity_class.execute_from_cli(conn,method_name,context_params,options_args,shell_execute)
|
56
|
-
|
57
|
+
|
57
58
|
# this will raise error if found
|
58
59
|
DTK::Client::ResponseErrorHandler.check(response_ruby_obj)
|
59
60
|
|
60
61
|
# this will find appropriate render adapter and give output, returns boolean
|
61
|
-
if print = response_ruby_obj.render_data()
|
62
|
+
if print = response_ruby_obj.render_data()
|
62
63
|
print = [print] unless print.kind_of?(Array)
|
63
64
|
print.each do |el|
|
64
65
|
|
@@ -76,7 +77,7 @@ def top_level_execute_core(entity_name, method_name, context_params=nil, options
|
|
76
77
|
DTK::Client::OsUtil.print(e.message, :red)
|
77
78
|
rescue DTK::Client::DtkValidationError => e
|
78
79
|
validation_message = e.message
|
79
|
-
|
80
|
+
|
80
81
|
# if !e.skip_usage_info && entity_class && method_name
|
81
82
|
# usage_info = entity_class.get_usage_info(entity_name, method_name)
|
82
83
|
# validation_message += ", usage: #{usage_info}"
|
@@ -122,9 +123,9 @@ def resolve_direct_access(params, config_exists=nil)
|
|
122
123
|
puts "Processing..." if config_exists
|
123
124
|
# response = DTK::Client::Account.add_access(params[:ssh_key_path])
|
124
125
|
response, matched_pub_key, matched_username = DTK::Client::Account.add_key(params[:ssh_key_path])
|
125
|
-
|
126
|
+
|
126
127
|
if !response.ok?
|
127
|
-
DTK::Client::OsUtil.print("We were not able to add access for current user. #{response.error_message}. In order to properly use dtk-shell you will have to add access manually ('dtk account add-ssh-key').\n", :yellow)
|
128
|
+
DTK::Client::OsUtil.print("We were not able to add access for current user. #{response.error_message}. In order to properly use dtk-shell you will have to add access manually ('dtk account add-ssh-key').\n", :yellow)
|
128
129
|
elsif matched_pub_key
|
129
130
|
# message will be displayed by add key # TODO: Refactor this flow
|
130
131
|
DTK::Client::OsUtil.print("Provided SSH PUB key has already been added.", :yellow)
|
@@ -136,7 +137,7 @@ def resolve_direct_access(params, config_exists=nil)
|
|
136
137
|
# DTK::Client::OsUtil.print("Your SSH PUB key has been successfully added.", :yellow)
|
137
138
|
DTK::Client::Configurator.add_current_user_to_direct_access()
|
138
139
|
end
|
139
|
-
|
140
|
+
|
140
141
|
|
141
142
|
response
|
142
143
|
end
|
@@ -159,7 +160,7 @@ module DTK
|
|
159
160
|
|
160
161
|
def check(response_ruby_obj)
|
161
162
|
# check for errors in response
|
162
|
-
|
163
|
+
|
163
164
|
unless response_ruby_obj["errors"].nil?
|
164
165
|
error_msg = ""
|
165
166
|
error_internal = nil
|
@@ -179,7 +180,7 @@ module DTK
|
|
179
180
|
|
180
181
|
# normalize it for display
|
181
182
|
error_msg = error_msg.empty? ? 'Internal DTK Client error, please try again' : "#{error_msg}"
|
182
|
-
|
183
|
+
|
183
184
|
# if error_internal.first == true
|
184
185
|
if error_code == "unauthorized"
|
185
186
|
raise DTK::Client::DtkError, "[UNAUTHORIZED] Your session has been suspended, please log in again."
|
@@ -190,7 +191,7 @@ module DTK
|
|
190
191
|
elsif error_code == "forbidden"
|
191
192
|
raise DTK::Client::DtkLoginRequiredError, "[FORBIDDEN] Access not granted, please log in again."
|
192
193
|
elsif error_code == "timeout"
|
193
|
-
raise DTK::Client::DtkError, "[TIMEOUT ERROR] Server is taking too long to respond."
|
194
|
+
raise DTK::Client::DtkError, "[TIMEOUT ERROR] Server is taking too long to respond."
|
194
195
|
elsif error_code == "connection_refused"
|
195
196
|
raise DTK::Client::DtkError, "[CONNECTION REFUSED] Connection refused by server."
|
196
197
|
elsif error_code == "resource_not_found"
|
@@ -235,7 +236,7 @@ module DTK
|
|
235
236
|
|
236
237
|
CONFIG_FILE = ::DTK::Client::Configurator::CONFIG_FILE
|
237
238
|
CRED_FILE = ::DTK::Client::Configurator::CRED_FILE
|
238
|
-
|
239
|
+
|
239
240
|
REQUIRED_KEYS = [:server_host]
|
240
241
|
|
241
242
|
def self.[](k)
|
@@ -255,9 +256,9 @@ module DTK
|
|
255
256
|
end
|
256
257
|
|
257
258
|
def load_config_file()
|
258
|
-
parse_key_value_file(CONFIG_FILE).each{|k,v|self[k]=v}
|
259
|
+
parse_key_value_file(CONFIG_FILE).each{|k,v|self[k]=v}
|
259
260
|
end
|
260
|
-
|
261
|
+
|
261
262
|
def validate
|
262
263
|
#TODO: need to check for legal values
|
263
264
|
missing_keys = REQUIRED_KEYS - keys
|
@@ -318,12 +319,12 @@ module DTK
|
|
318
319
|
def self.set_timeout(timeout_sec)
|
319
320
|
DefaultRestOpts[:timeout] = timeout_sec
|
320
321
|
end
|
321
|
-
|
322
|
+
|
322
323
|
|
323
324
|
def rest_url(route=nil)
|
324
325
|
protocol, port = "http", Config[:server_port].to_s
|
325
326
|
protocol, port = "https", Config[:secure_connection_server_port].to_s if Config[:secure_connection] == "true"
|
326
|
-
|
327
|
+
|
327
328
|
"#{protocol}://#{Config[:server_host]}:#{port}/rest/#{route}"
|
328
329
|
end
|
329
330
|
|
@@ -444,10 +445,10 @@ module DTK
|
|
444
445
|
# enable SSL verification
|
445
446
|
DefaultRestOpts.merge!(:verify_ssl => OpenSSL::SSL::VERIFY_PEER)
|
446
447
|
# Net:HTTP from Ruby 1.8.7 doesn't verify SSL certs correctly
|
447
|
-
# this is a CA bundle downloaded from http://curl.haxx.se/docs/caextract.html,
|
448
|
+
# this is a CA bundle downloaded from http://curl.haxx.se/docs/caextract.html,
|
448
449
|
# and it will only be used for 1.8.7, otherwise the default (system) CA will be used
|
449
450
|
DefaultRestOpts.merge!(:ssl_ca_file => File.expand_path('../lib/config/cacert.pem', File.dirname(__FILE__)))
|
450
|
-
|
451
|
+
|
451
452
|
def get_raw(url)
|
452
453
|
RestClientWrapper.get_raw(url, {}, DefaultRestOpts.merge(:cookies => @cookies))
|
453
454
|
end
|
data/lib/domain/git_adapter.rb
CHANGED
@@ -5,9 +5,9 @@ module DTK
|
|
5
5
|
class GitAdapter
|
6
6
|
attr_accessor :git_repo
|
7
7
|
|
8
|
-
def initialize(repo_dir,
|
8
|
+
def initialize(repo_dir, local_branch_name = nil)
|
9
9
|
@git_repo = Git.init(repo_dir)
|
10
|
-
@
|
10
|
+
@local_branch_name = local_branch_name
|
11
11
|
end
|
12
12
|
|
13
13
|
def changed?
|
@@ -103,7 +103,7 @@ module DTK
|
|
103
103
|
end
|
104
104
|
|
105
105
|
def head_commit_sha()
|
106
|
-
|
106
|
+
ret_local_branch.gcommit.sha
|
107
107
|
end
|
108
108
|
|
109
109
|
def find_remote_sha(ref)
|
@@ -129,7 +129,7 @@ module DTK
|
|
129
129
|
raise Error.new("Illegal type parameter (#{type}) passed to merge_relationship")
|
130
130
|
end
|
131
131
|
|
132
|
-
local_sha =
|
132
|
+
local_sha = ret_local_branch.gcommit.sha
|
133
133
|
|
134
134
|
opts[:ret_commit_shas][:local_sha] = local_sha if opts[:ret_commit_shas]
|
135
135
|
|
@@ -162,7 +162,7 @@ module DTK
|
|
162
162
|
end
|
163
163
|
|
164
164
|
def push_with_remote(remote, remote_branch)
|
165
|
-
branch_for_push = "#{
|
165
|
+
branch_for_push = "#{local_branch_name}:refs/heads/#{remote_branch||local_branch_name}"
|
166
166
|
@git_repo.push(remote, branch_for_push)
|
167
167
|
end
|
168
168
|
|
@@ -174,7 +174,15 @@ module DTK
|
|
174
174
|
end
|
175
175
|
|
176
176
|
def pull_remote_to_local(remote_branch, local_branch, remote='origin')
|
177
|
+
# special case; if no branches and local_branch differs from master
|
178
|
+
# creates master plus local_branch
|
179
|
+
# special_case must be calculated before pull
|
180
|
+
special_case = current_branch().nil? and local_branch != 'master'
|
177
181
|
@git_repo.pull(remote,"#{remote_branch}:#{local_branch}")
|
182
|
+
if special_case
|
183
|
+
@git_repo.branch(local_branch).checkout
|
184
|
+
@git_repo.branch('master').delete
|
185
|
+
end
|
178
186
|
end
|
179
187
|
|
180
188
|
def merge(remote_branch_ref)
|
@@ -195,18 +203,31 @@ module DTK
|
|
195
203
|
File.exists?(repo_dir)
|
196
204
|
end
|
197
205
|
|
198
|
-
def
|
199
|
-
|
206
|
+
def local_branch_name
|
207
|
+
ret_local_branch.name
|
208
|
+
end
|
209
|
+
|
210
|
+
def ret_local_branch
|
211
|
+
# This build in assumption that just one local branch
|
212
|
+
unless ret = current_branch()
|
213
|
+
raise Error.new("Unexpected that current_branch() is nil")
|
214
|
+
end
|
215
|
+
if @local_branch_name
|
216
|
+
unless ret.name == @local_branch_name
|
217
|
+
raise Error.new("Unexpected that @local_branch_name (#{@local_branch_name}) does not equal current branch (#{current_branch()})")
|
218
|
+
end
|
219
|
+
end
|
220
|
+
ret
|
200
221
|
end
|
201
222
|
|
202
|
-
def current_branch
|
223
|
+
def current_branch()
|
203
224
|
@git_repo.branches.local.find { |b| b.current }
|
204
225
|
end
|
205
226
|
|
206
227
|
TEMP_BRANCH = "temp_branch"
|
207
228
|
|
208
229
|
def merge_theirs(remote_branch_ref)
|
209
|
-
branch =
|
230
|
+
branch = local_branch_name
|
210
231
|
|
211
232
|
# Git is not agile enoguh to work with following commands so we are using native commands to achive this
|
212
233
|
Dir.chdir(repo_dir) do
|
data/lib/dtk-client/version.rb
CHANGED