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.