mixlib-archive 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mixlib-archive might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b64bcab7b9f78579acaea734d9a1678db7d542c5
4
- data.tar.gz: 8116bd9eef7f1748a7cc37e27141d169f3c18426
3
+ metadata.gz: 870a45eab0fb8972a29b9b78f3d2be989809d707
4
+ data.tar.gz: 87b60a1d07e2e749a59f7aafae53dab2e2975abf
5
5
  SHA512:
6
- metadata.gz: e2cc989da54ab896edf43c73b328369ca5190e2a08a21d29c90bf382e1bbabb2d6313aa181cde4c9a28623de88116abd60627b66d3ca6ef3bcf4fd61a9e255f9
7
- data.tar.gz: 80fa165ebdae08bc5c398e7c06eea5662d3bf9d204ffa0c63636ea53c1172d8b83a3eb7a11164fd0001c9b22c26a573cbb0ad478d5e193035cf98e7a0975ec4e
6
+ metadata.gz: 5b90b2c947b8d2a5de5fb1ab97f89724cab244eb1a47bb903474a6b6eaab3448a23bd1d2d5f7847fd93377dcda29d021ef256796687953b6a90a462bef502c52
7
+ data.tar.gz: d545eea24a5ebd28ff35f0f4c5646ef1838a3dce72454514fba39ca8b0abf622f36b8b86d7efffd228f6b3f582c7386dd2f9d6155e882239e9ec835b3ee4b7ef
data/README.md CHANGED
@@ -21,11 +21,20 @@ Or install it yourself as:
21
21
 
22
22
  ## Usage
23
23
 
24
+ To extract an archive
25
+
24
26
  ```ruby
25
27
  tar = Mixlib::Artifact.new("/path/to/tar")
26
28
  tar.extract("/destination/directory")
27
29
  ```
28
30
 
31
+ To create an archive
32
+
33
+ ```ruby
34
+ tar = Mixlib::Artifact.new("/path/to/foo.tar.gz")
35
+ tar.create(%w{ file.rb file2.rb }, gzip: true)
36
+ ```
37
+
29
38
  ## Development
30
39
 
31
40
  After checking out the repo, run `bundle` to install dependencies. Then, run `bundle exec rake spec` to run the tests. You can also run `bundle console` for an interactive prompt that will allow you to experiment.
@@ -4,14 +4,15 @@ require "mixlib/log"
4
4
 
5
5
  module Mixlib
6
6
  class Archive
7
- attr_reader :extractor
7
+ attr_reader :archiver
8
+ alias_method :extractor, :archiver
8
9
 
9
10
  def initialize(archive, empty: false)
10
11
  @empty = empty
11
12
 
12
13
  archive = File.expand_path(archive)
13
14
  # for now we only support Tar format archives.
14
- @extractor = Mixlib::Archive::Tar.new(archive)
15
+ @archiver = Mixlib::Archive::Tar.new(archive)
15
16
  end
16
17
 
17
18
  class Log
@@ -20,10 +21,14 @@ module Mixlib
20
21
 
21
22
  Log.level = :error
22
23
 
24
+ def create(files = [], gzip: false)
25
+ archiver.create(files, gzip: gzip)
26
+ end
27
+
23
28
  def extract(destination, perms: true, ignore: [])
24
29
  create_and_empty(destination)
25
30
 
26
- extractor.extract(destination, perms: perms, ignore: ignore)
31
+ archiver.extract(destination, perms: perms, ignore: ignore)
27
32
  end
28
33
 
29
34
  private
@@ -61,6 +61,39 @@ module Mixlib
61
61
  end
62
62
  end
63
63
 
64
+ # Creates an archive with the given set of +files+
65
+ #
66
+ # === Parameters
67
+ # gzip<Boolean>:: should the archive be gzipped?
68
+ def create(files, gzip: false)
69
+ tgt_dir = File.dirname(archive)
70
+ target = Tempfile.new(File.basename(archive), tgt_dir)
71
+
72
+ Gem::Package::TarWriter.new(target) do |tar|
73
+ files.each do |fn|
74
+ mode = File.stat(fn).mode
75
+ file = File.open(fn, "rb")
76
+ tar.add_file(fn, mode) do |io|
77
+ io.write(file)
78
+ end
79
+ file.close
80
+ end
81
+ end
82
+
83
+ target.close
84
+ if gzip
85
+ Zlib::GzipWriter.open(archive) do |gz|
86
+ gz.mtime = File.mtime(target.path)
87
+ gz.orig_name = File.basename(archive)
88
+ gz.write IO.binread(target.path)
89
+ end
90
+ else
91
+ FileUtils.mv(target.path, archive)
92
+ end
93
+ ensure
94
+ target.close unless target.closed?
95
+ end
96
+
64
97
  private
65
98
 
66
99
  def is_gzip_file?(path)
@@ -1,5 +1,5 @@
1
1
  module Mixlib
2
2
  class Archive
3
- VERSION = "0.2.0"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ["lib"]
19
19
 
20
20
  spec.add_development_dependency "bundler", "~> 1.11"
21
- spec.add_development_dependency "rake", "~> 10.0"
21
+ spec.add_development_dependency "rake", "~> 11.0"
22
22
  spec.add_development_dependency "rspec", "~> 3.0"
23
23
  spec.add_development_dependency "chefstyle"
24
24
  spec.add_dependency "mixlib-log"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mixlib-archive
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chef Software, Inc
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-05 00:00:00.000000000 Z
11
+ date: 2017-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '11.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '11.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -118,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
118
  version: '0'
119
119
  requirements: []
120
120
  rubyforge_project:
121
- rubygems_version: 2.4.5.1
121
+ rubygems_version: 2.5.1
122
122
  signing_key:
123
123
  specification_version: 4
124
124
  summary: A simple interface to various archive formats