| Class | Gem::Package::TarHeader |
| In: |
lib/rubygems/package/tar_header.rb
|
| Parent: | Object |
| 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' |
# 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
# 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
# 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
# File lib/rubygems/package/tar_header.rb, line 198
198: def to_s
199: update_checksum
200: header
201: end