class Mixlib::Archive::LibArchive

def create(files, gzip: false)

gzip:: should the archive be gzipped?
=== Parameters

Creates an archive with the given set of +files+
def create(files, gzip: false)
  compression = gzip ? ::Archive::COMPRESSION_GZIP : ::Archive::COMPRESSION_NONE
  # "PAX restricted" will use PAX extensions when it has to, but will otherwise
  # use ustar for maximum compatibility
  format = ::Archive::FORMAT_TAR_PAX_RESTRICTED
  ::Archive.write_open_filename(archive, compression, format) do |tar|
    files.each do |fn|
      tar.new_entry do |entry|
        entry.pathname = fn
        entry.copy_stat(fn)
        tar.write_header(entry)
        if File.file?(fn)
          content = File.read(fn)
          tar.write_data(content)
        end
      end
    end
  end
end

def extract(destination, perms: true, ignore: [])

ignore[Array]:: an array of matches of file paths to ignore
perms:: should the extracter use permissions from the archive.
=== Parameters

Extracts the archive to the given +destination+
def extract(destination, perms: true, ignore: [])
  ignore_re = Regexp.union(ignore)
  flags = perms ? ::Archive::EXTRACT_PERM : nil
  Dir.chdir(destination) do
    reader = ::Archive::Reader.open_filename(@archive)
    reader.each_entry do |entry|
      if entry.pathname =~ ignore_re
        Mixlib::Archive::Log.warn "ignoring entry #{entry.pathname}"
        next
      end
      reader.extract(entry, flags.to_i)
    end
    reader.close
  end
end

def initialize(archive, options = {})

def initialize(archive, options = {})
  @archive = archive
  @options = options
end