123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- #!/usr/bin/env bash
- rvm_base_except="selector"
- source "$rvm_scripts_path/base"
- chmod_unless_link()
- {
- if [[ -e "$1" && ! -L "$1" ]]
- then chmod -R u+w "$1" || return $?
- fi
- }
- remove_or_log()
- {
- rvm_verbose_log " - removing - $1"
- chmod_unless_link "$1" &&
- __rvm_rm_rf "$1" ||
- {
- : $(( failed_counter+=1 ))
- rvm_error " - failed removing $1 - please check ownership and permissions"
- }
- }
- empty_or_log()
- {
- rvm_verbose_log " - emptying - $1"
- chmod_unless_link "$1" &&
- echo "" > "$1" ||
- {
- : $(( failed_counter+=1 ))
- rvm_error " - failed emptying $1 - please check ownership and permissions"
- }
- }
- cleanup_single()
- {
- \typeset current_path entry
- current_path="${rvm_path}/${1}"
- if
- [[ -n "$current_path" && -d "$current_path" && "$current_path" != "/" ]]
- then
- for entry in "$current_path"/*
- do
- case $entry in
- (*\*) continue ;; # skip empty dirs
- esac
- remove_or_log "$entry"
- done
- fi
- }
- cleanup_checksums()
- {
- empty_or_log "${rvm_user_path:-${rvm_path}/user}/md5"
- empty_or_log "${rvm_user_path:-${rvm_path}/user}/sha512"
- }
- cleanup_gemsets()
- {
- \typeset current_path ruby_path
- for current_path in "${rvm_path}"/gems/*
- do
- case "${current_path##*/}" in
- (\*) continue ;; # skip no gemsets
- (cache) continue ;; # skip cache dir
- esac
- ruby_path="${current_path%@*}"
- ruby_path="${ruby_path//\/gems\///rubies/}"
- [[ -d "${ruby_path}" ]] ||
- remove_or_log "$current_path"
- done
- \typeset __found __search_path_gems __search_path_rubies gemset_name __need_a_cleanup=0
- for __found in "$rvm_path"/environments/* "$rvm_path"/wrappers/*
- do
- gemset_name="${__found##*/}"
- __search_path_gems="$rvm_path/gems/${gemset_name}"
- __search_path_rubies="$rvm_path/rubies/${gemset_name}"
- if
- [[ -e "$__found" &&
- "$gemset_name" != default &&
- ! -e "$__search_path_gems" &&
- ! -e "$__search_path_rubies"
- ]]
- then
- remove_or_log "$__found"
- fi
- done
- (( __need_a_cleanup )) ||
- for __found in "$rvm_path"/gems/*
- do
- gemset_name="${__found##*/}"
- gemset_name="${gemset_name%@*}"
- __search_path_rubies="$rvm_path/rubies/${gemset_name}"
- if
- [[ -e "$__found" &&
- "$gemset_name" != cache &&
- ! -e "$__search_path_rubies"
- ]]
- then
- remove_or_log "$__found"
- fi
- done
- }
- cleanup_links()
- {
- \typeset current_link
- \typeset -a all_links
- __rvm_read_lines all_links <(
- __rvm_find "${rvm_path}"/{environments,wrappers,gems,bin} -type l
- )
- for current_link in "${all_links[@]}"
- do
- if
- [[ -L "${current_link}" && ! -s "${current_link}" ]]
- then
- remove_or_log "${current_link}"
- fi
- done
- }
- cleanup()
- {
- while (( $# ))
- do
- rvm_log "Cleaning up rvm $1"
- case "$1" in
- (archives)
- cleanup_checksums
- cleanup_single $1
- ;;
- (checksums|gemsets|links)
- cleanup_$1
- ;;
- (logs)
- cleanup_single log
- ;;
- (sources)
- cleanup_single src
- ;;
- (*)
- cleanup_single $1
- ;;
- esac
- shift
- done
- }
- failed_counter=0
- case "$1" in
- archives|checksums|repos|sources|tmp|gemsets|logs|links)
- cleanup "$1"
- ;;
- all)
- cleanup archives repos src log tmp gemsets links
- ;;
- help)
- rvm_help cleanup
- ;;
- *)
- rvm_help cleanup
- exit 1
- ;;
- esac
- if (( failed_counter ))
- then rvm_warn "Cleanup failed for $failed_counter"
- else rvm_log "Cleanup done."
- fi
|