#!/usr/bin/env bash unset rvm_default_flag rvm_wrapper_name source "$rvm_path/scripts/base" usage() { printf " Usage: rvm alias [action] [arguments] Examples: rvm alias create [alias_name] [ruby] rvm alias delete [alias_name] rvm alias show [alias_name] rvm alias list " } alias_conflicts_with_ruby() { # If default exists, we should return true. [[ "$1" == "default" && ! -L "$rvm_path/rubies/default" ]] && return 1 # Open for suggestions to a better way of doing this... alias_check_result="$( \. "$rvm_path/scripts/initialize" \. "$rvm_path/scripts/selector" export rvm_ruby_string=\"$1\" __rvm_ruby_string > /dev/null 2>&1 echo "$?" )" if [[ "0" == "$alias_check_result" ]]; then "$rvm_path/scripts"/log "error" \ "\nYou have attempted to create an alias called '$1', which is recognized as a rvm ruby.\n" return 0 fi return 1 unset alias_check_result } alias_show() { local expanded_alias_name if [[ -z "$alias_name" ]]; then "$rvm_path/scripts"/log "error" "\nusage: 'rvm alias show [alias_name]'\n" result=1 return fi expanded_alias_name="$("$rvm_path/scripts"/db "$rvm_path/config/alias" "$alias_name")" if [[ -z "$expanded_alias_name" ]]; then "$rvm_path/scripts"/log "error" "\nUnknown alias name: '$alias_name'\n" result=1 else result=0 if [[ -n "$gemset_name" ]] ; then printf "${rvm_gemset_separator:-"@"}${rvm_gemset_separator:-"@"}${gemset_name}\n" else printf "$expanded_alias_name\n" fi fi } alias_delete() { echo "Deleting alias: $alias_name" for link in "$rvm_path/rubies/$alias_name" ; do if [[ -L "$link" ]] ; then rm -f $link ; fi done "$rvm_path/scripts"/db "$rvm_path/config/alias" "$alias_name" "delete" } alias_create() { alias_name="${alias_name:-""}" rvm_ruby_string="${rvm_ruby_string:-""}" if [[ "default" != "$alias_name" ]] && alias_conflicts_with_ruby "$alias_name"; then # Force it to an empty alias name to trigger the usage. alias_name="" fi if [[ -z "${rvm_environment_identifier:-""}" || -z "$alias_name" ]] ; then "$rvm_path/scripts"/log "error" \ "\nusage: 'rvm alias [alias_name] [ruby_string]'\n" result=1 else if [[ "default" = "$alias_name" ]] ; then rvm_alias="" fi if [[ -z "$rvm_alias" ]] ; then rvm_ruby_string="$rvm_environment_identifier" if [[ -z "$rvm_alias_expanded" ]]; then rvm_expanding_aliases=1 __rvm_become unset rvm_expanding_aliases else rvm_ruby_string="$rvm_environment_identifier" fi if [[ -z "$rvm_ruby_string" ]]; then "$rvm_path/scripts"/log "error" \ "\nUnknown ruby string '$rvm_ruby_string' specified\n" result=1 return $result fi final_environment_identifier="${rvm_environment_identifier:-$(__rvm_environment_identifier)}" "$rvm_path/scripts"/log "info" \ "Creating alias $alias_name for $final_environment_identifier." ln -nfs "$rvm_path/rubies/$rvm_ruby_string" "$rvm_path/rubies/$alias_name" "$rvm_path/scripts"/log "info" \ "Recording alias $alias_name for $final_environment_identifier." "$rvm_path/scripts"/db "$rvm_path/config/alias" "$alias_name" "$final_environment_identifier" else if [[ -d "$rvm_path/rubies/$alias_name" ]] ; then "$rvm_path/scripts"/log "error" \ "\n$rvm_path/rubies/$alias_name is taken and is *not* able to be an alias name.\n" result=1 else "$rvm_path/scripts"/log "error" \ "\n$rvm_path/rubies/$alias_name is already aliased.\n" result=1 fi fi fi } alias_list() { local item items items=($(cd "$rvm_path/rubies" ; find . -maxdepth 1 -mindepth 1 -type l | sed -e 's#./##')) for item in "${items[@]}" ; do echo "$(basename "$item") => $("$rvm_path/scripts"/db "$rvm_path/config/alias" "$(basename "$item")")" done } args=($*) action="${args[0]:-""}" alias_name="${args[1]:-""}" rvm_environment_identifier="${args[2]:-""}" args="$(echo ${args[@]:3}) " # Strip trailing / leading / extra spacing. result=0 if [[ ! -f "$rvm_path/config/alias" ]] ; then touch "$rvm_path/config/alias" ; fi if printf "$alias_name" | grep -q "${rvm_gemset_separator:-"@"}" ; then gemset_name="${alias_name/*${rvm_gemset_separator:-"@"}/}" alias_name="${alias_name/${rvm_gemset_separator:-"@"}*/}" else gemset_name="" fi if [[ -n "$alias_name" ]] ; then rvm_alias="$("$rvm_path/scripts/db" "$rvm_path/config/alias" "$alias_name")" fi if [[ "$action" = "delete" ]] ; then alias_delete elif [[ "$action" = "create" ]] ; then alias_create elif [[ "$action" = "list" ]] ; then alias_list elif [[ "$action" = "show" ]]; then alias_show elif [[ "$action" = "help" ]]; then usage else usage exit 1 fi exit $?