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