Module: Gem::Package

Included in:
TarReader
Defined in:
lib/rubygems/package.rb

Defined Under Namespace

Modules: FSyncDir Classes: BadCheckSum, ClosedIO, Error, FormatError, NonSeekableIO, TarHeader, TarInput, TarInvalidError, TarOutput, TarReader, TarTestCase, TarWriter, TooLongFileName

Class Method Summary collapse

Class Method Details

.open(io, mode = "r", signer = nil, &block) ⇒ Object

FIX: zenspider said: does it really take an IO? passed to a method called open?!? that seems stupid.



36
37
38
39
40
41
42
43
44
45
# File 'lib/rubygems/package.rb', line 36

def self.open(io, mode = "r", signer = nil, &block)
  tar_type = case mode
             when 'r' then TarInput
             when 'w' then TarOutput
             else
               raise "Unknown Package open mode"
             end

  tar_type.open(io, signer, &block)
end

.pack(src, destname, signer = nil) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/rubygems/package.rb', line 47

def self.pack(src, destname, signer = nil)
  TarOutput.open(destname, signer) do |outp|
    dir_class.chdir(src) do
      outp. = (file_class.read("RPA/metadata") rescue nil)
      find_class.find('.') do |entry|
        case
        when file_class.file?(entry)
          entry.sub!(%r{\./}, "")
          next if entry =~ /\ARPA\//
          stat = File.stat(entry)
          outp.add_file_simple(entry, stat.mode, stat.size) do |os|
            file_class.open(entry, "rb") do |f|
              os.write(f.read(4096)) until f.eof?
            end
          end
        when file_class.dir?(entry)
          entry.sub!(%r{\./}, "")
          next if entry == "RPA"
          outp.mkdir(entry, file_class.stat(entry).mode)
        else
          raise "Don't know how to pack this yet!"
        end
      end
    end
  end
end