Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
TarReader reads tar files and allows iteration over their items
Creates a new TarReader on io and
yields it to the block, if given.
# File rubygems/package/tar_reader.rb, line 21
def self.new(io)
reader = super
return reader unless block_given?
begin
yield reader
ensure
reader.close
end
nil
end
Close the tar file
# File rubygems/package/tar_reader.rb, line 47
def close
end
Iterates over files in the tarball yielding each entry
# File rubygems/package/tar_reader.rb, line 53
def each
loop do
return if @io.eof?
header = Gem::Package::TarHeader.from @io
return if header.empty?
entry = Gem::Package::TarReader::Entry.new header, @io
size = entry.header.size
yield entry
skip = (512 - (size % 512)) % 512
pending = size - entry.bytes_read
begin
# avoid reading...
@io.seek pending, IO::SEEK_CUR
pending = 0
rescue Errno::EINVAL, NameError
while pending > 0 do
bytes_read = @io.read([pending, 4096].min).size
raise UnexpectedEOF if @io.eof?
pending -= bytes_read
end
end
@io.read skip # discard trailing zeros
# make sure nobody can use #read, #getc or #rewind anymore
entry.close
end
end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.