In Files

  • rubygems/package/tar_writer.rb

Class/Module Index [+]

Quicksearch

Gem::Package::TarWriter

Allows writing of tar files

Public Class Methods

new(io) click to toggle source

Creates a new TarWriter, yielding it if a block is given

 
               # File rubygems/package/tar_writer.rb, line 76
def self.new(io)
  writer = super

  return writer unless block_given?

  begin
    yield writer
  ensure
    writer.close
  end

  nil
end
            
new(io) click to toggle source

Creates a new TarWriter that will write to io

 
               # File rubygems/package/tar_writer.rb, line 93
def initialize(io)
  @io = io
  @closed = false
end
            

Public Instance Methods

add_file(name, mode) click to toggle source

Adds file name with permissions mode, and yields an IO for writing the file to

 
               # File rubygems/package/tar_writer.rb, line 102
def add_file(name, mode) # :yields: io
  check_closed

  raise Gem::Package::NonSeekableIO unless @io.respond_to? :pos=

  name, prefix = split_name name

  init_pos = @io.pos
  @io.write "\00"" * 512 # placeholder for the header

  yield RestrictedStream.new(@io) if block_given?

  size = @io.pos - init_pos - 512

  remainder = (512 - (size % 512)) % 512
  @io.write "\00"" * remainder

  final_pos = @io.pos
  @io.pos = init_pos

  header = Gem::Package::TarHeader.new :name => name, :mode => mode,
                                       :size => size, :prefix => prefix

  @io.write header
  @io.pos = final_pos

  self
end
            
add_file_simple(name, mode, size) click to toggle source

Add file name with permissions mode size bytes long. Yields an IO to write the file to.

 
               # File rubygems/package/tar_writer.rb, line 135
def add_file_simple(name, mode, size) # :yields: io
  check_closed

  name, prefix = split_name name

  header = Gem::Package::TarHeader.new(:name => name, :mode => mode,
                                       :size => size, :prefix => prefix).to_s

  @io.write header
  os = BoundedStream.new @io, size

  yield os if block_given?

  min_padding = size - os.written
  @io.write("\00"" * min_padding)

  remainder = (512 - (size % 512)) % 512
  @io.write("\00"" * remainder)

  self
end
            
check_closed() click to toggle source

Raises IOError if the TarWriter is closed

 
               # File rubygems/package/tar_writer.rb, line 160
def check_closed
  raise IOError, "closed #{self.class}" if closed?
end
            
close() click to toggle source

Closes the TarWriter

 
               # File rubygems/package/tar_writer.rb, line 167
def close
  check_closed

  @io.write "\00"" * 1024
  flush

  @closed = true
end
            
closed?() click to toggle source

Is the TarWriter closed?

 
               # File rubygems/package/tar_writer.rb, line 179
def closed?
  @closed
end
            
flush() click to toggle source

Flushes the TarWriter's IO

 
               # File rubygems/package/tar_writer.rb, line 186
def flush
  check_closed

  @io.flush if @io.respond_to? :flush
end
            
mkdir(name, mode) click to toggle source

Creates a new directory in the tar file name with mode

 
               # File rubygems/package/tar_writer.rb, line 195
def mkdir(name, mode)
  check_closed

  name, prefix = split_name(name)

  header = Gem::Package::TarHeader.new :name => name, :mode => mode,
                                       :typeflag => "5", :size => 0,
                                       :prefix => prefix

  @io.write header

  self
end