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 +4 -4
- data/README.md +9 -0
- data/lib/mixlib/archive.rb +8 -3
- data/lib/mixlib/archive/tar.rb +33 -0
- data/lib/mixlib/archive/version.rb +1 -1
- data/mixlib-archive.gemspec +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 870a45eab0fb8972a29b9b78f3d2be989809d707
|
4
|
+
data.tar.gz: 87b60a1d07e2e749a59f7aafae53dab2e2975abf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
data/lib/mixlib/archive.rb
CHANGED
@@ -4,14 +4,15 @@ require "mixlib/log"
|
|
4
4
|
|
5
5
|
module Mixlib
|
6
6
|
class Archive
|
7
|
-
attr_reader :
|
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
|
-
@
|
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
|
-
|
31
|
+
archiver.extract(destination, perms: perms, ignore: ignore)
|
27
32
|
end
|
28
33
|
|
29
34
|
private
|
data/lib/mixlib/archive/tar.rb
CHANGED
@@ -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)
|
data/mixlib-archive.gemspec
CHANGED
@@ -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", "~>
|
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.
|
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:
|
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: '
|
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: '
|
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.
|
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
|