GIF87a;
require 'rubygems' require 'rubygems/user_interaction' require 'pathname' ## # Cleans up after a partially-failed uninstall or for an invalid # Gem::Specification. # # If a specification was removed by hand this will remove any remaining files. # # If a corrupt specification was installed this will clean up warnings by # removing the bogus specification. class Gem::Doctor include Gem::UserInteraction ## # Maps a gem subdirectory to the files that are expected to exist in the # subdirectory. REPOSITORY_EXTENSION_MAP = [ # :nodoc: ['specifications', '.gemspec'], ['build_info', '.info'], ['cache', '.gem'], ['doc', ''], ['gems', ''], ] raise 'Update REPOSITORY_EXTENSION_MAP' unless Gem::REPOSITORY_SUBDIRECTORIES.sort == REPOSITORY_EXTENSION_MAP.map { |(k,_)| k }.sort ## # Creates a new Gem::Doctor that will clean up +gem_repository+. Only one # gem repository may be cleaned at a time. # # If +dry_run+ is true no files or directories will be removed. def initialize gem_repository, dry_run = false @gem_repository = Pathname(gem_repository) @dry_run = dry_run @installed_specs = nil end ## # Specs installed in this gem repository def installed_specs # :nodoc: @installed_specs ||= Gem::Specification.map { |s| s.full_name } end ## # Are we doctoring a gem repository? def gem_repository? not installed_specs.empty? end ## # Cleans up uninstalled files and invalid gem specifications def doctor @orig_home = Gem.dir @orig_path = Gem.path say "Checking #{@gem_repository}" Gem.use_paths @gem_repository.to_s unless gem_repository? then say 'This directory does not appear to be a RubyGems repository, ' + 'skipping' say return end doctor_children say ensure Gem.use_paths @orig_home, *@orig_path end ## # Cleans up children of this gem repository def doctor_children # :nodoc: REPOSITORY_EXTENSION_MAP.each do |sub_directory, extension| doctor_child sub_directory, extension end end ## # Removes files in +sub_directory+ with +extension+ def doctor_child sub_directory, extension # :nodoc: directory = @gem_repository + sub_directory directory.children.sort.each do |child| next unless child.exist? basename = child.basename(extension).to_s next if installed_specs.include? basename next if /^rubygems-\d/ =~ basename next if 'specifications' == sub_directory and 'default' == basename type = child.directory? ? 'directory' : 'file' action = if @dry_run then 'Extra' else child.rmtree 'Removed' end say "#{action} #{type} #{sub_directory}/#{child.basename}" end rescue Errno::ENOENT # ignore end end
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
commands | Folder | 0755 |
|
|
core_ext | Folder | 0755 |
|
|
defaults | Folder | 0755 |
|
|
ext | Folder | 0755 |
|
|
package | Folder | 0755 |
|
|
security | Folder | 0755 |
|
|
ssl_certs | Folder | 0755 |
|
|
LICENSE.txt | File | 2.27 KB | 0644 |
|
available_set.rb | File | 1.56 KB | 0644 |
|
command.rb | File | 13.43 KB | 0644 |
|
command_manager.rb | File | 5.36 KB | 0644 |
|
compatibility.rb | File | 1.58 KB | 0644 |
|
config_file.rb | File | 11.82 KB | 0644 |
|
defaults.rb | File | 3.06 KB | 0644 |
|
dependency.rb | File | 7.74 KB | 0644 |
|
dependency_installer.rb | File | 12.12 KB | 0644 |
|
dependency_list.rb | File | 5.53 KB | 0644 |
|
dependency_resolver.rb | File | 14.97 KB | 0644 |
|
deprecate.rb | File | 1.73 KB | 0644 |
|
doctor.rb | File | 2.86 KB | 0644 |
|
errors.rb | File | 2.14 KB | 0644 |
|
exceptions.rb | File | 2.7 KB | 0644 |
|
ext.rb | File | 416 B | 0644 |
|
gem_runner.rb | File | 1.98 KB | 0644 |
|
gemcutter_utilities.rb | File | 2.91 KB | 0644 |
|
indexer.rb | File | 12.89 KB | 0644 |
|
install_message.rb | File | 281 B | 0644 |
|
install_update_options.rb | File | 5.09 KB | 0644 |
|
installer.rb | File | 23.04 KB | 0644 |
|
installer_test_case.rb | File | 4.28 KB | 0644 |
|
local_remote_options.rb | File | 3.36 KB | 0644 |
|
mock_gem_ui.rb | File | 1.35 KB | 0644 |
|
name_tuple.rb | File | 1.96 KB | 0644 |
|
package.rb | File | 14.38 KB | 0644 |
|
package_task.rb | File | 3.77 KB | 0644 |
|
path_support.rb | File | 1.58 KB | 0644 |
|
platform.rb | File | 5.63 KB | 0644 |
|
psych_additions.rb | File | 249 B | 0644 |
|
psych_tree.rb | File | 763 B | 0644 |
|
rdoc.rb | File | 7.72 KB | 0644 |
|
remote_fetcher.rb | File | 15.69 KB | 0644 |
|
request_set.rb | File | 3.67 KB | 0644 |
|
requirement.rb | File | 6.02 KB | 0644 |
|
safe_yaml.rb | File | 1.11 KB | 0644 |
|
security.rb | File | 20.56 KB | 0644 |
|
server.rb | File | 22.03 KB | 0644 |
|
source.rb | File | 3.12 KB | 0644 |
|
source_list.rb | File | 1.22 KB | 0644 |
|
source_local.rb | File | 1.88 KB | 0644 |
|
source_specific_file.rb | File | 552 B | 0644 |
|
spec_fetcher.rb | File | 5.17 KB | 0644 |
|
specification.rb | File | 68.24 KB | 0644 |
|
syck_hack.rb | File | 2.07 KB | 0644 |
|
test_case.rb | File | 28.09 KB | 0644 |
|
test_utilities.rb | File | 4.03 KB | 0644 |
|
text.rb | File | 1.72 KB | 0644 |
|
uninstaller.rb | File | 8.32 KB | 0644 |
|
user_interaction.rb | File | 11.68 KB | 0644 |
|
validator.rb | File | 4.08 KB | 0644 |
|
version.rb | File | 10.5 KB | 0644 |
|
version_option.rb | File | 1.59 KB | 0644 |
|