Sha256: ccd94621b56d21728586fc45d8a2036beaa500a1004b4112bc1c93962f739e63
Contents?: true
Size: 1.26 KB
Versions: 1
Compression:
Stored size: 1.26 KB
Contents
require 'rubygems/package' require 'zlib' module SolrWrapper class TgzExtractor attr_reader :file, :destination TAR_LONGLINK = '././@LongLink' def initialize(file, destination: nil) @file = file @destination = destination || Dir.mktmpdir end def extract! Gem::Package::TarReader.new(Zlib::GzipReader.open(file)) do |tar| dest = nil tar.each do |entry| if entry.full_name == TAR_LONGLINK dest = File.join destination, entry.read.strip next end dest ||= File.join destination, entry.full_name if entry.directory? File.delete dest if File.file? dest FileUtils.mkdir_p dest, mode: entry.header.mode, verbose: false elsif entry.file? FileUtils.rm_rf dest if File.directory? dest File.open dest, 'wb' do |f| f.print entry.read end FileUtils.chmod entry.header.mode, dest, verbose: false elsif entry.header.typeflag == '2' # Symlink! File.symlink entry.header.linkname, dest end dest = nil end end rescue StandardError => e abort "Unable to extract #{file} into #{destination}: #{e.message}" end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
solr_wrapper-4.0.0 | lib/solr_wrapper/tgz_extractor.rb |