Module: Util::Tar
- Included in:
- IcingaCertService::Client
- Defined in:
- lib/util.rb
Overview
Submodule for handling tar archives
Instance Method Summary collapse
-
#gzip(tarfile) ⇒ Object
gzips the underlying string in the given StringIO, returning a new StringIO representing the compressed file.
-
#tar(path) ⇒ Object
Creates a tar file in memory recursively from the given path.
-
#ungzip(tarfile) ⇒ Object
un-gzips the given IO, returning the decompressed version as a StringIO.
-
#untar(io, destination) ⇒ Object
untars the given IO into the specified directory.
Instance Method Details
#gzip(tarfile) ⇒ Object
gzips the underlying string in the given StringIO, returning a new StringIO representing the compressed file.
43 44 45 46 47 48 49 50 51 52 |
# File 'lib/util.rb', line 43 def gzip(tarfile) gz = StringIO.new('') z = Zlib::GzipWriter.new(gz) z.write tarfile.string z.close # this is necessary! # z was closed to write the gzip footer, so # now we need a new StringIO StringIO.new gz.string end |
#tar(path) ⇒ Object
Creates a tar file in memory recursively from the given path.
Returns a StringIO whose underlying String is the contents of the tar file.
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/util.rb', line 19 def tar(path) tarfile = StringIO.new('') Gem::Package::TarWriter.new(tarfile) do |tar| Dir[File.join(path, '**/*')].each do |file| mode = File.stat(file).mode relative_file = file.sub /^#{Regexp.escape path}\/?/, '' if File.directory?(file) tar.mkdir relative_file, mode else tar.add_file relative_file, mode do |tf| File.open(file, 'rb') { |f| tf.write f.read } end end end end tarfile.rewind tarfile end |
#ungzip(tarfile) ⇒ Object
un-gzips the given IO, returning the decompressed version as a StringIO
56 57 58 59 60 61 |
# File 'lib/util.rb', line 56 def ungzip(tarfile) z = Zlib::GzipReader.new(tarfile) unzipped = StringIO.new(z.read) z.close unzipped end |
#untar(io, destination) ⇒ Object
untars the given IO into the specified directory
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/util.rb', line 65 def untar(io, destination) Gem::Package::TarReader.new io do |tar| tar.each do |tarfile| destination_file = File.join destination, tarfile.full_name if tarfile.directory? FileUtils.mkdir_p destination_file else destination_directory = File.dirname(destination_file) FileUtils.mkdir_p destination_directory unless File.directory?(destination_directory) File.open destination_file, 'wb' do |f| f.print tarfile.read end end end end end |