aboutsummaryrefslogtreecommitdiffstats
path: root/lib/rubygems/package/tar_header.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rubygems/package/tar_header.rb')
-rw-r--r--lib/rubygems/package/tar_header.rb28
1 files changed, 24 insertions, 4 deletions
diff --git a/lib/rubygems/package/tar_header.rb b/lib/rubygems/package/tar_header.rb
index fa78126a0d..44c6695cf9 100644
--- a/lib/rubygems/package/tar_header.rb
+++ b/lib/rubygems/package/tar_header.rb
@@ -3,8 +3,6 @@
# See LICENSE.txt for additional licensing information.
#--
-require 'rubygems/package'
-
##
#--
# struct tarfile_entry_posix {
@@ -26,9 +24,13 @@ require 'rubygems/package'
# char prefix[155]; # ASCII + (Z unless filled)
# };
#++
+# A header for a tar file
class Gem::Package::TarHeader
+ ##
+ # Fields in the tar header
+
FIELDS = [
:checksum,
:devmajor,
@@ -48,6 +50,9 @@ class Gem::Package::TarHeader
:version,
]
+ ##
+ # Pack format for a tar header
+
PACK_FORMAT = 'a100' + # name
'a8' + # mode
'a8' + # uid
@@ -65,6 +70,9 @@ class Gem::Package::TarHeader
'a8' + # devminor
'a155' # prefix
+ ##
+ # Unpack format for a tar header
+
UNPACK_FORMAT = 'A100' + # name
'A8' + # mode
'A8' + # uid
@@ -84,6 +92,9 @@ class Gem::Package::TarHeader
attr_reader(*FIELDS)
+ ##
+ # Creates a tar header from IO +stream+
+
def self.from(stream)
header = stream.read 512
empty = (header == "\0" * 512)
@@ -147,6 +158,9 @@ class Gem::Package::TarHeader
# :empty => empty
end
+ ##
+ # Creates a new TarHeader using +vals+
+
def initialize(vals)
unless vals[:name] && vals[:size] && vals[:prefix] && vals[:mode] then
raise ArgumentError, ":name, :size, :prefix and :mode required"
@@ -171,11 +185,14 @@ class Gem::Package::TarHeader
@empty = vals[:empty]
end
+ ##
+ # Is the tar entry empty?
+
def empty?
@empty
end
- def ==(other)
+ def ==(other) # :nodoc:
self.class === other and
@checksum == other.checksum and
@devmajor == other.devmajor and
@@ -195,11 +212,14 @@ class Gem::Package::TarHeader
@version == other.version
end
- def to_s
+ def to_s # :nodoc:
update_checksum
header
end
+ ##
+ # Updates the TarHeader's checksum
+
def update_checksum
header = header " " * 8
@checksum = oct calculate_checksum(header), 6