Class | Gem::Package::TarWriter |
In: |
lib/rubygems/package/tar_writer.rb
|
Parent: | Object |
# File lib/rubygems/package/tar_writer.rb, line 59 59: def initialize(io) 60: @io = io 61: @closed = false 62: end
# File lib/rubygems/package/tar_writer.rb, line 45 45: def self.new(io) 46: writer = super 47: 48: return writer unless block_given? 49: 50: begin 51: yield writer 52: ensure 53: writer.close 54: end 55: 56: nil 57: end
# File lib/rubygems/package/tar_writer.rb, line 64 64: def add_file(name, mode) 65: check_closed 66: 67: raise Gem::Package::NonSeekableIO unless @io.respond_to? :pos= 68: 69: name, prefix = split_name name 70: 71: init_pos = @io.pos 72: @io.write "\0" * 512 # placeholder for the header 73: 74: yield RestrictedStream.new(@io) if block_given? 75: 76: size = @io.pos - init_pos - 512 77: 78: remainder = (512 - (size % 512)) % 512 79: @io.write "\0" * remainder 80: 81: final_pos = @io.pos 82: @io.pos = init_pos 83: 84: header = Gem::Package::TarHeader.new :name => name, :mode => mode, 85: :size => size, :prefix => prefix 86: 87: @io.write header 88: @io.pos = final_pos 89: 90: self 91: end
# File lib/rubygems/package/tar_writer.rb, line 93 93: def add_file_simple(name, mode, size) 94: check_closed 95: 96: name, prefix = split_name name 97: 98: header = Gem::Package::TarHeader.new(:name => name, :mode => mode, 99: :size => size, :prefix => prefix).to_s 100: 101: @io.write header 102: os = BoundedStream.new @io, size 103: 104: yield os if block_given? 105: 106: min_padding = size - os.written 107: @io.write("\0" * min_padding) 108: 109: remainder = (512 - (size % 512)) % 512 110: @io.write("\0" * remainder) 111: 112: self 113: end
# File lib/rubygems/package/tar_writer.rb, line 115 115: def check_closed 116: raise IOError, "closed #{self.class}" if closed? 117: end
# File lib/rubygems/package/tar_writer.rb, line 119 119: def close 120: check_closed 121: 122: @io.write "\0" * 1024 123: flush 124: 125: @closed = true 126: end
# File lib/rubygems/package/tar_writer.rb, line 132 132: def flush 133: check_closed 134: 135: @io.flush if @io.respond_to? :flush 136: end
# File lib/rubygems/package/tar_writer.rb, line 138 138: def mkdir(name, mode) 139: check_closed 140: 141: name, prefix = split_name(name) 142: 143: header = Gem::Package::TarHeader.new :name => name, :mode => mode, 144: :typeflag => "5", :size => 0, 145: :prefix => prefix 146: 147: @io.write header 148: 149: self 150: end