123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- #!/usr/bin/env bash
- # params: [printf_if=-] [suffix]
- __rvm_system_path()
- {
- rvm_remote_server_path="$(__rvm_db "rvm_remote_server_path${2:-}")"
- [[ -n "${rvm_remote_server_path}" ]] ||
- rvm_remote_server_path="${_system_name_lowercase}/${_system_version}/${_system_arch}"
- if [[ "${1:-}" == "-" ]]
- then printf "%b" "${rvm_remote_server_path}\n"
- fi
- }
- __rvm_remote_extension()
- {
- case "$1" in
- *.tar.*)
- rvm_remote_extension="tar${1##*tar}"
- ;;
- jruby-*)
- rvm_remote_extension="tar.gz"
- ;;
- *)
- rvm_remote_extension="tar.bz2"
- ;;
- esac
- [[ "$2" != "-" ]] || printf "%b" "${rvm_remote_extension}"
- }
- # params: ruby-string-to-transform
- __rvm_ruby_package_file()
- {
- case "$1" in
- *.tar.*)
- rvm_ruby_package_file="/$1"
- ;;
- rbx*|rubinius*)
- rvm_ruby_package_file="/${1//rbx/rubinius}.$(__rvm_remote_extension "$1" -)"
- ;;
- jruby-head)
- rvm_ruby_package_file="/jruby-head.$(__rvm_remote_extension "$1" -)"
- ;;
- jruby*)
- \typeset __version
- __version="$(
- rvm_ruby_string="$1"
- rvm_remote_flag=0 __rvm_ruby_string
- echo "$rvm_ruby_version"
- )"
- rvm_ruby_package_file="/${__version}/jruby-dist-${__version}-bin.$(__rvm_remote_extension "$1" -)"
- ;;
- "")
- rvm_ruby_package_file=""
- ;;
- ruby*|mruby*)
- rvm_ruby_package_file="/$1.$(__rvm_remote_extension "$1" -)"
- ;;
- *)
- rvm_ruby_package_file="/ruby-$1.$(__rvm_remote_extension "$1" -)"
- ;;
- esac
- }
- __rvm_include_travis_binaries()
- {
- if [[ $rvm_remote_server_url == *"travis"* && $TRAVIS != true && $_system_name_lowercase == "osx" ]]
- then
- rvm_debug "Travis binaries for OSX are not movable and can't be used outside of Travis environment. \
- Skip that source."
- return 1
- fi
- return 0
- }
- __rvm_calculate_remote_file()
- {
- rvm_remote_server_url="$( __rvm_db "rvm_remote_server_url${3:-}" )"
- [[ -n "$rvm_remote_server_url" ]] || {
- rvm_debug "rvm_remote_server_url${3:-} not found"
- return $1
- }
- __rvm_include_travis_binaries || return $1
- __rvm_system_path "" "${3:-}"
- __rvm_ruby_package_file "${4:-}"
- __remote_file="${rvm_remote_server_url}/${rvm_remote_server_path}${rvm_ruby_package_file}"
- }
- # params: return_on_end return_on_failed_link [suffix] [file]
- __rvm_remote_server_path_single()
- {
- \typeset __remote_file
- __rvm_calculate_remote_file "$@" || return $?
- if
- [[ -z "${__remote_file:-}" ]]
- then
- rvm_debug "No remote file name found"
- return $1
- elif
- file_exists_at_url "${__remote_file}"
- then
- rvm_debug "Remote file exists ${__remote_file}"
- printf "%b" "$( __rvm_db "rvm_remote_server_verify_downloads${3:-}" ):${__remote_file}"
- elif
- [[ -f "${rvm_archives_path}/${rvm_ruby_package_file##*/}" && "${rvm_ruby_package_file##*/}" == *bin-* ]]
- then
- rvm_debug "Cached file exists ${__remote_file}"
- printf "%b" "$( __rvm_db "rvm_remote_server_verify_downloads${3:-}" ):${rvm_archives_path}/${rvm_ruby_package_file##*/}"
- else
- rvm_debug "Remote file does not exist ${__remote_file}"
- return $2
- fi
- }
- # params: [file_name]
- __rvm_remote_server_path()
- {
- \typeset _iterator
- _iterator=""
- while ! __rvm_remote_server_path_single 0 1 "${_iterator}" "${1:-}"
- do : $(( _iterator+=1 ))
- done
- }
- __list_remote_all()
- {
- \typeset _iterator rvm_remote_server_url rvm_remote_server_path
- _iterator=""
- while
- __rvm_db "rvm_remote_server_url${_iterator:-}" rvm_remote_server_url
- do
- if
- __rvm_include_travis_binaries
- then
- __rvm_system_path "" "${_iterator}"
- rvm_debug "__list_remote_all${_iterator:-} $rvm_remote_server_url $rvm_remote_server_path"
- __list_remote_for "${rvm_remote_server_url}" "$rvm_remote_server_path"
- fi
- : $(( _iterator+=1 ))
- done | \command \sort -u | __rvm_version_sort
- }
- __list_remote_for()
- {
- __list_remote_for_local "$@" ||
- __list_remote_for_index "$@" ||
- __list_remote_for_s3 "$@" ||
- return $?
- }
- __list_remote_for_local()
- {
- \typeset __status1 __status2
- __status1=0
- __status2=0
- if [[ -f $rvm_user_path/remote ]]
- then __rvm_grep "${1}/${2}" < $rvm_user_path/remote || __status1=$?
- fi
- __rvm_grep "${1}/${2}" < $rvm_path/config/remote || __status2=$?
- if (( __status1 || __status2 ))
- then return 1
- else rvm_debug "__list_remote_for_local found"
- fi
- true # for OSX
- }
- __list_remote_for_index()
- {
- if
- file_exists_at_url "${1}/index.txt"
- then
- rvm_debug "__list_remote_for_index ${1}/index.txt"
- __rvm_curl -s "${1}/index.txt" | GREP_OPTIONS="" \command \grep -E "${1}/${2}/.*\.tar\.(gz|bz2)$"
- elif
- file_exists_at_url "${1}/${2}/index.txt"
- then
- rvm_debug "__list_remote_for_index ${1}/${2}/index.txt"
- __rvm_curl -s "${1}/${2}/index.txt" | GREP_OPTIONS="" \command \grep -E "${1}/${2}/.*\.tar\.(gz|bz2)$"
- else
- return 1
- fi
- true # for OSX
- }
- __list_remote_for_s3()
- {
- curl -ILfs "${1}" | __rvm_grep "Server: AmazonS3" >/dev/null || return $?
- \typeset __tmp_name __iterator __next __local_url
- __iterator=0
- __next=""
- __tmp_name="$(
- : ${TMPDIR:=${rvm_tmp_path:-/tmp}}
- mktemp "${TMPDIR}/tmp.XXXXXXXXXXXXXXXXXX"
- )"
- while
- [[ __iterator -eq 0 || -n "${__next}" ]]
- do
- __local_url="${1}?prefix=${2}/${__next:+&marker=${__next}}"
- rvm_debug "__list_remote_for_s3-${__iterator} ${__local_url}"
- __rvm_curl -s "${__local_url}" > "${__tmp_name}${__iterator}"
- GREP_OPTIONS="" \command \grep -oE "<Key>[^<]*</Key>" < "${__tmp_name}${__iterator}" |
- __rvm_awk -F"[<>]" '{print $3}' > "${__tmp_name}"
- if __rvm_grep "<IsTruncated>true</IsTruncated>" < "${__tmp_name}${__iterator}"
- then __next="$(__rvm_tail -n 1 "${__tmp_name}")"
- else __next=""
- fi
- rm "${__tmp_name}${__iterator}"
- : $(( __iterator+=1 ))
- done
- GREP_OPTIONS="" \command \grep -E "${2}/.*\.tar\.(gz|bz2)$" < "${__tmp_name}" |
- GREP_OPTIONS="" \command \grep -v -- "-src-" |
- __rvm_awk "{ print "'"'$1/'"'"\$1 }"
- rm "${__tmp_name}"*
- }
- __rvm_get_user_shell()
- {
- case "${_system_type}:${_system_name}" in
- (Linux:*|SunOS:*|BSD:*|Windows:Cygwin)
- __shell="$( getent passwd $USER )" ||
- {
- rvm_error "Error checking user shell via getent ... something went wrong, report a bug."
- return 2
- }
- echo "${__shell##*:}"
- ;;
- (Windows:Mingw)
- __shell="$( echo $SHELL )" ||
- {
- rvm_error "Error checking user shell from echo $SHELL ... something went wrong, report a bug."
- return 2
- }
- echo "${__shell##*:}"
- ;;
- (Darwin:*)
- \typeset __version
- __version="$(dscl localhost -read "/Search/Users/$USER" UserShell)" ||
- {
- rvm_error "Error checking user shell via dscl ... something went wrong, report a bug."
- return 3
- }
- echo ${__version#*: }
- ;;
- (*)
- rvm_error "Do not know how to check user shell on '$(command uname)'."
- return 1
- ;;
- esac
- }
|