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

Creates a new TarHeader using vals

[Source]

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

Public Instance methods

Is the tar entry empty?

[Source]

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

Updates the TarHeader‘s checksum

[Source]

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

[Validate]