mixlib-archive 0.4.1 → 0.4.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 06e38a8e985c4488c001cdc1f2bb9a802eea85d8
4
- data.tar.gz: ab35dfd768fab3de993a7bf9ac6f7417a6da5edd
2
+ SHA256:
3
+ metadata.gz: e333d2af05598e7404ffdd49f2333d5edf345e7483aa7d03270da16e10001e52
4
+ data.tar.gz: 26d5a8f15aef2788da1ce44636282e736172d6bd579b532e2c9efcb39c52e098
5
5
  SHA512:
6
- metadata.gz: 76067595e643e6d4699fa856ee0c716618ef7707c4e5c4e0a5cd8bd5f5c8cee8448b22a92d800efb452baad0d7ac3a922bc4b38c2c7f17b089fa397de36fa479
7
- data.tar.gz: 7cc24941518f91fcd10d8433df67c74938c9a988050dedf23bfd08b50fefbf6256b6c79ed46e85857d1015e275d3a359f68ff1c7063b5e25a8320de694ac4fad
6
+ metadata.gz: d08e1d6b5e38ccf53381f412ca1d1ffb400c6262f74fc972b5f798f52abc2136f7317f2ee99b9cdb4de6ee3eb7f5358b417897d194fe315ae7fcbcba76249ee8
7
+ data.tar.gz: 878e846762cae3ca0d21dcb9dc0975ad35c40705fa3cd29accf0d91b9b3eb15a65832be0ee95e0a6ec1379b9db1b6b56c5ed066db4e98cef94b9e15c6819c750
@@ -0,0 +1,35 @@
1
+ ---
2
+ slack:
3
+ notify_channel: chef-notify
4
+
5
+ github:
6
+ version_tag_format: "v{{version}}"
7
+ minor_bump_labels:
8
+ - "Version: Bump Minor"
9
+
10
+ changelog:
11
+ rollup_header: Changes not yet released to rubygems.org
12
+
13
+ rubygems:
14
+ - mixlib-archive
15
+
16
+ merge_actions:
17
+ - built_in:bump_version:
18
+ ignore_labels:
19
+ - "Version: Skip Bump"
20
+ - "Expeditor: Skip All"
21
+ - bash:.expeditor/update_version.sh:
22
+ only_if:
23
+ - built_in:bump_version
24
+ - built_in:update_changelog:
25
+ ignore_labels:
26
+ - "Changelog: Skip Update"
27
+ - "Expeditor: Skip All"
28
+ - built_in:build_gem:
29
+ only_if:
30
+ - built_in:bump_version
31
+
32
+ promote:
33
+ action:
34
+ - built_in:publish_rubygems
35
+ - built_in:rollover_changelog
@@ -0,0 +1,12 @@
1
+ #!/bin/sh
2
+ #
3
+ # After a PR merge, Chef Expeditor will bump the PATCH version in the VERSION file.
4
+ # It then executes this file to update any other files/components with that new version.
5
+ #
6
+
7
+ set -evx
8
+
9
+ sed -i -r "s/^(\s*)VERSION = \".+\"/\1VERSION = \"$(cat VERSION)\"/" lib/mixlib/archive/version.rb
10
+
11
+ # Once Expeditor finshes executing this script, it will commit the changes and push
12
+ # the commit as a new tag corresponding to the value in the VERSION file.
data/.travis.yml CHANGED
@@ -1,12 +1,30 @@
1
+ sudo: false
2
+ language: ruby
3
+ cache: bundler
4
+
5
+ addons:
6
+ apt:
7
+ packages:
8
+ - libarchive-dev
9
+
10
+ matrix:
11
+ include:
12
+ - rvm: 2.4.4
13
+ - rvm: 2.5.1
14
+ - rvm: ruby-head
15
+ allow_failures:
16
+ - rvm: ruby-head
1
17
  branches:
2
18
  only:
3
- master
19
+ - master
4
20
 
5
- language: ruby
6
- rvm:
7
- - 2.1
8
- - 2.2
9
- - 2.3.1
10
- before_install: gem install bundler -v 1.11.2
11
- script: bundle exec rake ci
12
21
  bundler_args: --without changelog
22
+
23
+ before_install:
24
+ - gem install bundler
25
+ - bundle --version
26
+ - gem update --system
27
+ - gem --version
28
+
29
+ script:
30
+ - bundle exec rake ci
data/CHANGELOG.md CHANGED
@@ -1,10 +1,24 @@
1
+ <!-- usage documentation: http://expeditor-docs.es.chef.io/configuration/changelog/ -->
1
2
  # Change Log
2
3
 
4
+ <!-- latest_release -->
5
+ <!-- latest_release -->
6
+
7
+ <!-- release_rollup -->
8
+ <!-- release_rollup -->
9
+
10
+ <!-- latest_stable_release -->
11
+ ## [v0.4.2](https://github.com/chef/mixlib-archive/tree/v0.4.2) (2018-04-25)
12
+
13
+ #### Merged Pull Requests
14
+ - use libarchive by preference [#17](https://github.com/chef/mixlib-archive/pull/17) ([thommay](https://github.com/thommay))
15
+ <!-- latest_stable_release -->
16
+
3
17
  ## [v0.4.1](https://github.com/chef/mixlib-archive/tree/v0.4.1) (2017-02-02)
4
18
 
5
19
  [Full Changelog](https://github.com/chef/mixlib-archive/compare/v0.4.0...v0.4.1)
6
20
 
7
- **Merged pull requests:**
21
+ ###Merged pull requests:
8
22
 
9
23
  - Accept a single pattern to ignore [\#8](https://github.com/chef/mixlib-archive/pull/8) ([thommay](https://github.com/thommay))
10
24
 
@@ -40,4 +54,4 @@
40
54
 
41
55
 
42
56
 
43
- \* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
57
+ \* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
data/Gemfile CHANGED
@@ -3,6 +3,4 @@ source "https://rubygems.org"
3
3
  # Specify your gem's dependencies in mixlib-archive.gemspec
4
4
  gemspec
5
5
 
6
- group(:changelog) do
7
- gem "github_changelog_generator", git: "https://github.com/chef/github-changelog-generator"
8
- end
6
+ gem "ffi-libarchive"
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # Mixlib::Archive
2
- [![Build Status Master](https://travis-ci.org/chef/mixlib-archive.svg?branch=master)](https://travis-ci.org/chef/mixlib-archive)
2
+
3
+ [![Build Status Master](https://travis-ci.org/chef/mixlib-archive.svg?branch=master)](https://travis-ci.org/chef/mixlib-archive) [![Gem Version](https://badge.fury.io/rb/mixlib-archive.svg)](https://badge.fury.io/rb/mixlib-archive)
3
4
 
4
5
  A very simple gem to extract archives.
5
6
 
@@ -13,25 +14,31 @@ gem 'mixlib-archive'
13
14
 
14
15
  And then execute:
15
16
 
16
- $ bundle
17
+ ```shell
18
+ $ bundle
19
+ ```
17
20
 
18
21
  Or install it yourself as:
19
22
 
20
- $ gem install mixlib-archive
23
+ ```shell
24
+ $ gem install mixlib-archive
25
+ ```
21
26
 
22
27
  ## Usage
23
28
 
24
29
  To extract an archive
25
30
 
26
31
  ```ruby
27
- tar = Mixlib::Artifact.new("/path/to/tar")
32
+ require "mixlib/archive"
33
+ tar = Mixlib::Archive.new("/path/to/tar")
28
34
  tar.extract("/destination/directory")
29
35
  ```
30
36
 
31
37
  To create an archive
32
38
 
33
39
  ```ruby
34
- tar = Mixlib::Artifact.new("/path/to/foo.tar.gz")
40
+ require "mixlib/archive"
41
+ tar = Mixlib::Archive.new("/path/to/foo.tar.gz")
35
42
  tar.create(%w{ file.rb file2.rb }, gzip: true)
36
43
  ```
37
44
 
@@ -41,10 +48,8 @@ After checking out the repo, run `bundle` to install dependencies. Then, run `bu
41
48
 
42
49
  ## Contributing
43
50
 
44
- Bug reports and pull requests are welcome on GitHub at https://github.com/chef/mixlib-archive. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Community Guidelines](https://docs.chef.io/community_guidelines.html) code of conduct.
45
-
51
+ Bug reports and pull requests are welcome on GitHub at <https://github.com/chef/mixlib-archive>. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Community Guidelines](https://docs.chef.io/community_guidelines.html) code of conduct.
46
52
 
47
53
  ## License
48
54
 
49
55
  The gem is available as open source under the terms of the Apache License, v2
50
-
data/Rakefile CHANGED
@@ -1,5 +1,6 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
+ require "mixlib/archive/version"
3
4
 
4
5
  RSpec::Core::RakeTask.new(:spec)
5
6
 
@@ -17,3 +18,14 @@ begin
17
18
  rescue LoadError
18
19
  puts "chefstyle/rubocop is not available. gem install chefstyle to do style checking."
19
20
  end
21
+
22
+ begin
23
+ require "github_changelog_generator/task"
24
+
25
+ GitHubChangelogGenerator::RakeTask.new :changelog do |config|
26
+ config.issues = false
27
+ config.future_release = Mixlib::Archive::VERSION
28
+ end
29
+ rescue LoadError
30
+ puts "github_changelog_generator is not available. gem install github_changelog_generator to generate changelogs"
31
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.4.3
@@ -11,8 +11,14 @@ module Mixlib
11
11
  @empty = empty
12
12
 
13
13
  archive = File.expand_path(archive)
14
- # for now we only support Tar format archives.
15
- @archiver = Mixlib::Archive::Tar.new(archive)
14
+ begin
15
+ # we prefer to use libarchive, which supports a great big pile o' stuff
16
+ require "mixlib/archive/lib_archive"
17
+ @archiver = Mixlib::Archive::LibArchive.new(archive)
18
+ rescue LoadError
19
+ # but if we can't use that, we'll fall back to ruby's native tar implementation
20
+ @archiver = Mixlib::Archive::Tar.new(archive)
21
+ end
16
22
  end
17
23
 
18
24
  class Log
@@ -0,0 +1,63 @@
1
+ require "ffi-libarchive"
2
+
3
+ module Mixlib
4
+ class Archive
5
+ class LibArchive
6
+ attr_reader :options
7
+ attr_reader :archive
8
+
9
+ def initialize(archive, options = {})
10
+ @archive = archive
11
+ @options = options
12
+ end
13
+
14
+ # Extracts the archive to the given +destination+
15
+ #
16
+ # === Parameters
17
+ # perms<Boolean>:: should the extracter use permissions from the archive.
18
+ # ignore[Array]:: an array of matches of file paths to ignore
19
+ def extract(destination, perms: true, ignore: [])
20
+ ignore_re = Regexp.union(ignore)
21
+ flags = perms ? ::Archive::EXTRACT_PERM : nil
22
+ Dir.chdir(destination) do
23
+ reader = ::Archive::Reader.open_filename(@archive)
24
+
25
+ reader.each_entry do |entry|
26
+ if entry.pathname =~ ignore_re
27
+ Mixlib::Archive::Log.warn "ignoring entry #{entry.pathname}"
28
+ next
29
+ end
30
+
31
+ reader.extract(entry, flags.to_i)
32
+ end
33
+ reader.close
34
+ end
35
+ end
36
+
37
+ # Creates an archive with the given set of +files+
38
+ #
39
+ # === Parameters
40
+ # gzip<Boolean>:: should the archive be gzipped?
41
+ def create(files, gzip: false)
42
+ compression = gzip ? ::Archive::COMPRESSION_GZIP : ::Archive::COMPRESSION_NONE
43
+ # "PAX restricted" will use PAX extensions when it has to, but will otherwise
44
+ # use ustar for maximum compatibility
45
+ format = ::Archive::FORMAT_TAR_PAX_RESTRICTED
46
+
47
+ ::Archive.write_open_filename(archive, compression, format) do |tar|
48
+ files.each do |fn|
49
+ tar.new_entry do |entry|
50
+ entry.pathname = fn
51
+ entry.copy_stat(fn)
52
+ tar.write_header(entry)
53
+ if File.file?(fn)
54
+ content = File.read(fn)
55
+ tar.write_data(content)
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -119,11 +119,11 @@ module Mixlib
119
119
  ensure
120
120
  if file
121
121
  file.close unless file.closed?
122
- file = nil
122
+ file = nil # rubocop:disable Lint/UselessAssignment
123
123
  end
124
124
  if raw
125
125
  raw.close unless raw.closed?
126
- raw = nil
126
+ raw = nil # rubocop:disable Lint/UselessAssignment
127
127
  end
128
128
  end
129
129
 
@@ -1,5 +1,5 @@
1
1
  module Mixlib
2
2
  class Archive
3
- VERSION = "0.4.1"
3
+ VERSION = "0.4.2"
4
4
  end
5
5
  end
@@ -17,8 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
18
  spec.require_paths = ["lib"]
19
19
 
20
- spec.add_development_dependency "bundler", "~> 1.11"
21
- spec.add_development_dependency "rake", "~> 11.0"
20
+ spec.add_development_dependency "rake", "~> 12"
22
21
  spec.add_development_dependency "rspec", "~> 3.0"
23
22
  spec.add_development_dependency "chefstyle"
24
23
  spec.add_dependency "mixlib-log"
metadata CHANGED
@@ -1,43 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mixlib-archive
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
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: 2017-02-02 00:00:00.000000000 Z
11
+ date: 2018-04-25 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.11'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.11'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: rake
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - "~>"
32
18
  - !ruby/object:Gem::Version
33
- version: '11.0'
19
+ version: '12'
34
20
  type: :development
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
24
  - - "~>"
39
25
  - !ruby/object:Gem::Version
40
- version: '11.0'
26
+ version: '12'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rspec
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -87,6 +73,8 @@ executables: []
87
73
  extensions: []
88
74
  extra_rdoc_files: []
89
75
  files:
76
+ - ".expeditor/config.yml"
77
+ - ".expeditor/update_version.sh"
90
78
  - ".gitignore"
91
79
  - ".rspec"
92
80
  - ".travis.yml"
@@ -95,7 +83,9 @@ files:
95
83
  - LICENSE
96
84
  - README.md
97
85
  - Rakefile
86
+ - VERSION
98
87
  - lib/mixlib/archive.rb
88
+ - lib/mixlib/archive/lib_archive.rb
99
89
  - lib/mixlib/archive/tar.rb
100
90
  - lib/mixlib/archive/version.rb
101
91
  - mixlib-archive.gemspec
@@ -119,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
109
  version: '0'
120
110
  requirements: []
121
111
  rubyforge_project:
122
- rubygems_version: 2.5.1
112
+ rubygems_version: 2.7.6
123
113
  signing_key:
124
114
  specification_version: 4
125
115
  summary: A simple interface to various archive formats