????JFIF??x?x????'
| Server IP : 172.67.174.47  /  Your IP : 216.73.216.83 Web Server : LiteSpeed System : Linux premium151.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 User : tempvsty ( 647) PHP Version : 8.0.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /proc/thread-self/./root/opt/alt/ruby18/lib64/ruby/site_ruby/1.8/rubygems/package/ | 
| Upload File : | 
# -*- coding: utf-8 -*-
#--
# Copyright (C) 2004 Mauricio Julio Fernández Pradier
# See LICENSE.txt for additional licensing information.
#++
##
# TarOutput is a wrapper to TarWriter that builds gem-format tar file.
#
# Gem-format tar files contain the following files:
# [data.tar.gz] A gzipped tar file containing the files that compose the gem
#               which will be extracted into the gem/ dir on installation.
# [metadata.gz] A YAML format Gem::Specification.
# [data.tar.gz.sig] A signature for the gem's data.tar.gz.
# [metadata.gz.sig] A signature for the gem's metadata.gz.
#
# See TarOutput::open for usage details.
class Gem::Package::TarOutput
  ##
  # Creates a new TarOutput which will yield a TarWriter object for the
  # data.tar.gz portion of a gem-format tar file.
  #
  # See #initialize for details on +io+ and +signer+.
  #
  # See #add_gem_contents for details on adding metadata to the tar file.
  def self.open(io, signer = nil, &block) # :yield: data_tar_writer
    tar_outputter = new io, signer
    tar_outputter.add_gem_contents(&block)
    tar_outputter.add_metadata
    tar_outputter.add_signatures
  ensure
    tar_outputter.close
  end
  ##
  # Creates a new TarOutput that will write a gem-format tar file to +io+.  If
  # +signer+ is given, the data.tar.gz and metadata.gz will be signed and
  # the signatures will be added to the tar file.
  def initialize(io, signer)
    @io = io
    @signer = signer
    @tar_writer = Gem::Package::TarWriter.new @io
    @metadata = nil
    @data_signature = nil
    @meta_signature = nil
  end
  ##
  # Yields a TarWriter for the data.tar.gz inside a gem-format tar file.
  # The yielded TarWriter has been extended with a #metadata= method for
  # attaching a YAML format Gem::Specification which will be written by
  # add_metadata.
  def add_gem_contents
    @tar_writer.add_file "data.tar.gz", 0644 do |inner|
      sio = @signer ? StringIO.new : nil
      Zlib::GzipWriter.wrap(sio || inner) do |os|
        Gem::Package::TarWriter.new os do |data_tar_writer|
          # :stopdoc:
          def data_tar_writer.metadata() @metadata end
          def data_tar_writer.metadata=(metadata) @metadata = metadata end
          # :startdoc:
          yield data_tar_writer
          @metadata = data_tar_writer.metadata
        end
      end
      # if we have a signing key, then sign the data
      # digest and return the signature
      if @signer then
        require 'rubygems/security'
        digest = Gem::Security::OPT[:dgst_algo].digest sio.string
        @data_signature = @signer.sign digest
        inner.write sio.string
      end
    end
    self
  end
  ##
  # Adds metadata.gz to the gem-format tar file which was saved from a
  # previous #add_gem_contents call.
  def add_metadata
    return if @metadata.nil?
    @tar_writer.add_file "metadata.gz", 0644 do |io|
      begin
        sio = @signer ? StringIO.new : nil
        gzos = Zlib::GzipWriter.new(sio || io)
        gzos.write @metadata
      ensure
        gzos.flush
        gzos.finish
        # if we have a signing key, then sign the metadata digest and return
        # the signature
        if @signer then
          require 'rubygems/security'
          digest = Gem::Security::OPT[:dgst_algo].digest sio.string
          @meta_signature = @signer.sign digest
          io.write sio.string
        end
      end
    end
  end
  ##
  # Adds data.tar.gz.sig and metadata.gz.sig to the gem-format tar files if
  # a Gem::Security::Signer was sent to initialize.
  def add_signatures
    if @data_signature then
      @tar_writer.add_file 'data.tar.gz.sig', 0644 do |io|
        io.write @data_signature
      end
    end
    if @meta_signature then
      @tar_writer.add_file 'metadata.gz.sig', 0644 do |io|
        io.write @meta_signature
      end
    end
  end
  ##
  # Closes the TarOutput.
  def close
    @tar_writer.close
  end
end