Class Gem::Package::TarHeader
In: lib/rubygems/package/tar_header.rb
Parent: Object

A header for a tar file

Methods

empty?   from   new   update_checksum  

Constants

FIELDS = [ :checksum, :devmajor, :devminor, :gid, :gname, :linkname, :magic, :mode, :mtime, :name, :prefix, :size, :typeflag, :uid, :uname, :version, ]   Fields in the tar header
PACK_FORMAT = 'a100' + # name 'a8' + # mode 'a8' + # uid 'a8' + # gid 'a12' + # size 'a12' + # mtime 'a7a' + # chksum 'a' + # typeflag 'a100' + # linkname 'a6' + # magic 'a2' + # version 'a32' + # uname 'a32' + # gname 'a8' + # devmajor 'a8' + # devminor 'a155'   Pack format for a tar header
UNPACK_FORMAT = 'A100' + # name 'A8' + # mode 'A8' + # uid 'A8' + # gid 'A12' + # size 'A12' + # mtime 'A8' + # checksum 'A' + # typeflag 'A100' + # linkname 'A6' + # magic 'A2' + # version 'A32' + # uname 'A32' + # gname 'A8' + # devmajor 'A8' + # devminor 'A155'   Unpack format for a tar header

Public Class methods

Creates a tar header from IO stream

[Source]

     # File lib/rubygems/package/tar_header.rb, line 98
 98:   def self.from(stream)
 99:     header = stream.read 512
100:     empty = (header == "\0" * 512)
101: 
102:     fields = header.unpack UNPACK_FORMAT
103: 
104:     name     = fields.shift
105:     mode     = fields.shift.oct
106:     uid      = fields.shift.oct
107:     gid      = fields.shift.oct
108:     size     = fields.shift.oct
109:     mtime    = fields.shift.oct
110:     checksum = fields.shift.oct
111:     typeflag = fields.shift
112:     linkname = fields.shift
113:     magic    = fields.shift
114:     version  = fields.shift.oct
115:     uname    = fields.shift
116:     gname    = fields.shift
117:     devmajor = fields.shift.oct
118:     devminor = fields.shift.oct
119:     prefix   = fields.shift
120: 
121:     new :name     => name,
122:         :mode     => mode,
123:         :uid      => uid,
124:         :gid      => gid,
125:         :size     => size,
126:         :mtime    => mtime,
127:         :checksum => checksum,
128:         :typeflag => typeflag,
129:         :linkname => linkname,
130:         :magic    => magic,
131:         :version  => version,
132:         :uname    => uname,
133:         :gname    => gname,
134:         :devmajor => devmajor,
135:         :devminor => devminor,
136:         :prefix   => prefix,
137: 
138:         :empty    => empty
139: 
140:     # HACK unfactor for Rubinius
141:     #new :name     => fields.shift,
142:     #    :mode     => fields.shift.oct,
143:     #    :uid      => fields.shift.oct,
144:     #    :gid      => fields.shift.oct,
145:     #    :size     => fields.shift.oct,
146:     #    :mtime    => fields.shift.oct,
147:     #    :checksum => fields.shift.oct,
148:     #    :typeflag => fields.shift,
149:     #    :linkname => fields.shift,
150:     #    :magic    => fields.shift,
151:     #    :version  => fields.shift.oct,
152:     #    :uname    => fields.shift,
153:     #    :gname    => fields.shift,
154:     #    :devmajor => fields.shift.oct,
155:     #    :devminor => fields.shift.oct,
156:     #    :prefix   => fields.shift,
157: 
158:     #    :empty => empty
159:   end

Creates a new TarHeader using vals

[Source]

     # File lib/rubygems/package/tar_header.rb, line 164
164:   def initialize(vals)
165:     unless vals[:name] && vals[:size] && vals[:prefix] && vals[:mode] then
166:       raise ArgumentError, ":name, :size, :prefix and :mode required"
167:     end
168: 
169:     vals[:uid] ||= 0
170:     vals[:gid] ||= 0
171:     vals[:mtime] ||= 0
172:     vals[:checksum] ||= ""
173:     vals[:typeflag] ||= "0"
174:     vals[:magic] ||= "ustar"
175:     vals[:version] ||= "00"
176:     vals[:uname] ||= "wheel"
177:     vals[:gname] ||= "wheel"
178:     vals[:devmajor] ||= 0
179:     vals[:devminor] ||= 0
180: 
181:     FIELDS.each do |name|
182:       instance_variable_set "@#{name}", vals[name]
183:     end
184: 
185:     @empty = vals[:empty]
186:   end

Public Instance methods

Is the tar entry empty?

[Source]

     # File lib/rubygems/package/tar_header.rb, line 191
191:   def empty?
192:     @empty
193:   end

Updates the TarHeader‘s checksum

[Source]

     # File lib/rubygems/package/tar_header.rb, line 223
223:   def update_checksum
224:     header = header " " * 8
225:     @checksum = oct calculate_checksum(header), 6
226:   end

[Validate]