Object
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 lib/rubygems/package/tar_reader.rb, line 22 22: def self.new(io) 23: reader = super 24: 25: return reader unless block_given? 26: 27: begin 28: yield reader 29: ensure 30: reader.close 31: end 32: 33: nil 34: end
Close the tar file
# File lib/rubygems/package/tar_reader.rb, line 48 48: def close 49: end
Iterates over files in the tarball yielding each entry
# File lib/rubygems/package/tar_reader.rb, line 54 54: def each 55: loop do 56: return if @io.eof? 57: 58: header = Gem::Package::TarHeader.from @io 59: return if header.empty? 60: 61: entry = Gem::Package::TarReader::Entry.new header, @io 62: size = entry.header.size 63: 64: yield entry 65: 66: skip = (512 - (size % 512)) % 512 67: pending = size - entry.bytes_read 68: 69: begin 70: # avoid reading... 71: @io.seek pending, IO::SEEK_CUR 72: pending = 0 73: rescue Errno::EINVAL, NameError 74: while pending > 0 do 75: bytes_read = @io.read([pending, 4096].min).size 76: raise UnexpectedEOF if @io.eof? 77: pending -= bytes_read 78: end 79: end 80: 81: @io.read skip # discard trailing zeros 82: 83: # make sure nobody can use #read, #getc or #rewind anymore 84: entry.close 85: end 86: end
# File lib/rubygems/package/tar_reader.rb, line 93 93: def rewind 94: if @init_pos == 0 then 95: raise Gem::Package::NonSeekableIO unless @io.respond_to? :rewind 96: @io.rewind 97: else 98: raise Gem::Package::NonSeekableIO unless @io.respond_to? :pos= 99: @io.pos = @init_pos 100: end 101: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.