Allows writing of tar files

Namespace
Methods
A
C
F
M
N
Class Public methods
new(io)

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

# File ../ruby/lib/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)

Creates a new TarWriter that will write to io

# File ../ruby/lib/rubygems/package/tar_writer.rb, line 93
def initialize(io)
  @io = io
  @closed = false
end
Instance Public methods
add_file(name, mode)

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

# File ../ruby/lib/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 "\0" * 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 "\0" * 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)

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

# File ../ruby/lib/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("\0" * min_padding)

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

  self
end
check_closed()

Raises IOError if the TarWriter is closed

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

Closes the TarWriter

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

  @io.write "\0" * 1024
  flush

  @closed = true
end
closed?()

Is the TarWriter closed?

# File ../ruby/lib/rubygems/package/tar_writer.rb, line 179
def closed?
  @closed
end
flush()

Flushes the TarWriter's IO

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

  @io.flush if @io.respond_to? :flush
end
mkdir(name, mode)

Creates a new directory in the tar file name with mode

# File ../ruby/lib/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