class Excavate::Extractors::CpioExtractor

Public Instance Methods

extract(target) click to toggle source
# File lib/excavate/extractors/cpio_extractor.rb, line 7
def extract(target)
  extract_cpio_new_format(target)
rescue RuntimeError => e
  raise unless e.message.start_with?("Invalid magic")

  extract_cpio_old_format(target)
end

Private Instance Methods

extract_cpio_new_format(target) click to toggle source
# File lib/excavate/extractors/cpio_extractor.rb, line 17
def extract_cpio_new_format(target)
  File.open(@archive, "rb") do |archive_file|
    CPIO::ASCIIReader.new(archive_file).each do |entry, file|
      path = File.join(target, entry.name)
      if entry.directory?
        FileUtils.mkdir_p(path)
      else
        FileUtils.mkdir_p(File.dirname(path))
        File.write(path, file.read, mode: "wb")
      end
    end
  end
end
extract_cpio_old_format(target) click to toggle source
# File lib/excavate/extractors/cpio_extractor.rb, line 31
def extract_cpio_old_format(target)
  File.open(@archive, "rb") do |archive_file|
    CPIO::ArchiveReader.new(archive_file).each_entry do |entry|
      path = File.expand_path(entry.filename, target)
      if entry.directory?
        FileUtils.mkdir_p(path)
      else
        FileUtils.mkdir_p(File.dirname(path))
        File.write(path, entry.data, mode: "wb")
      end
    end
  end
end