OXIESEC PANEL
- Current Dir:
/
/
usr
/
lib
/
ruby
/
2.5.0
/
rubygems
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
05/09/2024 07:14:11 AM
rwxr-xr-x
📄
available_set.rb
3.02 KB
02/01/2016 12:43:26 PM
rw-r--r--
📄
basic_specification.rb
7.36 KB
10/20/2017 09:03:37 AM
rw-r--r--
📄
bundler_version_finder.rb
3.09 KB
10/08/2017 01:32:22 AM
rw-r--r--
📄
command.rb
13.98 KB
12/25/2017 05:54:27 AM
rw-r--r--
📄
command_manager.rb
4.77 KB
05/15/2023 11:41:43 AM
rw-r--r--
📁
commands
-
05/09/2024 07:14:11 AM
rwxr-xr-x
📄
compatibility.rb
1.66 KB
02/01/2016 12:43:26 PM
rw-r--r--
📄
config_file.rb
12.51 KB
03/19/2018 08:27:04 AM
rw-r--r--
📁
core_ext
-
05/09/2024 07:14:11 AM
rwxr-xr-x
📄
defaults.rb
4.46 KB
06/24/2016 04:13:11 AM
rw-r--r--
📄
dependency.rb
8.38 KB
10/08/2017 01:32:18 AM
rw-r--r--
📄
dependency_installer.rb
14.17 KB
10/08/2017 01:32:18 AM
rw-r--r--
📄
dependency_list.rb
5.55 KB
05/01/2017 11:40:46 AM
rw-r--r--
📄
deprecate.rb
1.73 KB
02/01/2016 12:43:26 PM
rw-r--r--
📄
doctor.rb
3.06 KB
02/01/2016 12:43:26 PM
rw-r--r--
📄
errors.rb
4.62 KB
10/08/2017 01:32:18 AM
rw-r--r--
📄
exceptions.rb
6.39 KB
10/08/2017 01:32:18 AM
rw-r--r--
📁
ext
-
05/09/2024 07:14:11 AM
rwxr-xr-x
📄
ext.rb
461 bytes
02/01/2016 12:43:26 PM
rw-r--r--
📄
gem_runner.rb
2.18 KB
10/08/2017 01:32:18 AM
rw-r--r--
📄
gemcutter_utilities.rb
4.37 KB
05/15/2023 11:41:43 AM
rw-r--r--
📄
indexer.rb
11.06 KB
03/19/2018 08:27:04 AM
rw-r--r--
📄
install_default_message.rb
337 bytes
02/01/2016 12:43:26 PM
rw-r--r--
📄
install_message.rb
311 bytes
02/01/2016 12:43:26 PM
rw-r--r--
📄
install_update_options.rb
6.89 KB
10/08/2017 01:32:18 AM
rw-r--r--
📄
installer.rb
25.11 KB
05/15/2023 11:41:43 AM
rw-r--r--
📄
installer_test_case.rb
4.41 KB
10/08/2017 01:32:18 AM
rw-r--r--
📄
local_remote_options.rb
3.4 KB
02/01/2016 12:43:26 PM
rw-r--r--
📄
mock_gem_ui.rb
1.38 KB
02/01/2016 12:43:26 PM
rw-r--r--
📄
name_tuple.rb
2.41 KB
02/01/2016 12:43:26 PM
rw-r--r--
📁
package
-
05/09/2024 07:14:11 AM
rwxr-xr-x
📄
package.rb
16.47 KB
05/15/2023 11:41:43 AM
rw-r--r--
📄
package_task.rb
3.8 KB
02/01/2016 12:43:26 PM
rw-r--r--
📄
path_support.rb
1.72 KB
03/04/2016 12:29:40 AM
rw-r--r--
📄
platform.rb
6.25 KB
05/01/2017 11:40:46 AM
rw-r--r--
📄
psych_additions.rb
300 bytes
02/01/2016 12:43:26 PM
rw-r--r--
📄
psych_tree.rb
793 bytes
02/01/2016 12:43:26 PM
rw-r--r--
📄
rdoc.rb
7.74 KB
02/01/2016 12:43:26 PM
rw-r--r--
📄
remote_fetcher.rb
11.65 KB
08/28/2017 08:31:28 AM
rw-r--r--
📁
request
-
05/09/2024 07:14:11 AM
rwxr-xr-x
📄
request.rb
8.66 KB
10/08/2017 01:32:18 AM
rw-r--r--
📁
request_set
-
05/09/2024 07:14:11 AM
rwxr-xr-x
📄
request_set.rb
10.77 KB
10/08/2017 01:32:18 AM
rw-r--r--
📄
requirement.rb
6.59 KB
10/08/2017 01:32:18 AM
rw-r--r--
📁
resolver
-
05/09/2024 07:14:11 AM
rwxr-xr-x
📄
resolver.rb
9.53 KB
10/08/2017 01:32:18 AM
rw-r--r--
📄
safe_yaml.rb
1.15 KB
11/02/2017 04:25:37 AM
rw-r--r--
📁
security
-
05/09/2024 07:14:11 AM
rwxr-xr-x
📄
security.rb
21.13 KB
03/19/2018 08:27:04 AM
rw-r--r--
📄
security_option.rb
1.06 KB
10/08/2017 01:32:22 AM
rw-r--r--
📄
server.rb
22.72 KB
03/19/2018 08:27:04 AM
rw-r--r--
📁
source
-
05/09/2024 07:14:11 AM
rwxr-xr-x
📄
source.rb
5.42 KB
03/19/2018 08:27:04 AM
rw-r--r--
📄
source_list.rb
2.53 KB
03/04/2016 12:29:40 AM
rw-r--r--
📄
source_local.rb
275 bytes
10/08/2017 01:32:18 AM
rw-r--r--
📄
source_specific_file.rb
272 bytes
10/08/2017 01:32:18 AM
rw-r--r--
📄
spec_fetcher.rb
6.47 KB
10/08/2017 01:32:18 AM
rw-r--r--
📄
specification.rb
82.65 KB
05/15/2023 11:41:43 AM
rw-r--r--
📁
ssl_certs
-
11/26/2019 12:32:04 PM
rwxr-xr-x
📄
stub_specification.rb
4.86 KB
03/19/2018 08:27:04 AM
rw-r--r--
📄
syck_hack.rb
2.12 KB
02/01/2016 12:43:26 PM
rw-r--r--
📄
test_case.rb
40.33 KB
03/19/2018 08:27:04 AM
rw-r--r--
📄
test_utilities.rb
8.63 KB
03/19/2018 08:27:04 AM
rw-r--r--
📄
text.rb
1.88 KB
08/28/2017 08:31:28 AM
rw-r--r--
📄
uninstaller.rb
8.74 KB
02/01/2016 12:43:26 PM
rw-r--r--
📄
uri_formatter.rb
792 bytes
02/01/2016 12:43:26 PM
rw-r--r--
📄
user_interaction.rb
14.54 KB
05/15/2023 11:41:43 AM
rw-r--r--
📁
util
-
05/09/2024 07:14:11 AM
rwxr-xr-x
📄
util.rb
2.57 KB
03/19/2018 08:27:04 AM
rw-r--r--
📄
validator.rb
4.23 KB
03/19/2018 08:27:04 AM
rw-r--r--
📄
version.rb
11.97 KB
10/08/2017 01:32:18 AM
rw-r--r--
📄
version_option.rb
2.03 KB
10/08/2017 01:32:18 AM
rw-r--r--
Editing: indexer.rb
Close
# frozen_string_literal: true require 'rubygems' require 'rubygems/package' require 'time' require 'tmpdir' begin gem 'builder' require 'builder/xchar' rescue LoadError end ## # Top level class for building the gem repository index. class Gem::Indexer include Gem::UserInteraction ## # Build indexes for RubyGems 1.2.0 and newer when true attr_accessor :build_modern ## # Index install location attr_reader :dest_directory ## # Specs index install location attr_reader :dest_specs_index ## # Latest specs index install location attr_reader :dest_latest_specs_index ## # Prerelease specs index install location attr_reader :dest_prerelease_specs_index ## # Index build directory attr_reader :directory ## # Create an indexer that will index the gems in +directory+. def initialize(directory, options = {}) require 'fileutils' require 'tmpdir' require 'zlib' unless defined?(Builder::XChar) then raise "Gem::Indexer requires that the XML Builder library be installed:" + "\n\tgem install builder" end options = { :build_modern => true }.merge options @build_modern = options[:build_modern] @dest_directory = directory @directory = Dir.mktmpdir 'gem_generate_index' marshal_name = "Marshal.#{Gem.marshal_version}" @master_index = File.join @directory, 'yaml' @marshal_index = File.join @directory, marshal_name @quick_dir = File.join @directory, 'quick' @quick_marshal_dir = File.join @quick_dir, marshal_name @quick_marshal_dir_base = File.join "quick", marshal_name # FIX: UGH @quick_index = File.join @quick_dir, 'index' @latest_index = File.join @quick_dir, 'latest_index' @specs_index = File.join @directory, "specs.#{Gem.marshal_version}" @latest_specs_index = File.join(@directory, "latest_specs.#{Gem.marshal_version}") @prerelease_specs_index = File.join(@directory, "prerelease_specs.#{Gem.marshal_version}") @dest_specs_index = File.join(@dest_directory, "specs.#{Gem.marshal_version}") @dest_latest_specs_index = File.join(@dest_directory, "latest_specs.#{Gem.marshal_version}") @dest_prerelease_specs_index = File.join(@dest_directory, "prerelease_specs.#{Gem.marshal_version}") @files = [] end ## # Build various indices def build_indices specs = map_gems_to_specs gem_file_list Gem::Specification._resort! specs build_marshal_gemspecs specs build_modern_indices specs if @build_modern compress_indices end ## # Builds Marshal quick index gemspecs. def build_marshal_gemspecs specs count = specs.count progress = ui.progress_reporter count, "Generating Marshal quick index gemspecs for #{count} gems", "Complete" files = [] Gem.time 'Generated Marshal quick index gemspecs' do specs.each do |spec| next if spec.default_gem? spec_file_name = "#{spec.original_name}.gemspec.rz" marshal_name = File.join @quick_marshal_dir, spec_file_name marshal_zipped = Gem.deflate Marshal.dump(spec) File.open marshal_name, 'wb' do |io| io.write marshal_zipped end files << marshal_name progress.updated spec.original_name end progress.done end @files << @quick_marshal_dir files end ## # Build a single index for RubyGems 1.2 and newer def build_modern_index(index, file, name) say "Generating #{name} index" Gem.time "Generated #{name} index" do open(file, 'wb') do |io| specs = index.map do |*spec| # We have to splat here because latest_specs is an array, while the # others are hashes. spec = spec.flatten.last platform = spec.original_platform # win32-api-1.0.4-x86-mswin32-60 unless String === platform then alert_warning "Skipping invalid platform in gem: #{spec.full_name}" next end platform = Gem::Platform::RUBY if platform.nil? or platform.empty? [spec.name, spec.version, platform] end specs = compact_specs(specs) Marshal.dump(specs, io) end end end ## # Builds indices for RubyGems 1.2 and newer. Handles full, latest, prerelease def build_modern_indices specs prerelease, released = specs.partition { |s| s.version.prerelease? } latest_specs = Gem::Specification._latest_specs specs build_modern_index(released.sort, @specs_index, 'specs') build_modern_index(latest_specs.sort, @latest_specs_index, 'latest specs') build_modern_index(prerelease.sort, @prerelease_specs_index, 'prerelease specs') @files += [@specs_index, "#{@specs_index}.gz", @latest_specs_index, "#{@latest_specs_index}.gz", @prerelease_specs_index, "#{@prerelease_specs_index}.gz"] end def map_gems_to_specs gems gems.map { |gemfile| if File.size(gemfile) == 0 then alert_warning "Skipping zero-length gem: #{gemfile}" next end begin spec = Gem::Package.new(gemfile).spec spec.loaded_from = gemfile spec.abbreviate spec.sanitize spec rescue SignalException alert_error "Received signal, exiting" raise rescue Exception => e msg = ["Unable to process #{gemfile}", "#{e.message} (#{e.class})", "\t#{e.backtrace.join "\n\t"}"].join("\n") alert_error msg end }.compact end ## # Compresses indices on disk #-- # All future files should be compressed using gzip, not deflate def compress_indices say "Compressing indices" Gem.time 'Compressed indices' do if @build_modern then gzip @specs_index gzip @latest_specs_index gzip @prerelease_specs_index end end end ## # Compacts Marshal output for the specs index data source by using identical # objects as much as possible. def compact_specs(specs) names = {} versions = {} platforms = {} specs.map do |(name, version, platform)| names[name] = name unless names.include? name versions[version] = version unless versions.include? version platforms[platform] = platform unless platforms.include? platform [names[name], versions[version], platforms[platform]] end end ## # Compress +filename+ with +extension+. def compress(filename, extension) data = Gem.read_binary filename zipped = Gem.deflate data File.open "#{filename}.#{extension}", 'wb' do |io| io.write zipped end end ## # List of gem file names to index. def gem_file_list Dir[File.join(@dest_directory, "gems", '*.gem')] end ## # Builds and installs indices. def generate_index make_temp_directories build_indices install_indices rescue SignalException ensure FileUtils.rm_rf @directory end ## # Zlib::GzipWriter wrapper that gzips +filename+ on disk. def gzip(filename) Zlib::GzipWriter.open "#{filename}.gz" do |io| io.write Gem.read_binary(filename) end end ## # Install generated indices into the destination directory. def install_indices verbose = Gem.configuration.really_verbose say "Moving index into production dir #{@dest_directory}" if verbose files = @files files.delete @quick_marshal_dir if files.include? @quick_dir if files.include? @quick_marshal_dir and not files.include? @quick_dir then files.delete @quick_marshal_dir dst_name = File.join(@dest_directory, @quick_marshal_dir_base) FileUtils.mkdir_p File.dirname(dst_name), :verbose => verbose FileUtils.rm_rf dst_name, :verbose => verbose FileUtils.mv(@quick_marshal_dir, dst_name, :verbose => verbose, :force => true) end files = files.map do |path| path.sub(/^#{Regexp.escape @directory}\/?/, '') # HACK? end files.each do |file| src_name = File.join @directory, file dst_name = File.join @dest_directory, file FileUtils.rm_rf dst_name, :verbose => verbose FileUtils.mv(src_name, @dest_directory, :verbose => verbose, :force => true) end end ## # Make directories for index generation def make_temp_directories FileUtils.rm_rf @directory FileUtils.mkdir_p @directory, :mode => 0700 FileUtils.mkdir_p @quick_marshal_dir end ## # Ensure +path+ and path with +extension+ are identical. def paranoid(path, extension) data = Gem.read_binary path compressed_data = Gem.read_binary "#{path}.#{extension}" unless data == Gem.inflate(compressed_data) then raise "Compressed file #{compressed_path} does not match uncompressed file #{path}" end end ## # Perform an in-place update of the repository from newly added gems. def update_index make_temp_directories specs_mtime = File.stat(@dest_specs_index).mtime newest_mtime = Time.at 0 updated_gems = gem_file_list.select do |gem| gem_mtime = File.stat(gem).mtime newest_mtime = gem_mtime if gem_mtime > newest_mtime gem_mtime >= specs_mtime end if updated_gems.empty? then say 'No new gems' terminate_interaction 0 end specs = map_gems_to_specs updated_gems prerelease, released = specs.partition { |s| s.version.prerelease? } files = build_marshal_gemspecs specs Gem.time 'Updated indexes' do update_specs_index released, @dest_specs_index, @specs_index update_specs_index released, @dest_latest_specs_index, @latest_specs_index update_specs_index(prerelease, @dest_prerelease_specs_index, @prerelease_specs_index) end compress_indices verbose = Gem.configuration.really_verbose say "Updating production dir #{@dest_directory}" if verbose files << @specs_index files << "#{@specs_index}.gz" files << @latest_specs_index files << "#{@latest_specs_index}.gz" files << @prerelease_specs_index files << "#{@prerelease_specs_index}.gz" files = files.map do |path| path.sub(/^#{Regexp.escape @directory}\/?/, '') # HACK? end files.each do |file| src_name = File.join @directory, file dst_name = File.join @dest_directory, file # REFACTOR: duped above FileUtils.mv src_name, dst_name, :verbose => verbose, :force => true File.utime newest_mtime, newest_mtime, dst_name end end ## # Combines specs in +index+ and +source+ then writes out a new copy to # +dest+. For a latest index, does not ensure the new file is minimal. def update_specs_index(index, source, dest) specs_index = Marshal.load Gem.read_binary(source) index.each do |spec| platform = spec.original_platform platform = Gem::Platform::RUBY if platform.nil? or platform.empty? specs_index << [spec.name, spec.version, platform] end specs_index = compact_specs specs_index.uniq.sort File.open dest, 'wb' do |io| Marshal.dump specs_index, io end end end