Sha256: 5a64f56d6d254e9ec4c6954f66f1387ee53aee058de2925eaead116f3988a68c

Contents?: true

Size: 753 Bytes

Versions: 11

Compression:

Stored size: 753 Bytes

Contents

require "ffi-libarchive-binary"

module Excavate
  module Extractors
    class XarExtractor < Extractor
      def extract(target)
        Dir.chdir(target) do
          extract_with_libarchive
          rename_payload(target)
        end
      end

      private

      def extract_with_libarchive
        flags = ::Archive::EXTRACT_PERM
        reader = ::Archive::Reader.open_filename(@archive)

        reader.each_entry do |entry|
          reader.extract(entry, flags.to_i)
        end

        reader.close
      end

      def rename_payload(target)
        Dir.glob(File.join(target, "**", "Payload")).each do |file|
          next unless File.file?(file)

          FileUtils.mv(file, "#{file}.cpio.gz")
        end
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
excavate-0.3.7 lib/excavate/extractors/xar_extractor.rb
excavate-0.3.6 lib/excavate/extractors/xar_extractor.rb
excavate-0.3.5 lib/excavate/extractors/xar_extractor.rb
excavate-0.3.4 lib/excavate/extractors/xar_extractor.rb
excavate-0.3.3 lib/excavate/extractors/xar_extractor.rb
excavate-0.3.2 lib/excavate/extractors/xar_extractor.rb
excavate-0.3.1 lib/excavate/extractors/xar_extractor.rb
excavate-0.3.0 lib/excavate/extractors/xar_extractor.rb
excavate-0.2.5 lib/excavate/extractors/xar_extractor.rb
excavate-0.2.4 lib/excavate/extractors/xar_extractor.rb
excavate-0.2.2 lib/excavate/extractors/xar_extractor.rb