1. Gem::
  2. Package::
  3. TarWriter

class Gem::Package::TarWriter

Allows writing of tar files

Public Class Methods

Source
# File lib/rubygems/package/tar_writer.rb, line 75defself.new(io)writer =superreturnwriterunlessblock_given?beginyieldwriterensurewriter.closeendnilend

Creates a newTarWriter, yielding it if a block is given

Calls superclass methodBasicObject::new
Source
# File lib/rubygems/package/tar_writer.rb, line 92definitialize(io)@io =io@closed =falseend

Creates a newTarWriter that will write toio

Public Instance Methods

Source
# File lib/rubygems/package/tar_writer.rb, line 102defadd_file(name,mode,mtime =nil)# :yields: iocheck_closedname,prefix =split_namenameinit_pos =@io.pos@io.writeGem::Package::TarHeader::EMPTY_HEADER# placeholder for the headeryieldRestrictedStream.new(@io)ifblock_given?size =@io.pos-init_pos-512remainder = (512- (size%512))%512@io.write"\0"*remainderfinal_pos =@io.pos@io.pos =init_posheader =Gem::Package::TarHeader.newname:name,mode:mode,size:size,prefix:prefix,mtime:mtime||Gem.source_date_epoch@io.writeheader@io.pos =final_posselfend

Adds filename with permissionsmode and mtimemtime (setsGem.source_date_epoch if not specified), and yields anIO for writing the file to

Source
# File lib/rubygems/package/tar_writer.rb, line 138defadd_file_digest(name,mode,digest_algorithms)# :yields: iodigests =digest_algorithms.mapdo|digest_algorithm|digest =digest_algorithm.newdigest_name =ifdigest.respond_to?:namedigest.nameelsedigest_algorithm.class.name[/::([^:]+)\z/,1]end    [digest_name,digest]enddigests =Hash[*digests.flatten]add_filename,modedo|io|Gem::Package::DigestIO.wrapio,digestsdo|digest_io|yielddigest_ioendenddigestsend

Addsname with permissionsmode to the tar, yieldingio for writing the file. Thedigest_algorithm is written to a read-onlyname.sum file following the given file contents containing the digest name and hexdigest separated by a tab.

The created digest object is returned.

Source
# File lib/rubygems/package/tar_writer.rb, line 170defadd_file_signed(name,mode,signer)digest_algorithms = [signer.digest_algorithm,Gem::Security.create_digest("SHA512"),  ].compact.uniqdigests =add_file_digestname,mode,digest_algorithmsdo|io|yieldioendsignature_digest =digests.values.compact.finddo|digest|digest_name =ifdigest.respond_to?:namedigest.nameelsedigest.class.name[/::([^:]+)\z/,1]enddigest_name==signer.digest_nameendraise"no #{signer.digest_name} in #{digests.values.compact}"unlesssignature_digestifsigner.keysignature =signer.signsignature_digest.digestadd_file_simple"#{name}.sig",0o444,signature.lengthdo|io|io.writesignatureendenddigestsend

Addsname with permissionsmode to the tar, yieldingio for writing the file. Thesigner is used to add a digest file using its digest_algorithm peradd_file_digest and a cryptographic signature inname.sig. If the signer has no key only the checksum file is added.

Returns the digest.

Source
# File lib/rubygems/package/tar_writer.rb, line 208defadd_file_simple(name,mode,size)# :yields: iocheck_closedname,prefix =split_namenameheader =Gem::Package::TarHeader.new(name:name,mode:mode,size:size,prefix:prefix,mtime:Gem.source_date_epoch).to_s@io.writeheaderos =BoundedStream.new@io,sizeyieldosifblock_given?min_padding =size-os.written@io.write("\0"*min_padding)remainder = (512- (size%512))%512@io.write("\0"*remainder)selfend

Add filename with permissionsmodesize bytes long. Yields anIO to write the file to.

Source
# File lib/rubygems/package/tar_writer.rb, line 234defadd_symlink(name,target,mode)check_closedname,prefix =split_namenameheader =Gem::Package::TarHeader.new(name:name,mode:mode,size:0,typeflag:"2",linkname:target,prefix:prefix,mtime:Gem.source_date_epoch).to_s@io.writeheaderselfend

Adds symlinkname with permissionsmode, linking totarget.

Source
# File lib/rubygems/package/tar_writer.rb, line 253defcheck_closedraiseIOError,"closed #{self.class}"ifclosed?end

RaisesIOError if theTarWriter is closed

Source
# File lib/rubygems/package/tar_writer.rb, line 260defclosecheck_closed@io.write"\0"*1024flush@closed =trueend

Closes theTarWriter

Source
# File lib/rubygems/package/tar_writer.rb, line 272defclosed?@closedend

Is theTarWriter closed?

Source
# File lib/rubygems/package/tar_writer.rb, line 279defflushcheck_closed@io.flushif@io.respond_to?:flushend

Flushes the TarWriter’sIO

Source
# File lib/rubygems/package/tar_writer.rb, line 288defmkdir(name,mode)check_closedname,prefix =split_name(name)header =Gem::Package::TarHeader.newname:name,mode:mode,typeflag:"5",size:0,prefix:prefix,mtime:Gem.source_date_epoch@io.writeheaderselfend

Creates a new directory in the tar filename withmode