Created
January 24, 2011 16:23
-
-
Save wayneeseguin/793467 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#Shouldn't that be more this? | |
# curl https://github.com/wayneeseguin/rvm/raw/master/scripts/install | grep -v '^#' | |
set -o errtrace | |
export PS4='+[${BASH_SOURCE}] : ${LINENO} : ${FUNCNAME[0]:+${FUNCNAME[0]}() $ }' | |
if [[ -z "$rvm_selfcontained" ]]; then | |
if [[ $(id | sed -e 's/(.*//' | awk -F= '{print $2}') -eq 0 || \ | |
-n "$rvm_prefix" && "$rvm_prefix" != "$HOME"/* ]]; then | |
export rvm_selfcontained=0 | |
else | |
export rvm_selfcontained=1 | |
fi | |
fi | |
unset rvm_auto_flag | |
if [[ -d "$install_source_path/scripts" \ | |
&& -s "$install_source_path/scripts/utility" ]] ; then | |
builtin cd "$install_source_path" | |
fi | |
source scripts/version | |
source scripts/utility | |
usage() | |
{ | |
printf " | |
Usage: | |
${0} [options] | |
options: | |
--auto : Automatically update shell profile files. | |
--prefix : Installation prefix directory. | |
--help : Display help/usage (this) message | |
--version : display rvm package version | |
\n" | |
} | |
check_rubyopt_conditions() | |
{ | |
if [[ -n "${RUBYOPT:-""}" ]]; then | |
printf " | |
WARNING: You have RUBYOPT set in your current environment. | |
This may cause rubies to not work as you expect them to as it is not supported | |
by all of them If errors show up, please try unsetting RUBYOPT first. | |
" | |
fi | |
} | |
andand_return_instructions() | |
{ | |
printf " | |
This means that if you see something like: | |
'[ -z \"\$PS1\" ] && return' | |
then you change this line to: | |
if [[ -n \"\$PS1\" ]] ; then | |
EOF - This marks the end of the .bashrc file | |
" | |
} | |
installation_complete() | |
{ | |
printf " | |
You must now complete the install by loading RVM in new shells. | |
1) Place the folowing line at the end of your shell's loading files | |
(.bashrc or .bash_profile for bash and .zshrc for zsh), | |
after all PATH/variable settings: | |
You only need to add this line the first time you install rvm. | |
2) Ensure that there is no 'return' from inside the ~/.bashrc file, | |
otherwise rvm may be prevented from working properly. | |
$(andand_return_instructions) | |
Be absolutely *sure* to REMOVE the '&& return'. | |
If you wish to DRY up your config you can 'source ~/.bashrc' at the bottom of your .bash_profile. | |
Placing all non-interactive (non login) items in the .bashrc, | |
including the 'source' line above and any environment settings. | |
3) CLOSE THIS SHELL and open a new one in order to use rvm. | |
\n" | |
} | |
andand_return_warning() | |
{ | |
printf " | |
WARNING: you have a 'return' statement in your ~/.bashrc | |
This could cause some features of RVM to not work. | |
$(andand_return_instructions) | |
Even if you are using zsh you should still adjust the ~/.bashrc | |
If you have any questions about this please visit | |
\n" | |
} | |
thank_you() | |
{ | |
printf " | |
${name:-"${USER:-$(id | sed -e 's/^[^(]*(//' -e 's/).*$//')}"}, | |
Thank you very much for using RVM! I sincerely hope that RVM helps to | |
make your work both easier and more enjoyable. | |
If you have any questions, issues and/or ideas for improvement please | |
(http://bit.ly/5mGjlm) and identify (/msg nickserv <nick> <pass>) to | |
talk, this prevents spambots from ruining our day. | |
~09:00-17:00EDT and again from ~21:00EDT-~23:00EDT | |
If I do not respond right away, please hang around after asking your | |
question, I will respond as soon as I am back. It is best to talk in | |
Be sure to get head often as rvm development happens fast, | |
you can do this by running 'rvm get head' followed by 'rvm reload' | |
or opening a new shell | |
w⦿‿⦿t | |
~ Wayne | |
" | |
} | |
upgrade_notes() | |
{ | |
printf " | |
Upgrade Notes | |
* rvm_trust_rvmrcs has been changed to rvm_trust_rvmrcs_flag for consistency | |
* Ruby package dependency list for your OS is given by: | |
rvm notes | |
* If you encounter any issues with a ruby 'X' your best bet is to: | |
rvm remove X ; rvm install X | |
* If you wish to have the 'pretty colors' again, set in ~/.rvmrc: | |
export rvm_pretty_print_flag=1 | |
* If you see the following error message: Unknown alias name: 'default' | |
re-set your default ruby, this is due to a change in how default works. | |
" | |
} | |
set -o noclobber | |
set -o nounset | |
token="$1" ; shift | |
case "$token" in | |
--auto) rvm_auto_flag=1 ;; | |
--prefix) rvm_prefix="$1" ; shift ;; | |
--version) rvm_path="$PWD" ; __rvm_version ; unset rvm_path ; exit ;; | |
--debug) | |
set -o verbose | |
;; | |
--trace) | |
echo "$*" | |
env | grep '^rvm_' | |
set -o xtrace | |
;; | |
--help) | |
usage | |
exit 0 | |
;; | |
*) | |
echo "Unrecognized option: $token" | |
usage | |
exit 1 | |
;; | |
esac | |
done | |
if [[ -z "${rvm_prefix:-""}" ]] ; then | |
if [[ $(id | sed -e 's/(.*//' | awk -F= '{print $2}') -eq 0 ]] ; then | |
if [[ -s /etc/rvmrc ]] ; then | |
source /etc/rvmrc | |
fi | |
if [[ ${rvm_selfcontained:-0} -eq 0 ]] ; then | |
rvm_prefix="${rvm_prefix:-"/usr/local/"}" | |
else | |
rvm_prefix="${rvm_prefix:-"$HOME/."}" | |
fi | |
else | |
rvm_prefix="${rvm_prefix:-"$HOME/."}" | |
fi | |
fi | |
if [[ -z "${rvm_path:-""}" ]] ; then | |
rvm_path="${rvm_prefix}rvm" | |
fi | |
source scripts/initialize | |
if grep -q 'scripts/rvm' "$HOME"/.bash* 2>/dev/null \ | |
|| grep -q 'scripts/rvm' "$HOME"/.zsh* 2>/dev/null ; then | |
if [[ -d "$rvm_path" ]] && [[ -s "${rvm_path}/scripts/rvm" ]] ; then | |
export upgrade_flag=1 | |
else | |
export upgrade_flag=0 | |
fi | |
else | |
export upgrade_flag=0 | |
fi | |
__rvm_initialize | |
item="* " | |
question="\n<?>" | |
cwd="$PWD" | |
source_path="${source_path:-$cwd}" | |
if [[ "$rvm_selfcontained" = "0" ]] ; then | |
rvm_bin_path="${rvm_bin_path:-"${rvm_prefix}bin"}" | |
rvm_man_path="${rvm_man_path:-"${rvm_prefix}share/man"}" | |
rvm_rc_files="${rvm_rc_files:-"/etc/profile /etc/zshenv"}" | |
else | |
rvm_man_path="${rvm_man_path:-"$rvm_path/man"}" | |
rvm_bin_path="${rvm_bin_path:-"$rvm_path/bin"}" | |
rvm_rc_files="${rvm_rc_files:-"$HOME/.bash_profile $HOME/.bashrc $HOME/.zshenv"}" | |
fi | |
rvm_gems_path="${rvm_gems_path:-"$rvm_path/gems"}" | |
rvm_tmp_path="${rvm_tmp_path:-"$rvm_path/tmp"}" | |
printf " | |
RVM: Shell scripts enabling management of multiple ruby environments. | |
RTFM: http://rvm.beginrescueend.com/ | |
" | |
if [[ ${upgrade_flag:-0} -eq 1 ]] ;then | |
printf "\nUpgrading the RVM installation in $rvm_path/" | |
else | |
printf "\nInstalling RVM to $rvm_path/" | |
fi | |
directories=( | |
"${rvm_archives_path:-"$rvm_path/archives"}" | |
"${rvm_src_path:-"$rvm_path/src"}" | |
"${rvm_log_path:-"$rvm_path/log"}" | |
"$rvm_bin_path" | |
"${rvm_gems_path:-"$rvm_path/gems"}" | |
"${rvm_rubies_path:-"$rvm_path/rubies"}" | |
"$rvm_path/config" | |
"$rvm_path/user" | |
"${rvm_tmp_path:-"$rvm_path/tmp"}" | |
"$rvm_path/bin" | |
) | |
for directory in "${directories[@]}" ; do | |
if [[ ! -d "$directory" ]] ; then | |
mkdir -p "$directory" | |
fi | |
done | |
files=(README LICENCE) | |
for file in "${files[@]}"; do | |
cp -f "$source_path/$file" "$rvm_path/" | |
done | |
for dir_name in config scripts examples lib hooks help patches; do | |
if [[ -d "$source_path/$dir_name" ]] ; then | |
if [[ ! -d "$rvm_path/$dir_name" ]] ; then | |
mkdir -p "$rvm_path/$dir_name" | |
fi | |
cp -Rf "$source_path/$dir_name" "$rvm_path" | |
fi | |
done | |
if [[ ! -s "$rvm_path/config/user" ]] ; then | |
>> "$rvm_path/config/user" | |
fi | |
scripts=(monitor match log install color db fetch log set package) | |
for script_name in "${scripts[@]}" ; do | |
done | |
( | |
cd "$rvm_path" | |
if [[ ! -f config/user ]]; then | |
mv config/user user/db | |
fi | |
if [[ ! -f user/db ]]; then | |
touch user/db | |
fi | |
if [[ -s config/rvmrcs ]] ; then | |
mv config/rvmrcs user/rvmrcs | |
else | |
if [[ ! -f user/rvmrcs ]] ; then | |
touch user/rvmrcs | |
fi | |
fi | |
) | |
files=(rvm-prompt rvm rvmsudo rvm-shell rvm-auto-ruby) | |
for file in "${files[@]}" ; do | |
rm -f "$rvm_bin_path/$file" | |
cp -f "$source_path/binscripts/$file" "${rvm_bin_path:-"$rvm_path/bin"}/" | |
chmod +x "${rvm_bin_path:-"$rvm_path/bin"}/$file" | |
done | |
if [[ ${rvm_auto_flag:-0} -eq 1 ]] ; then | |
printf "Checking rc files... ($rvm_rc_files)" | |
if [[ ${rvm_loaded_flag:-0} -ne 1 ]] ; then | |
for rcfile in $(printf $rvm_rc_files) ; do | |
if [[ ! -f $rcfile ]] ; then touch $rcfile ; fi | |
if [[ -s "$HOME/.profile" ]] ; then | |
if ! grep -q '.profile' "$rcfile" ; then | |
echo " Adding profile sourcing line to $rcfile." | |
printf " | |
[[ -s \"$rvm_path/.profile\" ]] && source \"$rvm_path/.profile\" | |
" >> "$rcfile" | |
fi | |
fi | |
if ! grep -q "scripts\/rvm" "$rcfile" ; then | |
echo " Adding rvm loading line to $rcfile." | |
printf " | |
[[ -s \"$rvm_path/scripts/rvm\" ]] && . \"$rvm_path/scripts/rvm\" | |
" >> "$rcfile" | |
fi | |
done | |
fi | |
fi | |
if [[ -d gemsets/ ]] ; then | |
if [[ ! -d "$rvm_path/gemsets" ]] ; then | |
mkdir -p "$rvm_path/gemsets" | |
fi | |
for gemset_file in $(find "$PWD/gemsets" -iname '*.gems' | sed 's/^\.\///') ; do | |
cwd="${PWD//\//\\/}\/gemsets\/" | |
destination="$rvm_path/gemsets/${gemset_file/$cwd}" | |
destination_path="$(dirname "$destination")" | |
if [[ ! -s "$destination" ]] ; then | |
mkdir -p "$destination_path" | |
cp "$gemset_file" "$destination" | |
fi | |
done | |
fi | |
if [[ -d patchsets/ ]] ; then | |
if [[ ! -d "$rvm_path/patchsets" ]] ; then | |
mkdir -p "$rvm_path/patchsets" | |
fi | |
patchsets=($(builtin cd patchsets ; find \. -iname '*' | sed 's/^\.\///')) | |
for patchset_file in "${patchsets[@]}" ; do | |
destination="$rvm_path/patchsets/$patchset_file" | |
if [[ ! -s "$destination" ]] ; then | |
destination_path="$(dirname "$destination")" | |
mkdir -p "$destination_path" | |
cp "patchsets/$patchset_file" "$destination" | |
fi | |
done | |
fi | |
mkdir -p "${rvm_rubies_path:-"$rvm_path/rubies"}/" | |
for ruby in $rvm_path/ruby-* $rvm_path/jruby-* $rvm_path/goruby\ | |
$rvm_path/rbx-* $rvm_path/maglev-* $rvm_path/ree-* ; do | |
if [[ -d "$ruby" ]] ; then | |
mv "$ruby" "${rvm_rubies_path:-"$rvm_path/rubies"}/" | |
new_path="${rvm_rubies_path:-"$rvm_path/rubies"}/$(basename $ruby)" | |
for file in gem rake ; do | |
if [[ -s "$new_path/bin/$file" ]] ; then | |
> "${new_path}/bin/${file}.new" | |
mv -f "$new_path/bin/$file.new" "$new_path/bin/$file" | |
chmod +x "$new_path/bin/$file" | |
fi | |
done | |
fi | |
done | |
if [[ -d "$rvm_path/environments" ]] ; then | |
environments=($( find "$rvm_path/environments" -maxdepth 1 -mindepth 1 -type f )) | |
for file in "${environments[@]}" ; do | |
if grep 'BUNDLE_PATH' "$file" > /dev/null ; then | |
grep -v 'BUNDLE_PATH' "$file" > "$file.new" | |
mv "$file.new" "$file" | |
fi | |
done | |
fi | |
for gemset in "$rvm_path"/gems/*\%* ; do | |
new_path=${gemset/\%/${rvm_gemset_separator:-"@"}} | |
if [[ -d "$gemset" ]] && [[ ! -d "$new_path" ]] ; then | |
printf "\n Renaming $(basename "$gemset") to $(basename "$new_path") for new gemset separator." | |
mv "$gemset" "$new_path" | |
fi | |
done | |
for gemset in "$rvm_path"/gems/*\+* ; do | |
new_path=${gemset/\+/${rvm_gemset_separator:-"@"}} | |
if [[ -d "$gemset" && ! -d "$new_path" ]] ; then | |
printf "\n Renaming $(basename "$gemset") to $(basename "$new_path") for new gemset separator." | |
mv $gemset $new_path | |
fi | |
done | |
for gemset in "$rvm_path"/gems/*\@ ; do | |
if [[ -d "$gemset" && ! -d "$new_path" ]] ; then | |
printf "\n Fixing: $(basename "$gemset") to $(basename "$new_path") for new gemset separator." | |
mv "$gemset" "$new_path" | |
fi | |
done | |
if [[ -s "$rvm_path/config/default" ]]; then | |
original_version="$(basename "$(grep GEM_HOME "$rvm_path/config/default" \ | |
if [[ -n "$original_version" ]]; then | |
"$rvm_path/scripts/alias" create default "$original_version" &> /dev/null | |
fi ; unset original_version | |
rm -rf "$rvm_path/config/default" | |
fi | |
declare -a files | |
printf "\n Correct permissions for base binaries in $rvm_bin_path..." | |
mkdir -p "${rvm_bin_path:-"$rvm_path/bin"}" | |
files=(rvm rvmsudo rvm-shell rvm-auto-ruby) | |
for file in "${files[@]}" ; do | |
if [[ -s "${rvm_bin_path:-"$rvm_path/bin"}/$file" ]] ; then | |
chmod +x "${rvm_bin_path:-"$rvm_path/bin"}/$file" | |
fi | |
done | |
printf "\n Copying manpages into place.\n" | |
files=($(builtin cd "$install_source_path/man" ; \ | |
find . -maxdepth 1 -mindepth 1 -type f -print)) | |
for file in "${files[@]//.\/}" ; do | |
rm -rf "$rvm_man_path/$file" | |
cp -R "$install_source_path/man/$file" "$rvm_man_path/" | |
done | |
files=($( find "$rvm_path/" -mindepth 1 -maxdepth 2 -iname '*.swp' -type f )) | |
printf "\n Cleanup any .swp files." | |
for file in "${files[@]}" ; do | |
if [[ -f "$file" ]] ; then | |
rm -f "$file" | |
fi | |
done | |
fi | |
if [[ $upgrade_flag -eq 0 ]] ; then | |
./scripts/notes | |
fi | |
if command -v git > /dev/null 2>&1 ; then | |
name="$(git config user.name 2>/dev/null)" | |
fi | |
if [[ ${upgrade_flag:-0} -eq 1 ]] ; then | |
upgrade_notes | |
check_rubyopt_conditions | |
printf "\nUpgrade of RVM in $rvm_path/ is complete.\n\n" | |
else | |
if [[ ${rvm_selfcontained:-0} -eq 1 ]] ; then | |
installation_complete | |
fi | |
if [[ -s "$HOME/.bashrc" ]] && grep -q '&& return' "$HOME/.bashrc" ; then | |
andand_return_warning | |
fi | |
check_rubyopt_conditions | |
printf "\nInstallation of RVM to $rvm_path/ is complete.\n\n" | |
fi | |
thank_you | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment