#!/usr/bin/env bash
source "$rvm_scripts_path/base"
external_prepare()
{
\typeset remote_shell
rvm_ruby_string="${1:-}"
remote_shell="${2:-}"
shift || [[ -n "${rvm_ruby_string}" ]] || {
rvm_error_help "Missing ruby name to export for prepare." external prepare
return 3
}
__rvm_ruby_string
__rvm_remote_extension "${rvm_ruby_string}"
external_prepare_package "${rvm_ruby_string}.${rvm_remote_extension}" &&
external_prepare_upload "${rvm_ruby_string}.${rvm_remote_extension}" "${remote_shell}"
}
external_prepare_package()
{
\typeset file_name
file_name="$1"
[[ -d "${rvm_rubies_path}/${rvm_ruby_string}" ]] ||
{
rvm_error "Ruby ${rvm_ruby_string} does not exist, maybe install first?."
return 2
}
rvm_log "Preparing ${rvm_ruby_string} ..."
if
__rvm_package_create "${file_name}" "${rvm_rubies_path}" "${rvm_ruby_string}"
then
rvm_log "Prepared ${file_name}."
else
case $? in
199)
rvm_error "Unrecognized archive format for ${file_name}"
return 199
;;
*)
rvm_error "Error packaging ${file_name}."
return 1
;;
esac
fi
}
#TODO: move to SMF ! RVM2 ?
external_prepare_upload()
{
\typeset remote_path remote_shell remote_directory system_path __remote_file file_name local_file path_prefix
file_name="$1"
remote_path="${2:-rvm@ssh.rvm.io:~/site/shared/public/binaries}"
system_path="$(__rvm_system_path - 99 )"
remote_directory="${remote_path#*:}/${system_path}"
remote_shell="${remote_path%:*}"
if
[[ ${rvm_path_flag:-0} -eq 1 ]]
then
path_prefix="${remote_path#*:}"
path_prefix="${path_prefix##*/}"
mkdir -p "${path_prefix}/${system_path}"
local_file="${path_prefix}/${system_path}/${file_name}"
\command \mv "${file_name}" "${local_file}"
else
local_file="${file_name}"
fi
__rvm_calculate_remote_file 0 1 1 "${file_name}"
rvm_log "--- upload:"
printf "%b" "ssh \"$remote_shell\" \"mkdir -p $remote_directory/\"\n"
if
[[ ${rvm_path_flag:-0} -eq 1 ]]
then
printf "%b" "rsync -av --rsh=ssh \"${path_prefix}/\" \"${remote_path}/\"\n"
else
printf "%b" "scp \"${local_file}\" \"$remote_shell:$remote_directory/${file_name}\"\n"
fi
rvm_log "--- rvm/config/remote:"
printf "%b" "${__remote_file}\n"
rvm_log "--- rvm/config/md5:"
printf "%b" "${__remote_file}=$( __rvm_md5_calculate "${local_file}" )\n"
rvm_log "--- rvm/config/sha512:"
printf "%b" "${__remote_file}=$( __rvm_sha__calculate 512 "${local_file}" )\n"
}
action="${1:-}"
shift || {
rvm_error_help "Missing action for prepare." prepare
exit 1
}
# skip first param if empty
[[ -n "${1:-}" ]] || (( $#==0 )) || shift
case "${action}" in
(prepare)
external_prepare "$@"
;;
(*)
rvm_error_help "Wrong action for prepare '$action'." prepare $action
exit 2
;;
esac