mixlib-archive 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.

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