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

Methods

==   empty?   from   new   to_s   update_checksum  

Constants

FIELDS = [ :checksum, :devmajor, :devminor, :gid, :gname, :linkname, :magic, :mode, :mtime, :name, :prefix, :size, :typeflag, :uid, :uname, :version, ]
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'
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'

Public Class methods

[Source]

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

[Source]

     # File lib/rubygems/package/tar_header.rb, line 150
150:   def initialize(vals)
151:     unless vals[:name] && vals[:size] && vals[:prefix] && vals[:mode] then
152:       raise ArgumentError, ":name, :size, :prefix and :mode required"
153:     end
154: 
155:     vals[:uid] ||= 0
156:     vals[:gid] ||= 0
157:     vals[:mtime] ||= 0
158:     vals[:checksum] ||= ""
159:     vals[:typeflag] ||= "0"
160:     vals[:magic] ||= "ustar"
161:     vals[:version] ||= "00"
162:     vals[:uname] ||= "wheel"
163:     vals[:gname] ||= "wheel"
164:     vals[:devmajor] ||= 0
165:     vals[:devminor] ||= 0
166: 
167:     FIELDS.each do |name|
168:       instance_variable_set "@#{name}", vals[name]
169:     end
170: 
171:     @empty = vals[:empty]
172:   end

Public Instance methods

[Source]

     # File lib/rubygems/package/tar_header.rb, line 178
178:   def ==(other)
179:     self.class === other and
180:     @checksum == other.checksum and
181:     @devmajor == other.devmajor and
182:     @devminor == other.devminor and
183:     @gid      == other.gid      and
184:     @gname    == other.gname    and
185:     @linkname == other.linkname and
186:     @magic    == other.magic    and
187:     @mode     == other.mode     and
188:     @mtime    == other.mtime    and
189:     @name     == other.name     and
190:     @prefix   == other.prefix   and
191:     @size     == other.size     and
192:     @typeflag == other.typeflag and
193:     @uid      == other.uid      and
194:     @uname    == other.uname    and
195:     @version  == other.version
196:   end

[Source]

     # File lib/rubygems/package/tar_header.rb, line 174
174:   def empty?
175:     @empty
176:   end

[Source]

     # File lib/rubygems/package/tar_header.rb, line 198
198:   def to_s
199:     update_checksum
200:     header
201:   end

[Source]

     # File lib/rubygems/package/tar_header.rb, line 203
203:   def update_checksum
204:     header = header " " * 8
205:     @checksum = oct calculate_checksum(header), 6
206:   end

[Validate]