minitar 0.12.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 64cb6019b1b62131244aee4503ca406f0828182eaadef04f12e54fa0f757b480
4
- data.tar.gz: 58f1522ba94f6299d9b70fba3a2cacffe2da2080a42e7fa0a2d3a37a050e4bd9
3
+ metadata.gz: 0f9377a70924a7e6954296abbfea87d0df96fbbe3ddcef584432d841dd1f0f74
4
+ data.tar.gz: 9b81684df72a10837ccbd1656bcf0949093f6655f6407167e642c2deffa70528
5
5
  SHA512:
6
- metadata.gz: 6500363b15feec90fdec5c5da4ef39ef01be47080678dbc8e557a19bfa54baf3e66803b223093bd5bfe43f783e797c9f7770543b16812284bdc1798c74d04347
7
- data.tar.gz: 8a064c89a64f9e7f4b6d054f5b257dbecdcb8d5d248bec32ce28d5d00bd27b1cdfb7fce6f2354b406c63300b6ee92535d9ff8b47406318ce06249463543d342c
6
+ metadata.gz: 5affea92e847be657d518f28b82963c8117d7a0b099ced14ee70f789218b05cf74136ca7449e1df7afbf64d7da8cc43e8bdbe9aa3d88cb3aec2f703a51643778
7
+ data.tar.gz: cbba7e39c5ef44151046c4cecf3c07b39c1c5140a35311bd71a62305e945c3810cf24443cc23fa9880c7f58549cec63b963d89017f112bf297ca02be4fc1d5a0
data/Code-of-Conduct.md CHANGED
@@ -2,73 +2,127 @@
2
2
 
3
3
  ## Our Pledge
4
4
 
5
- In the interest of fostering an open and welcoming environment, we as
6
- contributors and maintainers pledge to making participation in our project and
7
- our community a harassment-free experience for everyone, regardless of age, body
8
- size, disability, ethnicity, gender identity and expression, level of experience,
9
- nationality, personal appearance, race, religion, or sexual identity and
10
- orientation.
5
+ We as members, contributors, and leaders pledge to make participation in our
6
+ community a harassment-free experience for everyone, regardless of age, body
7
+ size, visible or invisible disability, ethnicity, sex characteristics, gender
8
+ identity and expression, level of experience, education, socio-economic status,
9
+ nationality, personal appearance, race, caste, color, religion, or sexual
10
+ identity and orientation.
11
11
 
12
- ## Our Standards
13
-
14
- Examples of behavior that contributes to creating a positive environment
15
- include:
16
-
17
- * Using welcoming and inclusive language
18
- * Being respectful of differing viewpoints and experiences
19
- * Gracefully accepting constructive criticism
20
- * Focusing on what is best for the community
21
- * Showing empathy towards other community members
12
+ We pledge to act and interact in ways that contribute to an open, welcoming,
13
+ diverse, inclusive, and healthy community.
22
14
 
23
- Examples of unacceptable behavior by participants include:
15
+ ## Our Standards
24
16
 
25
- * The use of sexualized language or imagery and unwelcome sexual attention or
26
- advances
27
- * Trolling, insulting/derogatory comments, and personal or political attacks
28
- * Public or private harassment
29
- * Publishing others' private information, such as a physical or electronic
30
- address, without explicit permission
31
- * Other conduct which could reasonably be considered inappropriate in a
17
+ Examples of behavior that contributes to a positive environment for our
18
+ community include:
19
+
20
+ - Demonstrating empathy and kindness toward other people
21
+ - Being respectful of differing opinions, viewpoints, and experiences
22
+ - Giving and gracefully accepting constructive feedback
23
+ - Accepting responsibility and apologizing to those affected by our mistakes,
24
+ and learning from the experience
25
+ - Focusing on what is best not just for us as individuals, but for the overall
26
+ community
27
+
28
+ Examples of unacceptable behavior include:
29
+
30
+ - The use of sexualized language or imagery, and sexual attention or advances of
31
+ any kind
32
+ - Trolling, insulting or derogatory comments, and personal or political attacks
33
+ - Public or private harassment
34
+ - Publishing others' private information, such as a physical or email address,
35
+ without their explicit permission
36
+ - Other conduct which could reasonably be considered inappropriate in a
32
37
  professional setting
33
38
 
34
- ## Our Responsibilities
39
+ ## Enforcement Responsibilities
35
40
 
36
- Project maintainers are responsible for clarifying the standards of acceptable
37
- behavior and are expected to take appropriate and fair corrective action in
38
- response to any instances of unacceptable behavior.
41
+ Community leaders are responsible for clarifying and enforcing our standards of
42
+ acceptable behavior and will take appropriate and fair corrective action in
43
+ response to any behavior that they deem inappropriate, threatening, offensive,
44
+ or harmful.
39
45
 
40
- Project maintainers have the right and responsibility to remove, edit, or
41
- reject comments, commits, code, wiki edits, issues, and other contributions
42
- that are not aligned to this Code of Conduct, or to ban temporarily or
43
- permanently any contributor for other behaviors that they deem inappropriate,
44
- threatening, offensive, or harmful.
46
+ Community leaders have the right and responsibility to remove, edit, or reject
47
+ comments, commits, code, wiki edits, issues, and other contributions that are
48
+ not aligned to this Code of Conduct, and will communicate reasons for moderation
49
+ decisions when appropriate.
45
50
 
46
51
  ## Scope
47
52
 
48
- This Code of Conduct applies both within project spaces and in public spaces
49
- when an individual is representing the project or its community. Examples of
50
- representing a project or community include using an official project e-mail
51
- address, posting via an official social media account, or acting as an appointed
52
- representative at an online or offline event. Representation of a project may be
53
- further defined and clarified by project maintainers.
53
+ This Code of Conduct applies within all community spaces, and also applies when
54
+ an individual is officially representing the community in public spaces.
55
+ Examples of representing our community include using an official email address,
56
+ posting via an official social media account, or acting as an appointed
57
+ representative at an online or offline event.
54
58
 
55
59
  ## Enforcement
56
60
 
57
61
  Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
- reported by contacting the project team at [INSERT EMAIL ADDRESS]. All
59
- complaints will be reviewed and investigated and will result in a response that
60
- is deemed necessary and appropriate to the circumstances. The project team is
61
- obligated to maintain confidentiality with regard to the reporter of an incident.
62
- Further details of specific enforcement policies may be posted separately.
62
+ reported to the community leaders responsible for enforcement at [INSERT CONTACT
63
+ METHOD]. All complaints will be reviewed and investigated promptly and fairly.
64
+
65
+ All community leaders are obligated to respect the privacy and security of the
66
+ reporter of any incident.
67
+
68
+ ## Enforcement Guidelines
69
+
70
+ Community leaders will follow these Community Impact Guidelines in determining
71
+ the consequences for any action they deem in violation of this Code of Conduct:
72
+
73
+ ### 1. Correction
74
+
75
+ **Community Impact**: Use of inappropriate language or other behavior deemed
76
+ unprofessional or unwelcome in the community.
77
+
78
+ **Consequence**: A private, written warning from community leaders, providing
79
+ clarity around the nature of the violation and an explanation of why the
80
+ behavior was inappropriate. A public apology may be requested.
63
81
 
64
- Project maintainers who do not follow or enforce the Code of Conduct in good
65
- faith may face temporary or permanent repercussions as determined by other
66
- members of the project's leadership.
82
+ ### 2. Warning
83
+
84
+ **Community Impact**: A violation through a single incident or series of
85
+ actions.
86
+
87
+ **Consequence**: A warning with consequences for continued behavior. No
88
+ interaction with the people involved, including unsolicited interaction with
89
+ those enforcing the Code of Conduct, for a specified period of time. This
90
+ includes avoiding interactions in community spaces as well as external channels
91
+ like social media. Violating these terms may lead to a temporary or permanent
92
+ ban.
93
+
94
+ ### 3. Temporary Ban
95
+
96
+ **Community Impact**: A serious violation of community standards, including
97
+ sustained inappropriate behavior.
98
+
99
+ **Consequence**: A temporary ban from any sort of interaction or public
100
+ communication with the community for a specified period of time. No public or
101
+ private interaction with the people involved, including unsolicited interaction
102
+ with those enforcing the Code of Conduct, is allowed during this period.
103
+ Violating these terms may lead to a permanent ban.
104
+
105
+ ### 4. Permanent Ban
106
+
107
+ **Community Impact**: Demonstrating a pattern of violation of community
108
+ standards, including sustained inappropriate behavior, harassment of an
109
+ individual, or aggression toward or disparagement of classes of individuals.
110
+
111
+ **Consequence**: A permanent ban from any sort of public interaction within the
112
+ community.
67
113
 
68
114
  ## Attribution
69
115
 
70
- This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
- available at [http://contributor-covenant.org/version/1/4][version]
116
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage],
117
+ version 2.1, available at
118
+ <https://www.contributor-covenant.org/version/2/1/code_of_conduct.html>.
119
+
120
+ Community Impact Guidelines were inspired by
121
+ [Mozilla's code of conduct enforcement ladder][Mozilla CoC].
122
+
123
+ For answers to common questions about this code of conduct, see the FAQ at
124
+ <https://www.contributor-covenant.org/faq>. Translations are available at
125
+ <https://www.contributor-covenant.org/translations>.
72
126
 
73
- [homepage]: http://contributor-covenant.org
74
- [version]: http://contributor-covenant.org/version/1/4/
127
+ [homepage]: https://www.contributor-covenant.org
128
+ [Mozilla CoC]: https://github.com/mozilla/diversity
data/History.md CHANGED
@@ -1,9 +1,18 @@
1
1
  # History
2
2
 
3
- ## 0.12.1 / 2024-08-21
3
+ ## 1.0.0 / 2024-08-07
4
4
 
5
- - Reverted @adbbb9b596 to restore compatibility with Ruby < 2.0. Resolves
6
- [#63][#63] reported by Robert Schulze.
5
+ - Breaking Changes:
6
+
7
+ - Minimum Ruby version is 3.1.
8
+
9
+ - The `Archive::Tar::Minitar` namespace has been completely removed and
10
+ `Minitar` is a class instead of a module.
11
+
12
+ - Enhancements:
13
+
14
+ - Added `Minitar.pack_as_file`, originally proposed by John Prince back in
15
+ 2011 [#7][#7].
7
16
 
8
17
  ## 0.12 / 2024-08-06
9
18
 
@@ -17,7 +26,7 @@
17
26
  - symlink support is complete. Merged as PR [#42][#42], rebased and built on top
18
27
  of PR [#12][#12] by fetep.
19
28
 
20
- - kymmt90 fixed a documentation error on Minitar.pack in PR [#43][#43].
29
+ - kymmt90 fixed a documentation error on `Minitar.pack` in PR [#43][#43].
21
30
 
22
31
  - This version is a soft-deprecation of all versions before Ruby 2.7, as they
23
32
  will no longer be tested in CI.
@@ -28,9 +37,9 @@
28
37
 
29
38
  ## 0.9 / 2019-09-04
30
39
 
31
- - jtappa added the ability to skip fsync with a new option to Minitar.unpack and
32
- Minitar::Input#extract_entry. Provide `:fsync => false` as the last parameter
33
- to enable. Merged from a modified version of PR [#37][#37].
40
+ - jtappa added the ability to skip fsync with a new option to `Minitar.unpack`
41
+ and `Minitar::Input#extract_entry`. Provide `:fsync => false` as the last
42
+ parameter to enable. Merged from a modified version of PR [#37][#37].
34
43
 
35
44
  ## 0.8 / 2019-01-05
36
45
 
@@ -50,10 +59,11 @@
50
59
  ## 0.7 / 2018-02-19
51
60
 
52
61
  - Fixed issue [#28][#28] with a modified version of PR [#29][#29] covering the
53
- security policy and position for Minitar. Thanks so much to ooooooo_q for the
54
- report and an initial patch. Additional information was added as [#30][#30].
62
+ security policy and position for `Minitar`. Thanks so much to ooooooo_q for
63
+ the report and an initial patch. Additional information was added as
64
+ [#30][#30].
55
65
 
56
- - dearblue contributed PR [#33][#33] providing a fix for Minitar::Reader when
66
+ - dearblue contributed PR [#33][#33] providing a fix for `Minitar::Reader` when
57
67
  the IO-like object does not have a `#pos` method.
58
68
 
59
69
  - Kevin McDermott contributed PR [#34][#34] so that an InvalidTarStream is
@@ -66,7 +76,7 @@
66
76
 
67
77
  - Addressed a potential DOS with negative size fields in tar headers
68
78
  ([#31][#31]). This has been handled in two ways: the size field in a tar
69
- header is interpreted as a strict octal value and the Minitar reader will
79
+ header is interpreted as a strict octal value and the `Minitar` reader will
70
80
  raise an InvalidTarStream if the size ends up being negative anyway.
71
81
 
72
82
  ## 0.6.1 / 2017-02-07
@@ -86,61 +96,62 @@
86
96
  command-line utility anyway. (Installing `archive-tar-minitar` will install
87
97
  both `minitar` and `minitar-cli`, at least until version 1.0.)
88
98
 
89
- - Minitar extraction before 0.6 traverses directories if the tarball includes
90
- a relative directory reference, as reported in [#16][#16] by @ecneladis.
91
- This has been disallowed entirely and will throw a SecureRelativePathError
92
- when found. Additionally, if the final destination of an entry is an
93
- already-existing symbolic link, the existing symbolic link will be removed
94
- and the file will be written correctly (on platforms that support symblic
95
- links).
99
+ - `Minitar` extraction before 0.6 traverses directories if the tarball
100
+ includes a relative directory reference, as reported in [#16][#16] by
101
+ @ecneladis. This has been disallowed entirely and will throw a
102
+ `SecureRelativePathError` when found. Additionally, if the final destination
103
+ of an entry is an already-existing symbolic link, the existing symbolic link
104
+ will be removed and the file will be written correctly (on platforms that
105
+ support symbolic links).
96
106
 
97
107
  - Enhancements:
98
108
 
99
109
  - Licence change. After speaking with Mauricio Fernández, we have changed the
100
110
  licensing of this library to Ruby and Simplified BSD and have dropped the
101
111
  GNU GPL license. This takes effect from the 0.6 release.
102
- - Printing a deprecation warning for including Archive::Tar to put Minitar in
103
- the top-level namespace.
104
- - Printing a deprecation warning for including Archive::Tar::Minitar into a
105
- class (Minitar will be a class for version 1.0).
106
- - Moved Archive::Tar::PosixHeader to Archive::Tar::Minitar::PosixHeader with a
107
- deprecation warning. Do not depend on Archive::Tar::Minitar::PosixHeader, as
108
- it will be moving to ::Minitar::PosixHeader in a future release.
109
- - Added an alias, ::Minitar, for Archive::Tar::Minitar, opted in with
112
+ - Printing a deprecation warning for including Archive::Tar to put `Minitar`
113
+ in the top-level namespace.
114
+ - Printing a deprecation warning for including `Archive::Tar::Minitar` into a
115
+ class (`Minitar` will be a class for version 1.0).
116
+ - Moved `Archive::Tar::PosixHeader` to `Archive::Tar::Minitar::PosixHeader`
117
+ with a deprecation warning. Do not depend on
118
+ `Archive::Tar::Minitar::PosixHeader`, as it will be moving to
119
+ `::Minitar::PosixHeader` in a future release.
120
+ - Added an alias, `::Minitar`, for `Archive::Tar::Minitar`, opted in with
110
121
  `require 'minitar'`. In future releases, this alias will be enabled by
111
- default, and the Archive::Tar namespace will be removed entirely for version
112
- 1.0.
113
- - Modified the handling of `mtime` in PosixHeader to do an integer conversion
114
- (#to_i) so that a Time object can be used instead of the integer value of
115
- the time object.
116
- - Writer::RestrictedStream was renamed to Writer::WriteOnlyStream for clarity.
117
- No alias or deprecation warning was provided for this as it is an internal
118
- implementation detail.
119
- - Writer::BoundedStream was renamed to Writer::BoundedWriteStream for clarity.
120
- A deprecation warning is provided on first use because a BoundedWriteStream
121
- may raise a BoundedWriteStream::FileOverflow exception.
122
- - Writer::BoundedWriteStream::FileOverflow has been renamed to
123
- Writer::WriteBoundaryOverflow and inherits from StandardError instead of
124
- RuntimeError. Note that for Ruby 2.0 or higher, an error will be raised when
125
- specifying Writer::BoundedWriteStream::FileOverflow because
126
- Writer::BoundedWriteStream has been declared a private constant.
127
- - Modified Writer#add_file_simple to accept the data for a file in
122
+ default, and the `Archive::Tar` namespace will be removed entirely for
123
+ version 1.0.
124
+ - Modified the handling of `mtime` in `PosixHeader` to do an integer
125
+ conversion (`#to_i`) so that a Time object can be used instead of the
126
+ integer value of the time object.
127
+ - `Writer::RestrictedStream` was renamed to `Writer::WriteOnlyStream` for
128
+ clarity. No alias or deprecation warning was provided for this as it is an
129
+ internal implementation detail.
130
+ - `Writer::BoundedStream` was renamed to `Writer::BoundedWriteStream` for
131
+ clarity. A deprecation warning is provided on first use because a
132
+ BoundedWriteStream may raise a `BoundedWriteStream::FileOverflow` exception.
133
+ - `Writer::BoundedWriteStream::FileOverflow` has been renamed to
134
+ `Writer::WriteBoundaryOverflow` and inherits from `StandardError` instead of
135
+ `RuntimeError`. Note that for Ruby 2.0 or higher, an error will be raised
136
+ when specifying `Writer::BoundedWriteStream::FileOverflow` because
137
+ `Writer::BoundedWriteStream` has been declared a private constant.
138
+ - Modified `Writer#add_file_simple` to accept the data for a file in
128
139
  `opts[:data]`. When `opts[:data]` is provided, a stream block must not be
129
140
  provided. Improved the documentation for this method.
130
- - Modified Writer#add_file to accept `opts[:data]` and transparently call
131
- Writer#add_file_simple in this case.
141
+ - Modified `Writer#add_file` to accept `opts[:data]` and transparently call
142
+ `Writer#add_file_simple` in this case.
132
143
  - Methods that require blocks are no longer required, so the
133
- Archive::Tar::Minitar::BlockRequired exception has been removed with a
144
+ `Archive::Tar::Minitar::BlockRequired` exception has been removed with a
134
145
  warning (this may not work on Ruby 1.8).
135
146
  - Dramatically reduced the number of strings created when creating a POSIX
136
147
  tarball header.
137
- - Added a helper, Input.each_entry that iterates over each entry in an opened
138
- entry object.
148
+ - Added a helper, `Input.each_entry` that iterates over each entry in an
149
+ opened entry object.
139
150
 
140
151
  - Bugs:
141
152
 
142
153
  - Fix [#2][#2] to handle IO streams that are not seekable, such as pipes,
143
- STDIN, or STDOUT.
154
+ `STDIN`, or `STDOUT`.
144
155
  - Fix [#3][#3] to make the test timezone resilient.
145
156
  - Fix [#4][#4] for supporting the reading of tar files with filenames in the
146
157
  GNU long filename extension format. Ported from @atoulme’s fork, originally
@@ -151,7 +162,7 @@
151
162
  splitting.
152
163
  - Fix [#14][#14] provided by @kzys should fix Windows detection issues.
153
164
  - Fix [#16][#16] as specified above.
154
- - Fix an issue where Minitar.pack would not include Unix hidden files when
165
+ - Fix an issue where `Minitar.pack` would not include Unix hidden files when
155
166
  creating a tarball.
156
167
 
157
168
  - Development:
@@ -178,6 +189,7 @@
178
189
  [#3]: https://github.com/halostatue/minitar/issues/3
179
190
  [#4]: https://github.com/halostatue/minitar/issues/4
180
191
  [#6]: https://github.com/halostatue/minitar/issues/6
192
+ [#7]: https://github.com/halostatue/minitar/issues/7
181
193
  [#12]: https://github.com/halostatue/minitar/pull/12
182
194
  [#13]: https://github.com/halostatue/minitar/issues/13
183
195
  [#14]: https://github.com/halostatue/minitar/issues/14
@@ -201,4 +213,3 @@
201
213
  [#45]: https://github.com/halostatue/minitar/issues/45
202
214
  [#46]: https://github.com/halostatue/minitar/issues/46
203
215
  [#47]: https://github.com/halostatue/minitar/pull/47
204
- [#63]: https://github.com/halostatue/minitar/issues/63
data/Licence.md CHANGED
@@ -3,8 +3,8 @@
3
3
  minitar is free software that may be redistributed and/or modified under the
4
4
  terms of Ruby’s licence or the Simplified BSD licence.
5
5
 
6
- * Copyright 2004–2017 Austin Ziegler.
7
- * Portions copyright 2004 Mauricio Julio Fernández Pradier.
6
+ - Copyright 2004–2024 Austin Ziegler.
7
+ - Portions copyright 2004 Mauricio Julio Fernández Pradier.
8
8
 
9
9
  ### Simplified BSD Licence
10
10
 
data/Manifest.txt CHANGED
@@ -7,17 +7,16 @@ README.rdoc
7
7
  Rakefile
8
8
  docs/bsdl.txt
9
9
  docs/ruby.txt
10
- lib/archive-tar-minitar.rb
11
- lib/archive/tar/minitar.rb
12
- lib/archive/tar/minitar/input.rb
13
- lib/archive/tar/minitar/output.rb
14
- lib/archive/tar/minitar/posix_header.rb
15
- lib/archive/tar/minitar/reader.rb
16
- lib/archive/tar/minitar/writer.rb
17
10
  lib/minitar.rb
18
- support/hoe/deprecated_gem.rb
11
+ lib/minitar/input.rb
12
+ lib/minitar/output.rb
13
+ lib/minitar/posix_header.rb
14
+ lib/minitar/reader.rb
15
+ lib/minitar/writer.rb
19
16
  test/minitest_helper.rb
20
17
  test/support/tar_test_helpers.rb
18
+ test/test_issue_46.rb
19
+ test/test_minitar.rb
21
20
  test/test_tar_header.rb
22
21
  test/test_tar_input.rb
23
22
  test/test_tar_output.rb
data/README.rdoc CHANGED
@@ -3,7 +3,7 @@
3
3
  home :: https://github.com/halostatue/minitar/
4
4
  code :: https://github.com/halostatue/minitar/
5
5
  bugs :: https://github.com/halostatue/minitar/issues
6
- rdoc :: http://rdoc.info/gems/minitar/
6
+ rdoc :: https://rdoc.info/gems/minitar/
7
7
  cli :: https://github.com/halostatue/minitar-cli
8
8
 
9
9
  == Description
data/Rakefile CHANGED
@@ -11,7 +11,6 @@ Hoe.plugin :gemspec2
11
11
  Hoe.plugin :git2
12
12
  Hoe.plugin :minitest
13
13
  Hoe.plugin :rubygems
14
- Hoe.plugin :deprecated_gem
15
14
  Hoe.plugin :cov
16
15
 
17
16
  Hoe.spec "minitar" do
@@ -20,41 +19,10 @@ Hoe.spec "minitar" do
20
19
  self.history_file = "History.md"
21
20
  self.readme_file = "README.rdoc"
22
21
 
23
- require_ruby_version ">= 1.8"
24
-
25
- # This is a hack because of an issue with Hoe 3.26, but I'm not sure which
26
- # hoe version introduced this issue or if it's a JRuby issue. This issue is
27
- # demonstrable in lib/hoe.rb at line 676, which is (reformatted for space):
28
- #
29
- # ```ruby
30
- # readme =
31
- # input
32
- # .lines
33
- # .chunk { |l| l[/^(?:=+|#+)/] || "" } # # chunk is different somehow
34
- # .map(&:last) # <-- HERE: "#" does not respond to #last
35
- # .each_slice(2)
36
- # .map { |k, v|
37
- # kp = k.join
38
- # kp = kp.strip.chomp(":").split.last.downcase if k.size == 1
39
- # [kp, v.join.strip]
40
- # }
41
- # .to_h
42
- # ```
43
- #
44
- # We don't *ship* with JRuby, but use it in CI only, so this is here at least
45
- # temporarily.
46
- if RUBY_PLATFORM.match?(/java/)
47
- self.summary = self.description = "Description for testing"
48
- self.homepage = "https://github.com/KineticCafe/app-identity/tree/main/ruby/"
49
- end
22
+ require_ruby_version ">= 3.1"
50
23
 
51
24
  self.licenses = ["Ruby", "BSD-2-Clause"]
52
25
 
53
- self.post_install_message = <<-EOS
54
- The `minitar` executable is no longer bundled with `minitar`. If you are
55
- expecting this executable, make sure you also install `minitar-cli`.
56
- EOS
57
-
58
26
  spec_extras[:metadata] = ->(val) { val["rubygems_mfa_required"] = "true" }
59
27
 
60
28
  extra_dev_deps << ["base64", "~> 0.2"]
@@ -69,4 +37,6 @@ expecting this executable, make sure you also install `minitar-cli`.
69
37
  extra_dev_deps << ["rake", ">= 10.0", "< 14"]
70
38
  extra_dev_deps << ["rdoc", ">= 0.0"]
71
39
  extra_dev_deps << ["standard", "~> 1.0"]
40
+ extra_dev_deps << ["standard-minitest", "~> 1.0"]
41
+ extra_dev_deps << ["standard-thread_safety", "~> 1.0"]
72
42
  end
@@ -1,9 +1,7 @@
1
- # coding: utf-8
1
+ require "minitar/reader"
2
2
 
3
- require "archive/tar/minitar/reader"
4
-
5
- module Archive::Tar::Minitar
6
- # Wraps a Archive::Tar::Minitar::Reader with convenience methods and wrapped
3
+ class Minitar
4
+ # Wraps a Minitar::Reader with convenience methods and wrapped
7
5
  # stream management; Input only works with data streams that can be rewound.
8
6
  class Input
9
7
  include Enumerable
@@ -15,8 +13,8 @@ module Archive::Tar::Minitar
15
13
  # instance, +Input.open+ returns the value of the block.
16
14
  #
17
15
  # call-seq:
18
- # Archive::Tar::Minitar::Input.open(io) -> input
19
- # Archive::Tar::Minitar::Input.open(io) { |input| block } -> obj
16
+ # Minitar::Input.open(io) -> input
17
+ # Minitar::Input.open(io) { |input| block } -> obj
20
18
  def self.open(input)
21
19
  stream = new(input)
22
20
 
@@ -36,7 +34,7 @@ module Archive::Tar::Minitar
36
34
  # Iterates over each entry in the provided input. This wraps the common
37
35
  # pattern of:
38
36
  #
39
- # Archive::Tar::Minitar::Input.open(io) do |i|
37
+ # Minitar::Input.open(io) do |i|
40
38
  # inp.each do |entry|
41
39
  # # ...
42
40
  # end
@@ -46,8 +44,8 @@ module Archive::Tar::Minitar
46
44
  # behaviour.
47
45
  #
48
46
  # call-seq:
49
- # Archive::Tar::Minitar::Input.each_entry(io) -> enumerator
50
- # Archive::Tar::Minitar::Input.each_entry(io) { |entry| block } -> obj
47
+ # Minitar::Input.each_entry(io) -> enumerator
48
+ # Minitar::Input.each_entry(io) { |entry| block } -> obj
51
49
  def self.each_entry(input)
52
50
  return to_enum(__method__, input) unless block_given?
53
51
 
@@ -67,8 +65,8 @@ module Archive::Tar::Minitar
67
65
  # support rewinding.
68
66
  #
69
67
  # call-seq:
70
- # Archive::Tar::Minitar::Input.new(io) -> input
71
- # Archive::Tar::Minitar::Input.new(path) -> input
68
+ # Minitar::Input.new(io) -> input
69
+ # Minitar::Input.new(path) -> input
72
70
  def initialize(input)
73
71
  @io = if input.respond_to?(:read)
74
72
  input
@@ -76,8 +74,8 @@ module Archive::Tar::Minitar
76
74
  ::Kernel.open(input, "rb")
77
75
  end
78
76
 
79
- unless Archive::Tar::Minitar.seekable?(@io, :rewind)
80
- raise Archive::Tar::Minitar::NonSeekableStream
77
+ unless Minitar.seekable?(@io, :rewind)
78
+ raise Minitar::NonSeekableStream
81
79
  end
82
80
 
83
81
  @tar = Reader.new(@io)
@@ -117,11 +115,11 @@ module Archive::Tar::Minitar
117
115
  # cycle.
118
116
  # <tt>:entry</tt>:: The entry being extracted; this is a
119
117
  # Reader::EntryStream, with all methods thereof.
120
- def extract_entry(destdir, entry, options = {}, &block) # :yields action, name, stats:
118
+ def extract_entry(destdir, entry, options = {}, &) # :yields action, name, stats:
121
119
  stats = {
122
- :current => 0,
123
- :currinc => 0,
124
- :entry => entry
120
+ current: 0,
121
+ currinc: 0,
122
+ entry: entry
125
123
  }
126
124
 
127
125
  # extract_entry is not vulnerable to prefix '/' vulnerabilities, but it
@@ -135,14 +133,14 @@ module Archive::Tar::Minitar
135
133
  # However, squeeze consecutive '/' characters together.
136
134
  full_name = entry.full_name.squeeze("/")
137
135
 
138
- if full_name =~ /\.{2}(?:\/|\z)/
136
+ if /\.{2}(?:\/|\z)/.match?(full_name)
139
137
  raise SecureRelativePathError, "Path contains '..'"
140
138
  end
141
139
 
142
140
  if entry.directory?
143
- extract_directory(destdir, full_name, entry, stats, options, &block)
141
+ extract_directory(destdir, full_name, entry, stats, options, &)
144
142
  else # it's a file
145
- extract_file(destdir, full_name, entry, stats, options, &block)
143
+ extract_file(destdir, full_name, entry, stats, options, &)
146
144
  end
147
145
  end
148
146
 
@@ -169,7 +167,7 @@ module Archive::Tar::Minitar
169
167
  rescue # ignore IOError if it's an unpatched (old) Ruby
170
168
  nil
171
169
  ensure
172
- dir.close if dir rescue nil # rubocop:disable Style/RescueModifier
170
+ dir&.close rescue nil # standard:disable Style/RescueModifier
173
171
  end
174
172
 
175
173
  def extract_directory(destdir, full_name, entry, stats, options)
@@ -177,7 +175,7 @@ module Archive::Tar::Minitar
177
175
 
178
176
  yield :dir, full_name, stats if block_given?
179
177
 
180
- if Archive::Tar::Minitar.dir?(dest)
178
+ if Minitar.dir?(dest)
181
179
  begin
182
180
  FileUtils.chmod(entry.mode, dest)
183
181
  rescue
@@ -186,7 +184,7 @@ module Archive::Tar::Minitar
186
184
  else
187
185
  File.unlink(dest.chomp("/")) if File.symlink?(dest.chomp("/"))
188
186
 
189
- FileUtils.mkdir_p(dest, :mode => entry.mode)
187
+ FileUtils.mkdir_p(dest, mode: entry.mode)
190
188
  FileUtils.chmod(entry.mode, dest)
191
189
  end
192
190
 
@@ -198,16 +196,14 @@ module Archive::Tar::Minitar
198
196
 
199
197
  def extract_file(destdir, full_name, entry, stats, options)
200
198
  destdir = File.join(destdir, File.dirname(full_name))
201
- FileUtils.mkdir_p(destdir, :mode => 0o755)
199
+ FileUtils.mkdir_p(destdir, mode: 0o755)
202
200
 
203
201
  destfile = File.join(destdir, File.basename(full_name))
204
202
 
205
203
  File.unlink(destfile) if File.symlink?(destfile)
206
204
 
207
205
  # Errno::ENOENT
208
- # rubocop:disable Style/RescueModifier
209
- FileUtils.chmod(0o600, destfile) rescue nil
210
- # rubocop:enable Style/RescueModifier
206
+ FileUtils.chmod(0o600, destfile) rescue nil # standard:disable Style/RescueModifier
211
207
 
212
208
  yield :file_start, full_name, stats if block_given?
213
209