TarReader reads tar files and allows iteration over their items
Namespace
Methods
Included Modules
Class Public methods
new(io)
Link
Creates a new tar file reader on io
which needs to respond to
pos, eof?, read, getc and pos=
Instance Public methods
close()
Link
Close the tar file
each()
Link
Iterates over files in the tarball yielding each entry
Also aliased as: each_entry
# File lib/rubygems/package/tar_reader.rb, line 53 def each return enum_for __method__ unless block_given? until @io.eof? do 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
rewind()
Link
seek(name)
Link
Seeks through the tar file until it finds the entry
with
name
and yields it. Rewinds the tar file to the beginning
when the block terminates.