PHP 8.2.31
Preview: old_format.rb Size: 3.69 KB
/proc/thread-self/root/opt/alt/ruby19/lib64/ruby/1.9.1/rubygems/old_format.rb

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require 'rubygems'

##
# The format class knows the guts of the RubyGem .gem file format and provides
# the capability to read gem files

class Gem::OldFormat

  attr_accessor :spec, :file_entries, :gem_path

  ##
  # Constructs an instance of a Format object, representing the gem's data
  # structure.
  #
  # gem:: [String] The file name of the gem

  def initialize(gem_path)
    require 'fileutils'
    require 'zlib'
    Gem.load_yaml

    @gem_path = gem_path
  end

  ##
  # Reads the named gem file and returns a Format object, representing the
  # data from the gem file
  #
  # file_path:: [String] Path to the gem file

  def self.from_file_by_path(file_path)
    unless File.exist?(file_path)
      raise Gem::Exception, "Cannot load gem file [#{file_path}]"
    end

    File.open(file_path, 'rb') do |file|
      from_io(file, file_path)
    end
  end

  ##
  # Reads a gem from an io stream and returns a Format object, representing
  # the data from the gem file
  #
  # io:: [IO] Stream from which to read the gem

  def self.from_io(io, gem_path="(io)")
    format = self.new(gem_path)
    skip_ruby(io)
    format.spec = read_spec(io)
    format.file_entries = []
    read_files_from_gem(io) do |entry, file_data|
      format.file_entries << [entry, file_data]
    end
    format
  end

  private

  ##
  # Skips the Ruby self-install header.  After calling this method, the
  # IO index will be set after the Ruby code.
  #
  # file:: [IO] The IO to process (skip the Ruby code)

  def self.skip_ruby(file)
    end_seen = false
    loop {
      line = file.gets
      if(line == nil || line.chomp == "__END__") then
        end_seen = true
        break
      end
    }

    if end_seen == false then
      raise Gem::Exception.new("Failed to find end of ruby script while reading gem")
    end
  end

  ##
  # Reads the specification YAML from the supplied IO and constructs
  # a Gem::Specification from it.  After calling this method, the
  # IO index will be set after the specification header.
  #
  # file:: [IO] The IO to process

  def self.read_spec(file)
    yaml = ''

    read_until_dashes file do |line|
      yaml << line
    end

    Gem::Specification.from_yaml yaml
  rescue YAML::Error => e
    raise Gem::Exception, "Failed to parse gem specification out of gem file"
  rescue ArgumentError => e
    raise Gem::Exception, "Failed to parse gem specification out of gem file"
  end

  ##
  # Reads lines from the supplied IO until a end-of-yaml (---) is
  # reached
  #
  # file:: [IO] The IO to process
  # block:: [String] The read line

  def self.read_until_dashes(file)
    while((line = file.gets) && line.chomp.strip != "---") do
      yield line
    end
  end

  ##
  # Reads the embedded file data from a gem file, yielding an entry
  # containing metadata about the file and the file contents themselves
  # for each file that's archived in the gem.
  # NOTE: Many of these methods should be extracted into some kind of
  # Gem file read/writer
  #
  # gem_file:: [IO] The IO to process

  def self.read_files_from_gem(gem_file)
    errstr = "Error reading files from gem"
    header_yaml = ''
    begin
      self.read_until_dashes(gem_file) do |line|
        header_yaml << line
      end
      header = YAML.load(header_yaml)
      raise Gem::Exception, errstr unless header

      header.each do |entry|
        file_data = ''
        self.read_until_dashes(gem_file) do |line|
          file_data << line
        end
        yield [entry, Zlib::Inflate.inflate(file_data.strip.unpack("m")[0])]
      end
    rescue Zlib::DataError
      raise Gem::Exception, errstr
    end
  end

end

Directory Contents

Dirs: 4 × Files: 49

Name Size Perms Modified Actions
commands DIR
- drwxr-xr-x 2024-03-03 22:48:12
Edit Download
ext DIR
- drwxr-xr-x 2024-03-03 22:48:12
Edit Download
package DIR
- drwxr-xr-x 2024-03-03 22:48:12
Edit Download
ssl_certs DIR
- drwxr-xr-x 2024-03-03 22:48:12
Edit Download
2.21 KB lrw-r--r-- 2012-04-19 22:43:16
Edit Download
12.46 KB lrw-r--r-- 2011-07-27 02:04:03
Edit Download
4.67 KB lrw-r--r-- 2011-07-27 02:04:03
Edit Download
9.69 KB lrw-r--r-- 2012-04-19 23:38:41
Edit Download
1.83 KB lrw-r--r-- 2012-04-19 22:43:16
Edit Download
2.65 KB lrw-r--r-- 2012-04-19 22:43:16
Edit Download
6.43 KB lrw-r--r-- 2011-10-08 10:53:11
Edit Download
9.94 KB lrw-r--r-- 2011-07-27 02:04:03
Edit Download
5.58 KB lrw-r--r-- 2011-10-08 10:53:11
Edit Download
1.81 KB lrw-r--r-- 2011-10-08 10:53:11
Edit Download
5.55 KB lrw-r--r-- 2011-07-27 02:04:03
Edit Download
793 B lrw-r--r-- 2011-07-27 02:04:03
Edit Download
2.34 KB lrw-r--r-- 2011-07-27 02:04:03
Edit Download
379 B lrw-r--r-- 2011-07-27 02:04:03
Edit Download
1.96 KB lrw-r--r-- 2012-04-19 22:43:16
Edit Download
1.86 KB lrw-r--r-- 2011-07-27 02:04:03
Edit Download
2.24 KB lrw-r--r-- 2011-08-05 20:18:14
Edit Download
4.57 KB lrw-r--r-- 2011-10-08 10:53:11
Edit Download
2.38 KB lrw-r--r-- 2011-07-27 02:04:03
Edit Download
16.85 KB lrw-r--r-- 2011-10-08 10:53:11
Edit Download
16.94 KB lrw-r--r-- 2012-10-25 09:18:59
Edit Download
3.10 KB lrw-r--r-- 2012-04-19 22:43:16
Edit Download
3.87 KB lrw-r--r-- 2011-07-27 02:04:03
Edit Download
3.36 KB lrw-r--r-- 2011-07-27 02:04:03
Edit Download
1.05 KB lrw-r--r-- 2011-07-27 02:04:03
Edit Download
3.69 KB lrw-r--r-- 2011-07-27 02:04:03
Edit Download
2.15 KB lrw-r--r-- 2011-07-27 02:04:03
Edit Download
3.79 KB lrw-r--r-- 2011-07-27 02:04:03
Edit Download
1.50 KB lrw-r--r-- 2011-08-26 01:12:57
Edit Download
5.55 KB lrw-r--r-- 2012-04-19 22:43:16
Edit Download
498 B lrw-r--r-- 2012-04-19 22:43:16
Edit Download
1.34 KB lrw-r--r-- 2012-04-19 22:43:16
Edit Download
13.50 KB lrw-r--r-- 2012-04-19 23:38:41
Edit Download
4.99 KB lrw-r--r-- 2012-04-19 22:43:16
Edit Download
577 B lrw-r--r-- 2011-07-27 02:04:03
Edit Download
28.83 KB lrw-r--r-- 2011-07-27 02:04:03
Edit Download
21.93 KB lrw-r--r-- 2011-10-08 10:53:11
Edit Download
11.00 KB lrw-r--r-- 2011-10-08 10:53:11
Edit Download
54.68 KB lrw-r--r-- 2012-04-19 22:43:16
Edit Download
7.17 KB lrw-r--r-- 2012-04-19 22:43:16
Edit Download
3.96 KB lrw-r--r-- 2012-04-19 23:38:41
Edit Download
21.89 KB lrw-r--r-- 2012-04-19 22:43:16
Edit Download
3.47 KB lrw-r--r-- 2011-08-05 20:18:14
Edit Download
1.23 KB lrw-r--r-- 2011-07-27 02:04:03
Edit Download
6.77 KB lrw-r--r-- 2011-07-27 03:42:40
Edit Download
11.22 KB lrw-r--r-- 2011-08-05 20:18:14
Edit Download
4.65 KB lrw-r--r-- 2011-07-27 02:04:03
Edit Download
10.18 KB lrw-r--r-- 2013-12-22 04:38:28
Edit Download
1.59 KB lrw-r--r-- 2011-07-27 02:04:03
Edit Download

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