Sha256: 3b0aa811876ffd2681be3baf7ebe7700ab4e85edd8494b4bd419a09e5198c8e7
Contents?: true
Size: 1.53 KB
Versions: 1
Compression:
Stored size: 1.53 KB
Contents
require "mixlib/archive/tar" require "mixlib/archive/version" require "mixlib/log" require "find" module Mixlib class Archive attr_reader :archiver alias_method :extractor, :archiver def self.archive_directory(path, archive, gzip: false, format: :tar, compression: :none) targets = Find.find(path).collect { |fn| fn } new(archive).create(targets, gzip: gzip) end def initialize(archive, empty: false) @empty = empty archive = File.expand_path(archive) begin # we prefer to use libarchive, which supports a great big pile o' stuff require "mixlib/archive/lib_archive" @archiver = Mixlib::Archive::LibArchive.new(archive) rescue LoadError # but if we can't use that, we'll fall back to ruby's native tar implementation @archiver = Mixlib::Archive::Tar.new(archive) end end class Log extend Mixlib::Log end Log.level = :error def create(files = [], gzip: false) archiver.create(files, gzip: gzip) end def extract(destination, perms: true, ignore: []) ignore = [/^\.$/, /\.{2}/] + Array(ignore) create_and_empty(destination) archiver.extract(destination, perms: perms, ignore: ignore) end private def create_and_empty(destination) FileUtils.mkdir_p(destination) if @empty Dir.foreach(destination) do |entry| next if entry == "." || entry == ".." FileUtils.remove_entry_secure(File.join(destination, entry)) end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
mixlib-archive-0.4.4 | lib/mixlib/archive.rb |