PHP 8.2.31
Preview: doctor.rb Size: 3.06 KB
//proc/thread-self/root/opt/alt/ruby23/lib64/ruby/2.3.0/rubygems/doctor.rb

# frozen_string_literal: true
require 'rubygems'
require 'rubygems/user_interaction'

##
# 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',            ''],
    ['extensions',     ''],
    ['gems',           ''],
  ]

  missing =
    Gem::REPOSITORY_SUBDIRECTORIES.sort -
      REPOSITORY_EXTENSION_MAP.map { |(k,_)| k }.sort

  raise "Update REPOSITORY_EXTENSION_MAP, missing: #{missing.join ', '}" unless
    missing.empty?

  ##
  # 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 = 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 = File.join(@gem_repository, sub_directory)

    Dir.entries(directory).sort.each do |ent|
      next if ent == "." || ent == ".."

      child = File.join(directory, ent)
      next unless File.exist?(child)

      basename = File.basename(child, extension)
      next if installed_specs.include? basename
      next if /^rubygems-\d/ =~ basename
      next if 'specifications' == sub_directory and 'default' == basename

      type = File.directory?(child) ? 'directory' : 'file'

      action = if @dry_run then
                 'Extra'
               else
                 FileUtils.rm_r(child)
                 'Removed'
               end

      say "#{action} #{type} #{sub_directory}/#{File.basename(child)}"
    end
  rescue Errno::ENOENT
    # ignore
  end

end

Directory Contents

Dirs: 11 × Files: 59

Name Size Perms Modified Actions
commands DIR
- drwxr-xr-x 2024-03-03 22:43:28
Edit Download
core_ext DIR
- drwxr-xr-x 2024-03-03 22:43:28
Edit Download
ext DIR
- drwxr-xr-x 2024-03-03 22:43:28
Edit Download
package DIR
- drwxr-xr-x 2024-03-03 22:43:28
Edit Download
request DIR
- drwxr-xr-x 2024-03-03 22:43:28
Edit Download
- drwxr-xr-x 2024-03-03 22:43:28
Edit Download
resolver DIR
- drwxr-xr-x 2024-03-03 22:43:28
Edit Download
security DIR
- drwxr-xr-x 2024-03-03 22:43:28
Edit Download
source DIR
- drwxr-xr-x 2024-03-03 22:43:28
Edit Download
ssl_certs DIR
- drwxr-xr-x 2024-03-03 22:43:28
Edit Download
util DIR
- drwxr-xr-x 2024-03-03 22:43:28
Edit Download
3.02 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
7.23 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
13.68 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
4.66 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
1.66 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
12.66 KB lrw-r--r-- 2017-11-30 14:29:32
Edit Download
4.04 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
8.55 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
14.07 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
5.56 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
1.73 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
3.06 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
3.15 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
6.23 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
461 B lrw-r--r-- 2016-08-24 15:28:23
Edit Download
4.15 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
1.99 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
11.04 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
23.49 KB lrw-r--r-- 2017-09-09 13:37:16
Edit Download
4.26 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
337 B lrw-r--r-- 2016-08-24 15:28:23
Edit Download
311 B lrw-r--r-- 2016-08-24 15:28:23
Edit Download
6.06 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
3.40 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
1.38 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
2.41 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
15.99 KB lrw-r--r-- 2018-02-16 16:21:44
Edit Download
3.80 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
1.93 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
6.26 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
300 B lrw-r--r-- 2016-08-24 15:28:23
Edit Download
793 B lrw-r--r-- 2016-08-24 15:28:23
Edit Download
7.74 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
11.62 KB lrw-r--r-- 2017-09-09 13:37:16
Edit Download
6.89 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
9.74 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
6.52 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
7.75 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
1.11 KB lrw-r--r-- 2017-11-30 14:29:32
Edit Download
21.00 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
22.96 KB lrw-r--r-- 2018-02-16 16:21:44
Edit Download
5.24 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
2.50 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
141 B lrw-r--r-- 2016-08-24 15:28:23
Edit Download
123 B lrw-r--r-- 2016-08-24 15:28:23
Edit Download
80.27 KB lrw-r--r-- 2018-02-16 16:21:44
Edit Download
6.34 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
4.66 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
2.12 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
39.35 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
8.63 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
1.88 KB lrw-r--r-- 2017-09-09 13:37:16
Edit Download
8.74 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
792 B lrw-r--r-- 2016-08-24 15:28:23
Edit Download
14.48 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
2.60 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
4.21 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
11.26 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download
1.86 KB lrw-r--r-- 2016-08-24 15:28:23
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).