module DTK::Client::PullFromRemoteMixin

Public Instance Methods

pull_from_remote_aux(module_type,module_id,opts={}) click to toggle source
# File lib/commands/common/thor/pull_from_remote.rb, line 20
def pull_from_remote_aux(module_type,module_id,opts={})
  version = opts[:version]
  remote_namespace = opts[:remote_namespace]
  #get remote module info, errors raised if remote is not linked or access errors
  path_to_key = SSHUtil.default_rsa_pub_key_path()
  rsa_pub_key = File.file?(path_to_key) && File.open(path_to_key){|f|f.read}.chomp

  post_body = PostBody.new(
    PullFromRemote.id_field(module_type) => module_id,
    :access_rights => "r",
    :action => "pull",
    :version? => version,
    :remote_namespace? => remote_namespace,
    :rsa_pub_key? => rsa_pub_key
  )
  response = post(rest_url("#{module_type}/get_remote_module_info"),post_body)
  return response unless response.ok?

  module_name,full_module_name, frozen = response.data(:module_name, :full_module_name, :frozen)
  raise DtkError, "You are not allowed to update frozen #{module_type} versions!" if frozen

  remote_params = response.data_hash_form(:remote_repo_url,:remote_repo,:remote_branch)
  remote_params.merge!(:version => version) if version

  # check and import component module dependencies before importing service itself
  unless opts[:skip_recursive_pull]
    import_module_component_dependencies(module_type, module_id, remote_namespace)
  end

  # check whether a local module exists to determine whether pull from local clone or try to pull from server
  # TODO: probably remove OsUtil.print("Pulling changes from remote: #{remote_params[:remote_repo]} @ #{remote_params[:remote_repo_url]}")

  if Helper(:git_repo).local_clone_dir_exists?(module_type, module_name, :full_module_name => full_module_name, :version => version)
    unless rsa_pub_key
      raise DtkError,"No File found at (#{path_to_key}). Path is wrong or it is necessary to generate the public rsa key (e.g., run ssh-keygen -t rsa)"
    end
    opts_perform_locally = remote_params.merge(
      :full_module_name => full_module_name,
      :force => opts[:force],
      :do_not_raise => opts[:do_not_raise],
      :ignore_dependency_merge_conflict => opts[:ignore_dependency_merge_conflict]
    )
    PullFromRemote.perform_locally(self,module_type,module_id,module_name,opts_perform_locally)
  else
    # TODO: see if this works correctly
    PullFromRemote.perform_on_server(self,module_type,module_id,full_module_name,remote_params)
  end
end

Private Instance Methods

import_module_component_dependencies(module_type, module_id, remote_namespace = nil) click to toggle source

module_type: will be :component_module or :service_module

# File lib/commands/common/thor/pull_from_remote.rb, line 74
def import_module_component_dependencies(module_type, module_id, remote_namespace = nil)
  response = resolve_pull_from_remote_on_server(module_type, module_id, remote_namespace)

  print "Resolving dependencies please wait ... "
  RemoteDependencyUtil.check_permission_warnings(response)

  # install them all!
  if (response.ok? && !(missing_components = response.data(:missing_modules)).empty?)
    required_modules = response.data(:required_modules)
    puts " New dependencies found, Installing."

    trigger_module_auto_import(missing_components, required_modules, { :include_pull_action => true })

    puts "Resuming pull from remote ..."
  else
    puts 'Done.'
  end

  # pull them all!
  if (response.ok? && !(required_modules = response.data(:required_modules)).empty?)
    trigger_module_auto_pull(required_modules)
  end

  RemoteDependencyUtil.print_dependency_warnings(response)
  nil
end
resolve_pull_from_remote_on_server(module_type, module_id, remote_namespace=nil) click to toggle source
# File lib/commands/common/thor/pull_from_remote.rb, line 103
def resolve_pull_from_remote_on_server(module_type, module_id, remote_namespace=nil)
  post_body = PostBody.new(
    :module_id => module_id,
    :remote_namespace? => remote_namespace,
    :rsa_pub_key => SSHUtil.rsa_pub_key_content()
  )
  post(rest_url("#{module_type}/resolve_pull_from_remote"),post_body)
end