123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- #!/usr/bin/env bash
- source "$rvm_scripts_path/base"
- usage()
- {
- printf "%b" "
- Usage:
- rvm repair [option]
- Options:
- wrappers - Repair wrappers
- symlinks - Repair symlinks
- environments - Repair environments
- archives - Repair archives
- gemsets - Repair gemsets
- all - Repair all of the above
- "
- }
- repair_gemsets()
- {
- \typeset directory directories
- rvm_log "Removing gemsets missing names or interpreters."
- (
- __rvm_cd "${rvm_gems_path:-"rvm_path/gems"}"
- directories=(
- $( __rvm_find . -mindepth 1 -maxdepth 1 -type d | __rvm_grep '@$' )
- $( __rvm_find . -mindepth 1 -maxdepth 1 -type d | __rvm_grep '^./@')
- )
- for directory in "${directories[@]//.\/}"
- do
- __rvm_rm_rf "./$directory/"
- done
- )
- rvm_log "Gemsets repaired."
- return 0
- }
- repair_wrappers()
- {
- rvm_log "Regenerating all wrappers..."
- __rvm_read_lines ruby_names <(__rvm_list_gemset_strings)
- for ruby_name in "${ruby_names[@]}"
- do
- __rvm_log_command \
- "wrappers.regenerate.$ruby_name" \
- "Regenerating wrappers for $ruby_name" \
- __rvm_with $ruby_name run_gem_wrappers regenerate ||
- failed_wrappers+=( "$wrapper_ruby_name" )
- done
- if (( ${#failed_wrappers[@]} ))
- then rvm_error "Wrappers regeneration failed for: ${failed_wrappers[*]}"
- else rvm_log "Wrappers regenerated"
- fi
- return ${#failed_wrappers[@]}
- }
- # Removes stale symlinks in $rvm_bin_path, likely related to wrappers.
- repair_symlinks()
- {
- rvm_log "Repairing symlinks..."
- for executable_name in "${rvm_bin_path}"/*
- do
- if
- [[ -L "$executable_name" && ! -e "$executable_name" && "$executable_name" != "${rvm_bin_path}/*" ]]
- then
- rvm_log "removing stale symlink from $(basename "$executable_name")"
- \command \rm -f "$executable_name"
- fi
- done
- rvm_log "Symlinks repaired"
- }
- # Regenerates each symlink file.
- repair_environments()
- {
- \typeset environment_name environments
- rvm_log "Regenerating environments..."
- environments=($(__rvm_cd "$rvm_environments_path" ; __rvm_find . -maxdepth 1 -mindepth 1 -type f))
- for environment_name in "${environments[@]//.\/}"
- do
- [[ -L "$rvm_environments_path/$environment_name" ]] && continue
- rvm_log "Regenerating environment file for '$environment_name'"
- [[ -f "$rvm_environments_path/$environment_name" ]] && \command \rm -f "$rvm_environments_path/$environment_name"
- (
- source "$rvm_scripts_path/base"
- __rvm_become "$environment_name"
- __rvm_ensure_has_environment_files
- )
- done
- rvm_log "Environments regenerated"
- }
- # Removes archives that have incorrect md5 sums.
- repair_archives()
- {
- \typeset archive_file archives stored_md5sum
- rvm_log "Repairing archives..."
- __rvm_read_lines archives <(
- __rvm_cd "${rvm_archives_path}"
- __rvm_find . -maxdepth 1 -mindepth 1 -type f
- )
- for archive_file in "${archives[@]//.\/}"
- do
- if
- __rvm_checksum_read "$archive_file" &&
- __rvm_checksum_any
- then
- __rvm_checksum_validate_file "${rvm_archives_path}/$archive_file" ||
- {
- rvm_log "Removing archive for '$archive_file' - Incorrect md5 checksum."
- __rvm_rm_rf "${rvm_archives_path}/$archive_file"
- }
- fi
- done
- rvm_log "Archives repaired"
- return 0
- }
- repair_all()
- {
- repair_symlinks
- repair_archives
- repair_environments
- repair_wrappers
- return 0
- }
- args=($*)
- action="${args[$__array_start]}"
- args[$__array_start]=""
- args=(${args[@]})
- if [[ -z "$action" ]]
- then
- usage
- exit $?
- fi
- case "$action" in
- all) repair_all ;;
- symlinks) repair_symlinks ;;
- gemsets) repair_gemsets ;;
- environments) repair_environments ;;
- archives) repair_archives ;;
- wrappers) repair_wrappers ;;
- help) usage ;;
- *) usage >&2 ; exit 1 ;;
- esac
- exit $?
|