archive-tar-external 1.4.1 → 1.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/CHANGES.md +7 -0
- data/Gemfile +3 -0
- data/LICENSE +177 -0
- data/MANIFEST.md +4 -1
- data/README.md +7 -0
- data/Rakefile +6 -8
- data/archive-tar-external.gemspec +5 -5
- data/lib/archive-tar-external.rb +2 -0
- data/lib/archive/tar/external.rb +48 -63
- data/spec/archive_tar_external_spec.rb +231 -0
- data/spec/spec_helper.rb +7 -0
- metadata +25 -27
- metadata.gz.sig +0 -0
- data/test/test_archive_tar_external.rb +0 -209
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b20d6fa4e2827a0326f31b43997f3191a1c35ac268d5de485689bb0b0ab59c0
|
4
|
+
data.tar.gz: 4a4938677d58c08044547d5fb3bc7a71e669d1ffe11db0c1ba47cff35aecd70a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 703b000865ccddd8a1c54cbbebf47a4e2a6790964c1b9ef68663b5779dd286e8923b2dfe98d2b89a9161af457aadd588e1372a4ce9d49b7f7fa44110f094ec8e
|
7
|
+
data.tar.gz: 0f72ea731fd952a4474eb553a789a4a78a8d79a41f6ad6c597a2328f948981251295dab4abb6bdabeac9770a85aa1fab6466f174c311e7c330fd3391bcb73aaa
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
## 1.4.2 - 1-May-2021
|
2
|
+
* Switched from test-unit to rspec.
|
3
|
+
* Added tighter versioning for the development dependencies.
|
4
|
+
* Tests will now try to use gtar by default, if found.
|
5
|
+
* A fair number of rubocop suggestions were implemented, including
|
6
|
+
the frozen string literal pragma.
|
7
|
+
|
1
8
|
## 1.4.1 - 19-Feb-2021
|
2
9
|
* Switched from rdoc to markdown.
|
3
10
|
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
|
2
|
+
Apache License
|
3
|
+
Version 2.0, January 2004
|
4
|
+
http://www.apache.org/licenses/
|
5
|
+
|
6
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
7
|
+
|
8
|
+
1. Definitions.
|
9
|
+
|
10
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
11
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
12
|
+
|
13
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
14
|
+
the copyright owner that is granting the License.
|
15
|
+
|
16
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
17
|
+
other entities that control, are controlled by, or are under common
|
18
|
+
control with that entity. For the purposes of this definition,
|
19
|
+
"control" means (i) the power, direct or indirect, to cause the
|
20
|
+
direction or management of such entity, whether by contract or
|
21
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
22
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
23
|
+
|
24
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
25
|
+
exercising permissions granted by this License.
|
26
|
+
|
27
|
+
"Source" form shall mean the preferred form for making modifications,
|
28
|
+
including but not limited to software source code, documentation
|
29
|
+
source, and configuration files.
|
30
|
+
|
31
|
+
"Object" form shall mean any form resulting from mechanical
|
32
|
+
transformation or translation of a Source form, including but
|
33
|
+
not limited to compiled object code, generated documentation,
|
34
|
+
and conversions to other media types.
|
35
|
+
|
36
|
+
"Work" shall mean the work of authorship, whether in Source or
|
37
|
+
Object form, made available under the License, as indicated by a
|
38
|
+
copyright notice that is included in or attached to the work
|
39
|
+
(an example is provided in the Appendix below).
|
40
|
+
|
41
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
42
|
+
form, that is based on (or derived from) the Work and for which the
|
43
|
+
editorial revisions, annotations, elaborations, or other modifications
|
44
|
+
represent, as a whole, an original work of authorship. For the purposes
|
45
|
+
of this License, Derivative Works shall not include works that remain
|
46
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
47
|
+
the Work and Derivative Works thereof.
|
48
|
+
|
49
|
+
"Contribution" shall mean any work of authorship, including
|
50
|
+
the original version of the Work and any modifications or additions
|
51
|
+
to that Work or Derivative Works thereof, that is intentionally
|
52
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
53
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
54
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
55
|
+
means any form of electronic, verbal, or written communication sent
|
56
|
+
to the Licensor or its representatives, including but not limited to
|
57
|
+
communication on electronic mailing lists, source code control systems,
|
58
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
59
|
+
Licensor for the purpose of discussing and improving the Work, but
|
60
|
+
excluding communication that is conspicuously marked or otherwise
|
61
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
62
|
+
|
63
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
64
|
+
on behalf of whom a Contribution has been received by Licensor and
|
65
|
+
subsequently incorporated within the Work.
|
66
|
+
|
67
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
68
|
+
this License, each Contributor hereby grants to You a perpetual,
|
69
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
70
|
+
copyright license to reproduce, prepare Derivative Works of,
|
71
|
+
publicly display, publicly perform, sublicense, and distribute the
|
72
|
+
Work and such Derivative Works in Source or Object form.
|
73
|
+
|
74
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
75
|
+
this License, each Contributor hereby grants to You a perpetual,
|
76
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
77
|
+
(except as stated in this section) patent license to make, have made,
|
78
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
79
|
+
where such license applies only to those patent claims licensable
|
80
|
+
by such Contributor that are necessarily infringed by their
|
81
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
82
|
+
with the Work to which such Contribution(s) was submitted. If You
|
83
|
+
institute patent litigation against any entity (including a
|
84
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
85
|
+
or a Contribution incorporated within the Work constitutes direct
|
86
|
+
or contributory patent infringement, then any patent licenses
|
87
|
+
granted to You under this License for that Work shall terminate
|
88
|
+
as of the date such litigation is filed.
|
89
|
+
|
90
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
91
|
+
Work or Derivative Works thereof in any medium, with or without
|
92
|
+
modifications, and in Source or Object form, provided that You
|
93
|
+
meet the following conditions:
|
94
|
+
|
95
|
+
(a) You must give any other recipients of the Work or
|
96
|
+
Derivative Works a copy of this License; and
|
97
|
+
|
98
|
+
(b) You must cause any modified files to carry prominent notices
|
99
|
+
stating that You changed the files; and
|
100
|
+
|
101
|
+
(c) You must retain, in the Source form of any Derivative Works
|
102
|
+
that You distribute, all copyright, patent, trademark, and
|
103
|
+
attribution notices from the Source form of the Work,
|
104
|
+
excluding those notices that do not pertain to any part of
|
105
|
+
the Derivative Works; and
|
106
|
+
|
107
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
108
|
+
distribution, then any Derivative Works that You distribute must
|
109
|
+
include a readable copy of the attribution notices contained
|
110
|
+
within such NOTICE file, excluding those notices that do not
|
111
|
+
pertain to any part of the Derivative Works, in at least one
|
112
|
+
of the following places: within a NOTICE text file distributed
|
113
|
+
as part of the Derivative Works; within the Source form or
|
114
|
+
documentation, if provided along with the Derivative Works; or,
|
115
|
+
within a display generated by the Derivative Works, if and
|
116
|
+
wherever such third-party notices normally appear. The contents
|
117
|
+
of the NOTICE file are for informational purposes only and
|
118
|
+
do not modify the License. You may add Your own attribution
|
119
|
+
notices within Derivative Works that You distribute, alongside
|
120
|
+
or as an addendum to the NOTICE text from the Work, provided
|
121
|
+
that such additional attribution notices cannot be construed
|
122
|
+
as modifying the License.
|
123
|
+
|
124
|
+
You may add Your own copyright statement to Your modifications and
|
125
|
+
may provide additional or different license terms and conditions
|
126
|
+
for use, reproduction, or distribution of Your modifications, or
|
127
|
+
for any such Derivative Works as a whole, provided Your use,
|
128
|
+
reproduction, and distribution of the Work otherwise complies with
|
129
|
+
the conditions stated in this License.
|
130
|
+
|
131
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
132
|
+
any Contribution intentionally submitted for inclusion in the Work
|
133
|
+
by You to the Licensor shall be under the terms and conditions of
|
134
|
+
this License, without any additional terms or conditions.
|
135
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
136
|
+
the terms of any separate license agreement you may have executed
|
137
|
+
with Licensor regarding such Contributions.
|
138
|
+
|
139
|
+
6. Trademarks. This License does not grant permission to use the trade
|
140
|
+
names, trademarks, service marks, or product names of the Licensor,
|
141
|
+
except as required for reasonable and customary use in describing the
|
142
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
143
|
+
|
144
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
145
|
+
agreed to in writing, Licensor provides the Work (and each
|
146
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
147
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
148
|
+
implied, including, without limitation, any warranties or conditions
|
149
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
150
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
151
|
+
appropriateness of using or redistributing the Work and assume any
|
152
|
+
risks associated with Your exercise of permissions under this License.
|
153
|
+
|
154
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
155
|
+
whether in tort (including negligence), contract, or otherwise,
|
156
|
+
unless required by applicable law (such as deliberate and grossly
|
157
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
158
|
+
liable to You for damages, including any direct, indirect, special,
|
159
|
+
incidental, or consequential damages of any character arising as a
|
160
|
+
result of this License or out of the use or inability to use the
|
161
|
+
Work (including but not limited to damages for loss of goodwill,
|
162
|
+
work stoppage, computer failure or malfunction, or any and all
|
163
|
+
other commercial damages or losses), even if such Contributor
|
164
|
+
has been advised of the possibility of such damages.
|
165
|
+
|
166
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
167
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
168
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
169
|
+
or other liability obligations and/or rights consistent with this
|
170
|
+
License. However, in accepting such obligations, You may act only
|
171
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
172
|
+
of any other Contributor, and only if You agree to indemnify,
|
173
|
+
defend, and hold each Contributor harmless for any liability
|
174
|
+
incurred by, or claims asserted against, such Contributor by reason
|
175
|
+
of your accepting any such warranty or additional liability.
|
176
|
+
|
177
|
+
END OF TERMS AND CONDITIONS
|
data/MANIFEST.md
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
* CHANGES.md
|
2
|
+
* LICENSE
|
2
3
|
* MANIFEST.md
|
3
4
|
* README.md
|
5
|
+
* Gemfile
|
4
6
|
* Rakefile
|
5
7
|
* archive-tar-external.gemspec
|
6
8
|
* certs/djberg96_pub.pem
|
7
9
|
* doc/tar_external.md
|
8
10
|
* lib/archive-tar-external.rb
|
9
11
|
* lib/archive/tar_external.rb
|
10
|
-
*
|
12
|
+
* spec/archive_tar_external_spec.rb
|
13
|
+
* spec/spec_helper.rb
|
data/README.md
CHANGED
@@ -22,9 +22,16 @@ t = Archive::Tar::External.new('test.tar', '*.rb', 'gzip')
|
|
22
22
|
* At least one compression program, e.g. gzip, bzip2, zip, etc.
|
23
23
|
|
24
24
|
## Known Issues
|
25
|
+
|
26
|
+
### Solaris
|
25
27
|
The tar program that comes with Solaris will not raise an error if you
|
26
28
|
try to expand a file from an archive that does not contain that file.
|
27
29
|
|
30
|
+
### OSX
|
31
|
+
It appears that the BSD tar that ships on Mac does not implement the -u
|
32
|
+
option properly, and will add a file to the archive even if the timestamp
|
33
|
+
of the file hasn't changed.
|
34
|
+
|
28
35
|
If you come across any other issues, please report them on the project
|
29
36
|
page at https://github.com/djberg96/archive-tar-external.
|
30
37
|
|
data/Rakefile
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require 'rake/clean'
|
3
|
-
require '
|
3
|
+
require 'rspec/core/rake_task'
|
4
4
|
|
5
|
-
CLEAN.include("**/*.gem", "**/*.rbc")
|
5
|
+
CLEAN.include("**/*.gem", "**/*.rbc", "**/*.lock")
|
6
6
|
|
7
7
|
namespace :gem do
|
8
8
|
desc 'Build the archive-tar-external gem'
|
@@ -10,7 +10,7 @@ namespace :gem do
|
|
10
10
|
require 'rubygems/package'
|
11
11
|
spec = eval(IO.read('archive-tar-external.gemspec'))
|
12
12
|
spec.signing_key = File.join(Dir.home, '.ssh', 'gem-private_key.pem')
|
13
|
-
Gem::Package.build(spec
|
13
|
+
Gem::Package.build(spec)
|
14
14
|
end
|
15
15
|
|
16
16
|
desc 'Install the archive-tar-external library as a gem'
|
@@ -20,9 +20,7 @@ namespace :gem do
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
t.verbose = true
|
26
|
-
end
|
23
|
+
desc "Run the test suite"
|
24
|
+
RSpec::Core::RakeTask.new(:spec)
|
27
25
|
|
28
|
-
task :default => :
|
26
|
+
task :default => :spec
|
@@ -3,28 +3,28 @@ require 'rbconfig'
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |spec|
|
5
5
|
spec.name = 'archive-tar-external'
|
6
|
-
spec.version = '1.4.
|
6
|
+
spec.version = '1.4.2'
|
7
7
|
spec.summary = 'A simple way to create tar archives using external calls'
|
8
8
|
spec.license = 'Apache-2.0'
|
9
9
|
spec.author = 'Daniel Berger'
|
10
10
|
spec.email = 'djberg96@gmail.com'
|
11
11
|
spec.homepage = 'http://github.com/djberg96/archive-tar-external'
|
12
|
-
spec.
|
12
|
+
spec.test_files = Dir['spec/*.rb']
|
13
13
|
spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
|
14
14
|
spec.cert_chain = Dir['certs/*']
|
15
15
|
|
16
16
|
spec.metadata = {
|
17
17
|
'homepage_uri' => 'https://github.com/djberg96/archive-tar-external',
|
18
18
|
'bug_tracker_uri' => 'https://github.com/djberg96/archive-tar-external/issues',
|
19
|
-
'changelog_uri' => 'https://github.com/djberg96/archive-tar-external/blob/
|
19
|
+
'changelog_uri' => 'https://github.com/djberg96/archive-tar-external/blob/main/CHANGES',
|
20
20
|
'documentation_uri' => 'https://github.com/djberg96/archive-tar-external/wiki',
|
21
21
|
'source_code_uri' => 'https://github.com/djberg96/archive-tar-external',
|
22
22
|
'wiki_uri' => 'https://github.com/djberg96/archive-tar-external/wiki'
|
23
23
|
}
|
24
24
|
|
25
|
-
spec.add_development_dependency('test-unit')
|
26
|
-
spec.add_development_dependency('ptools')
|
27
25
|
spec.add_development_dependency('rake')
|
26
|
+
spec.add_development_dependency('rspec', '~> 3.9')
|
27
|
+
spec.add_development_dependency('ptools', '~> 1.4')
|
28
28
|
|
29
29
|
spec.description = <<-EOF
|
30
30
|
The archive-tar-external is a simple wrapper interface for creating
|
data/lib/archive-tar-external.rb
CHANGED
data/lib/archive/tar/external.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'open3'
|
2
4
|
|
3
5
|
# The Archive module serves as a namespace only.
|
4
6
|
module Archive
|
5
|
-
|
6
7
|
# The Tar class serves as a toplevel class namespace only.
|
7
8
|
class Tar
|
8
|
-
|
9
9
|
# Raised if something goes wrong during the execution of any methods
|
10
10
|
# which use the tar command internally.
|
11
11
|
class Error < StandardError; end
|
@@ -17,7 +17,7 @@ module Archive
|
|
17
17
|
# This class encapsulates tar & zip operations.
|
18
18
|
class Tar::External
|
19
19
|
# The version of the archive-tar-external library.
|
20
|
-
VERSION = '1.4.
|
20
|
+
VERSION = '1.4.2'
|
21
21
|
|
22
22
|
# The name of the archive file to be used, e.g. "test.tar"
|
23
23
|
attr_accessor :archive_name
|
@@ -39,18 +39,13 @@ module Archive
|
|
39
39
|
# If +program+ is provided, then it compresses the archive as well by
|
40
40
|
# calling Archive::Tar::External#compress_archive internally.
|
41
41
|
#
|
42
|
-
def initialize(archive_name, file_pattern=nil, program=nil)
|
42
|
+
def initialize(archive_name, file_pattern = nil, program = nil)
|
43
43
|
@archive_name = archive_name.to_s
|
44
44
|
@compressed_archive_name = nil
|
45
45
|
@tar_program = 'tar'
|
46
46
|
|
47
|
-
if file_pattern
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
if program
|
52
|
-
compress_archive(program)
|
53
|
-
end
|
47
|
+
create_archive(file_pattern) if file_pattern
|
48
|
+
compress_archive(program) if program
|
54
49
|
end
|
55
50
|
|
56
51
|
# Assign a compressed archive name. This autogenerates the archive_name
|
@@ -62,9 +57,9 @@ module Archive
|
|
62
57
|
# that you want to uncompress, and want to have a Tar::External object
|
63
58
|
# around. Otherwise, use the class method Tar::External.uncompress.
|
64
59
|
#
|
65
|
-
def compressed_archive_name=(name, ext=File.extname(name))
|
60
|
+
def compressed_archive_name=(name, ext = File.extname(name))
|
66
61
|
if ext.downcase == '.tgz'
|
67
|
-
@archive_name = File.basename(name, ext.downcase)
|
62
|
+
@archive_name = File.basename(name, ext.downcase) << '.tar'
|
68
63
|
else
|
69
64
|
@archive_name = File.basename(name, ext)
|
70
65
|
end
|
@@ -79,15 +74,15 @@ module Archive
|
|
79
74
|
def create_archive(file_pattern, options = 'cf')
|
80
75
|
cmd = "#{@tar_program} #{options} #{@archive_name} #{file_pattern}"
|
81
76
|
|
82
|
-
Open3.popen3(cmd)
|
77
|
+
Open3.popen3(cmd) do |_tar_in, _tar_out, tar_err|
|
83
78
|
err = tar_err.gets
|
84
79
|
raise Error, err.chomp if err
|
85
|
-
|
80
|
+
end
|
86
81
|
|
87
82
|
self
|
88
83
|
end
|
89
84
|
|
90
|
-
alias
|
85
|
+
alias create create_archive
|
91
86
|
|
92
87
|
# Compresses the archive with +program+, or gzip if no program is
|
93
88
|
# provided. If you want to pass arguments to +program+, merely include
|
@@ -95,10 +90,10 @@ module Archive
|
|
95
90
|
#
|
96
91
|
# Any errors that occur here will raise a Tar::CompressError.
|
97
92
|
#
|
98
|
-
def compress_archive(program='gzip')
|
93
|
+
def compress_archive(program = 'gzip')
|
99
94
|
cmd = "#{program} #{@archive_name}"
|
100
95
|
|
101
|
-
Open3.popen3(cmd)
|
96
|
+
Open3.popen3(cmd) do |_prog_in, _prog_out, prog_err|
|
102
97
|
err = prog_err.gets
|
103
98
|
raise CompressError, err.chomp if err
|
104
99
|
|
@@ -106,12 +101,12 @@ module Archive
|
|
106
101
|
# reliable way to do this, but this should work 99% of the time.
|
107
102
|
name = Dir["#{@archive_name}.{gz,bz2,cpio,zip}"].first
|
108
103
|
@compressed_archive_name = name
|
109
|
-
|
104
|
+
end
|
110
105
|
|
111
106
|
self
|
112
107
|
end
|
113
108
|
|
114
|
-
alias
|
109
|
+
alias compress compress_archive
|
115
110
|
|
116
111
|
# Uncompresses the tarball using the program you pass to this method. The
|
117
112
|
# default is "gunzip". Just as for +compress_archive+, you can pass
|
@@ -123,33 +118,31 @@ module Archive
|
|
123
118
|
#
|
124
119
|
# Any errors that occur here will raise a Tar::CompressError.
|
125
120
|
#
|
126
|
-
def uncompress_archive(program=
|
127
|
-
unless @compressed_archive_name
|
128
|
-
raise CompressError, "no compressed file found"
|
129
|
-
end
|
121
|
+
def uncompress_archive(program = 'gunzip')
|
122
|
+
raise CompressError, 'no compressed file found' unless @compressed_archive_name
|
130
123
|
|
131
124
|
cmd = "#{program} #{@compressed_archive_name}"
|
132
125
|
|
133
|
-
Open3.popen3(cmd)
|
126
|
+
Open3.popen3(cmd) do |_prog_in, _prog_out, prog_err|
|
134
127
|
err = prog_err.gets
|
135
128
|
raise CompressError, err.chomp if err
|
136
129
|
@compressed_archive_name = nil
|
137
|
-
|
130
|
+
end
|
138
131
|
self
|
139
132
|
end
|
140
133
|
|
141
|
-
alias
|
134
|
+
alias uncompress uncompress_archive
|
142
135
|
|
143
136
|
# Uncompress an existing archive, using +program+ to uncompress it.
|
144
137
|
# The default decompression program is gunzip.
|
145
138
|
#
|
146
|
-
def self.uncompress_archive(archive, program='gunzip')
|
139
|
+
def self.uncompress_archive(archive, program = 'gunzip')
|
147
140
|
cmd = "#{program} #{archive}"
|
148
141
|
|
149
|
-
Open3.popen3(cmd)
|
142
|
+
Open3.popen3(cmd) do |_prog_in, _prog_out, prog_err|
|
150
143
|
err = prog_err.gets
|
151
144
|
raise CompressError, err.chomp if err
|
152
|
-
|
145
|
+
end
|
153
146
|
end
|
154
147
|
|
155
148
|
class << self
|
@@ -162,56 +155,54 @@ module Archive
|
|
162
155
|
def archive_info
|
163
156
|
result = []
|
164
157
|
cmd = "#{@tar_program} tf #{@archive_name}"
|
165
|
-
|
158
|
+
|
159
|
+
Open3.popen3(cmd) do |_ain, aout, aerr|
|
166
160
|
err = aerr.gets
|
167
161
|
raise Error, err.chomp if err
|
168
162
|
|
169
|
-
while output = aout.gets
|
163
|
+
while (output = aout.gets)
|
170
164
|
result << output.chomp
|
171
165
|
end
|
172
|
-
|
166
|
+
end
|
167
|
+
|
173
168
|
result
|
174
169
|
end
|
175
170
|
|
176
|
-
alias
|
171
|
+
alias info archive_info
|
177
172
|
|
178
173
|
# Adds +files+ to an already existing archive.
|
179
174
|
#
|
180
175
|
def add_to_archive(*files)
|
181
|
-
if files.empty?
|
182
|
-
raise Error, "there must be at least one file specified"
|
183
|
-
end
|
176
|
+
raise Error, 'there must be at least one file specified' if files.empty?
|
184
177
|
|
185
|
-
cmd = "#{@tar_program} rf #{@archive_name} #{files.join(
|
178
|
+
cmd = "#{@tar_program} rf #{@archive_name} #{files.join(' ')}"
|
186
179
|
|
187
|
-
Open3.popen3(cmd)
|
180
|
+
Open3.popen3(cmd) do |_ain, _aout, aerr|
|
188
181
|
err = aerr.gets
|
189
182
|
raise Error, err.chomp if err
|
190
|
-
|
183
|
+
end
|
191
184
|
self
|
192
185
|
end
|
193
186
|
|
194
|
-
alias
|
187
|
+
alias add add_to_archive
|
195
188
|
|
196
189
|
# Updates the given +files+ in the archive, i.e. they are added if they
|
197
190
|
# are not already in the archive or have been modified.
|
198
191
|
#
|
199
192
|
def update_archive(*files)
|
200
|
-
if files.empty?
|
201
|
-
raise Error, "there must be at least one file specified"
|
202
|
-
end
|
193
|
+
raise Error, 'there must be at least one file specified' if files.empty?
|
203
194
|
|
204
|
-
cmd = "#{@tar_program} uf #{@archive_name} #{files.join(
|
195
|
+
cmd = "#{@tar_program} uf #{@archive_name} #{files.join(' ')}"
|
205
196
|
|
206
|
-
Open3.popen3(cmd)
|
197
|
+
Open3.popen3(cmd) do |_ain, _aout, aerr|
|
207
198
|
err = aerr.gets
|
208
199
|
raise Error, err.chomp if err
|
209
|
-
|
200
|
+
end
|
210
201
|
|
211
202
|
self
|
212
203
|
end
|
213
204
|
|
214
|
-
alias
|
205
|
+
alias update update_archive
|
215
206
|
|
216
207
|
# Expands the contents of the tarball. It does NOT delete the tarball.
|
217
208
|
# If +files+ are provided, then only those files are extracted.
|
@@ -223,22 +214,19 @@ module Archive
|
|
223
214
|
#
|
224
215
|
def extract_archive(*files)
|
225
216
|
cmd = "#{@tar_program} xf #{@archive_name}"
|
217
|
+
cmd = "#{cmd} #{files.join(' ')}" unless files.empty?
|
226
218
|
|
227
|
-
|
228
|
-
cmd << " " << files.join(" ")
|
229
|
-
end
|
230
|
-
|
231
|
-
Open3.popen3(cmd){ |ain, aout, aerr|
|
219
|
+
Open3.popen3(cmd) do |_ain, _aout, aerr|
|
232
220
|
err = aerr.gets
|
233
221
|
raise Error, err.chomp if err
|
234
|
-
|
222
|
+
end
|
235
223
|
|
236
224
|
self
|
237
225
|
end
|
238
226
|
|
239
|
-
alias
|
240
|
-
alias
|
241
|
-
alias
|
227
|
+
alias expand_archive extract_archive
|
228
|
+
alias extract extract_archive
|
229
|
+
alias expand extract_archive
|
242
230
|
|
243
231
|
# A class method that behaves identically to the equivalent instance
|
244
232
|
# method, except that you must specifiy that tarball as the first
|
@@ -246,15 +234,12 @@ module Archive
|
|
246
234
|
#
|
247
235
|
def self.extract_archive(archive, *files)
|
248
236
|
cmd = "tar xf #{archive}"
|
237
|
+
cmd = "#{cmd} #{files.join(' ')}" unless files.empty?
|
249
238
|
|
250
|
-
|
251
|
-
cmd << " " << files.join(" ")
|
252
|
-
end
|
253
|
-
|
254
|
-
Open3.popen3(cmd){ |ain, aout, aerr|
|
239
|
+
Open3.popen3(cmd) do |_ain, _aout, aerr|
|
255
240
|
err = aerr.gets
|
256
241
|
raise Error, err.chomp if err
|
257
|
-
|
242
|
+
end
|
258
243
|
|
259
244
|
self
|
260
245
|
end
|
@@ -0,0 +1,231 @@
|
|
1
|
+
###############################################################################
|
2
|
+
# archive_tar_external_spec.rb
|
3
|
+
#
|
4
|
+
# Tests for the archive-tar-external library. This test case should be
|
5
|
+
# run via the 'rake spec' Rake task.
|
6
|
+
###############################################################################
|
7
|
+
require 'archive/tar/external'
|
8
|
+
require 'spec_helper'
|
9
|
+
|
10
|
+
RSpec.describe Archive::Tar::External do
|
11
|
+
let(:tmp_file1) { 'temp1.txt' }
|
12
|
+
let(:tmp_file2) { 'temp2.txt' }
|
13
|
+
let(:tmp_file3) { 'temp3.txt' }
|
14
|
+
|
15
|
+
let(:tar_name) { 'test.tar' }
|
16
|
+
let(:tar_obj) { Archive::Tar::External.new(tar_name) }
|
17
|
+
let(:pattern) { '*.txt' }
|
18
|
+
let(:gtar) { File.basename(File.which('gtar')) }
|
19
|
+
|
20
|
+
let(:archive_name) { 'test.tar.gz' }
|
21
|
+
let(:tar_program) { gtar || 'tar' }
|
22
|
+
|
23
|
+
before do
|
24
|
+
tar_obj.tar_program = 'gtar' if File.which('gtar')
|
25
|
+
File.open(tmp_file1, 'w'){ |f| f.puts 'This is a temporary text file' }
|
26
|
+
File.open(tmp_file2, 'w'){ |f| f.puts 'This is a temporary text file' }
|
27
|
+
File.open(tmp_file3, 'w'){ |f| f.puts 'This is a temporary text file' }
|
28
|
+
end
|
29
|
+
|
30
|
+
example "version" do
|
31
|
+
expect(Archive::Tar::External::VERSION).to eq('1.4.2')
|
32
|
+
expect(Archive::Tar::External::VERSION).to be_frozen
|
33
|
+
end
|
34
|
+
|
35
|
+
context "constructor" do
|
36
|
+
example "with name" do
|
37
|
+
expect{ Archive::Tar::External.new(tar_name) }.not_to raise_error
|
38
|
+
end
|
39
|
+
|
40
|
+
example "with name and extension" do
|
41
|
+
expect{ Archive::Tar::External.new(tar_name, pattern) }.not_to raise_error
|
42
|
+
end
|
43
|
+
|
44
|
+
example "with compression program", :gzip => true do
|
45
|
+
expect{ Archive::Tar::External.new(tar_name, pattern, 'gzip') }.not_to raise_error
|
46
|
+
end
|
47
|
+
|
48
|
+
example "raises an error if name is not provided" do
|
49
|
+
expect{ Archive::Tar::External.new }.to raise_error(ArgumentError)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context "instance methods" do
|
54
|
+
example "tar_program getter" do
|
55
|
+
expect(tar_obj).to respond_to(:tar_program)
|
56
|
+
expect(tar_obj.tar_program).to eq(tar_program)
|
57
|
+
end
|
58
|
+
|
59
|
+
example "archive_name getter" do
|
60
|
+
expect(tar_obj).to respond_to(:archive_name)
|
61
|
+
expect(tar_obj.archive_name).to eq(tar_name)
|
62
|
+
end
|
63
|
+
|
64
|
+
example "archive_name setter" do
|
65
|
+
expect(tar_obj).to respond_to(:archive_name=)
|
66
|
+
expect{ tar_obj.archive_name = 'foo' }.not_to raise_error
|
67
|
+
expect(tar_obj.archive_name).to eq('foo')
|
68
|
+
end
|
69
|
+
|
70
|
+
example "compressed_archive_name getter" do
|
71
|
+
expect(tar_obj).to respond_to(:compressed_archive_name)
|
72
|
+
expect(tar_obj.compressed_archive_name).to be_nil
|
73
|
+
end
|
74
|
+
|
75
|
+
example "compressed_archive_name setter basic functionality" do
|
76
|
+
expect(tar_obj).to respond_to(:compressed_archive_name=)
|
77
|
+
expect{ tar_obj.compressed_archive_name = archive_name }.not_to raise_error
|
78
|
+
end
|
79
|
+
|
80
|
+
example "setting the compressed_archive_name also sets the archive name to the expected value" do
|
81
|
+
tar_obj.compressed_archive_name = archive_name
|
82
|
+
expect(tar_obj.compressed_archive_name).to eq(archive_name)
|
83
|
+
expect(tar_obj.archive_name).to eq(tar_name)
|
84
|
+
|
85
|
+
tar_obj.compressed_archive_name = 'test.tgz'
|
86
|
+
expect(tar_obj.compressed_archive_name).to eq('test.tgz')
|
87
|
+
expect(tar_obj.archive_name).to eq(tar_name)
|
88
|
+
end
|
89
|
+
|
90
|
+
example "create_archive basic functionality" do
|
91
|
+
expect(tar_obj).to respond_to(:create_archive)
|
92
|
+
expect{ tar_obj.create_archive(pattern) }.not_to raise_error
|
93
|
+
expect(File.exist?(tar_name)).to be true
|
94
|
+
end
|
95
|
+
|
96
|
+
example "create_archive requires at least on argument" do
|
97
|
+
expect{ tar_obj.create_archive }.to raise_error(ArgumentError)
|
98
|
+
end
|
99
|
+
|
100
|
+
example "create_archive raises an error if no files match the pattern" do
|
101
|
+
expect{ tar_obj.create_archive('*.blah') }.to raise_error(Archive::Tar::Error)
|
102
|
+
end
|
103
|
+
|
104
|
+
example "create_archive accepts optional parameters" do
|
105
|
+
expect{ tar_obj.create_archive(pattern, 'cfj') }.not_to raise_error
|
106
|
+
end
|
107
|
+
|
108
|
+
example "create is an alias for create_archive" do
|
109
|
+
expect(tar_obj).to respond_to(:create)
|
110
|
+
expect(tar_obj.method(:create)).to eq(tar_obj.method(:create_archive))
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
context "compression" do
|
115
|
+
example "compress_archive basic functionality" do
|
116
|
+
expect(tar_obj).to respond_to(:compress_archive)
|
117
|
+
end
|
118
|
+
|
119
|
+
example "compress is an alias for compress_archive" do
|
120
|
+
expect(tar_obj).to respond_to(:compress)
|
121
|
+
expect(tar_obj.method(:compress)).to eq(tar_obj.method(:compress_archive))
|
122
|
+
end
|
123
|
+
|
124
|
+
example "compress_archive defaults to gzip", :gzip => true do
|
125
|
+
tar_obj.create_archive(pattern)
|
126
|
+
tar_obj.compress_archive
|
127
|
+
|
128
|
+
expect(tar_obj.compressed_archive_name).to eq(archive_name)
|
129
|
+
expect(File.exist?(archive_name)).to be true
|
130
|
+
end
|
131
|
+
|
132
|
+
example "compress_archive works with bzip2", :bzip2 => true do
|
133
|
+
expect{ tar_obj.create_archive(pattern) }.not_to raise_error
|
134
|
+
expect{ tar_obj.compress_archive('bzip2') }.not_to raise_error
|
135
|
+
expect(File.exist?('test.tar.bz2')).to be true
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
context "uncompression" do
|
140
|
+
before do
|
141
|
+
tar_obj.create_archive(pattern).compress_archive
|
142
|
+
end
|
143
|
+
|
144
|
+
example "uncompress_archive basic functionality" do
|
145
|
+
expect(tar_obj).to respond_to(:uncompress_archive)
|
146
|
+
end
|
147
|
+
|
148
|
+
example "uncompress_archive behaves as expected" do
|
149
|
+
expect{ tar_obj.uncompress_archive }.not_to raise_error
|
150
|
+
expect(File.exist?(archive_name)).to be false
|
151
|
+
end
|
152
|
+
|
153
|
+
example "uncompress is an alias for uncompress_archive" do
|
154
|
+
expect(tar_obj).to respond_to(:uncompress)
|
155
|
+
expect(tar_obj.method(:uncompress)).to eq (tar_obj.method(:uncompress_archive))
|
156
|
+
end
|
157
|
+
|
158
|
+
example "uncompress_archive singleton method" do
|
159
|
+
expect(Archive::Tar::External).to respond_to(:uncompress_archive)
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
context "archive" do
|
164
|
+
example "archive_info basic functionality" do
|
165
|
+
expect(tar_obj).to respond_to(:archive_info)
|
166
|
+
end
|
167
|
+
|
168
|
+
example "archive_info returns the expected value" do
|
169
|
+
tar_obj.create_archive(pattern)
|
170
|
+
expect(tar_obj.archive_info).to eq([tmp_file1, tmp_file2, tmp_file3])
|
171
|
+
end
|
172
|
+
|
173
|
+
example "add_to_archive basic functionality" do
|
174
|
+
expect(tar_obj).to respond_to(:add_to_archive)
|
175
|
+
end
|
176
|
+
|
177
|
+
example "add_to_archive works as expected" do
|
178
|
+
tar_obj = described_class.new(tar_name)
|
179
|
+
expect{ tar_obj.add_to_archive(tmp_file2) }.not_to raise_error
|
180
|
+
expect{ tar_obj.add_to_archive(tmp_file2, tmp_file3) }.not_to raise_error
|
181
|
+
expect(tar_obj.archive_info).to eq([tmp_file2, tmp_file2, tmp_file3])
|
182
|
+
end
|
183
|
+
|
184
|
+
example "update_archive basic functionality" do
|
185
|
+
expect(tar_obj).to respond_to(:update_archive)
|
186
|
+
end
|
187
|
+
|
188
|
+
example "update_archive behaves as expected", :gtar => true do
|
189
|
+
tar_obj.create_archive(pattern)
|
190
|
+
expect(tar_obj.archive_info).to eq([tmp_file1, tmp_file2, tmp_file3])
|
191
|
+
tar_obj.update_archive(tmp_file2)
|
192
|
+
expect(tar_obj.archive_info).to eq([tmp_file1, tmp_file2, tmp_file3])
|
193
|
+
end
|
194
|
+
|
195
|
+
example "extract_archive_basic" do
|
196
|
+
expect(tar_obj).to respond_to(:extract_archive)
|
197
|
+
end
|
198
|
+
|
199
|
+
example "extract_archive raises an error if the file isn't in the archive" do
|
200
|
+
tar_obj.create(pattern)
|
201
|
+
expect{ tar_obj.expand('blah.txt') }.to raise_error(Archive::Tar::Error)
|
202
|
+
end
|
203
|
+
|
204
|
+
example "extract_archive with no arguments extracts all files" do
|
205
|
+
tar_obj.create(pattern)
|
206
|
+
expect{ tar_obj.extract_archive }.not_to raise_error
|
207
|
+
end
|
208
|
+
|
209
|
+
example "extract_archive with a valid file argument behaves as expected" do
|
210
|
+
tar_obj.create(pattern)
|
211
|
+
expect{ tar_obj.extract_archive(tmp_file2) }.not_to raise_error
|
212
|
+
end
|
213
|
+
|
214
|
+
example "expand_archive, expand and extract are aliases for extract_archive" do
|
215
|
+
expect(tar_obj.method(:expand_archive)).to eq(tar_obj.method(:extract_archive))
|
216
|
+
expect(tar_obj.method(:expand)).to eq(tar_obj.method(:extract_archive))
|
217
|
+
expect(tar_obj.method(:extract)).to eq(tar_obj.method(:extract_archive))
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
after do
|
222
|
+
File.delete(tmp_file1) if File.exist?(tmp_file1)
|
223
|
+
File.delete(tmp_file2) if File.exist?(tmp_file2)
|
224
|
+
File.delete(tmp_file3) if File.exist?(tmp_file3)
|
225
|
+
|
226
|
+
File.delete(tar_name) if File.exist?(tar_name)
|
227
|
+
File.delete("#{tar_name}.gz") if File.exist?("#{tar_name}.gz")
|
228
|
+
File.delete("#{tar_name}.bz2") if File.exist?("#{tar_name}.bz2")
|
229
|
+
File.delete("#{tar_name}.zip") if File.exist?("#{tar_name}.zip")
|
230
|
+
end
|
231
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: archive-tar-external
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Berger
|
@@ -35,10 +35,10 @@ cert_chain:
|
|
35
35
|
ORVCZpRuCPpmC8qmqxUnARDArzucjaclkxjLWvCVHeFa9UP7K3Nl9oTjJNv+7/jM
|
36
36
|
WZs4eecIcUc4tKdHxcAJ0MO/Dkqq7hGaiHpwKY76wQ1+8xAh
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date:
|
38
|
+
date: 2021-04-30 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
|
-
name:
|
41
|
+
name: rake
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
44
|
- - ">="
|
@@ -52,33 +52,33 @@ dependencies:
|
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: '0'
|
54
54
|
- !ruby/object:Gem::Dependency
|
55
|
-
name:
|
55
|
+
name: rspec
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
|
-
- - "
|
58
|
+
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
60
|
+
version: '3.9'
|
61
61
|
type: :development
|
62
62
|
prerelease: false
|
63
63
|
version_requirements: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
|
-
- - "
|
65
|
+
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version: '
|
67
|
+
version: '3.9'
|
68
68
|
- !ruby/object:Gem::Dependency
|
69
|
-
name:
|
69
|
+
name: ptools
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
|
-
- - "
|
72
|
+
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: '
|
74
|
+
version: '1.4'
|
75
75
|
type: :development
|
76
76
|
prerelease: false
|
77
77
|
version_requirements: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
|
-
- - "
|
79
|
+
- - "~>"
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version: '
|
81
|
+
version: '1.4'
|
82
82
|
description: |2
|
83
83
|
The archive-tar-external is a simple wrapper interface for creating
|
84
84
|
tar files using your system's tar command. You can also easily compress
|
@@ -89,29 +89,26 @@ executables: []
|
|
89
89
|
extensions: []
|
90
90
|
extra_rdoc_files: []
|
91
91
|
files:
|
92
|
-
- Rakefile
|
93
|
-
- certs
|
94
|
-
- certs/djberg96_pub.pem
|
95
|
-
- lib
|
96
|
-
- lib/archive-tar-external.rb
|
97
|
-
- lib/archive
|
98
|
-
- lib/archive/tar
|
99
|
-
- lib/archive/tar/external.rb
|
100
|
-
- test
|
101
|
-
- test/test_archive_tar_external.rb
|
102
92
|
- CHANGES.md
|
93
|
+
- Gemfile
|
94
|
+
- LICENSE
|
103
95
|
- MANIFEST.md
|
104
96
|
- README.md
|
97
|
+
- Rakefile
|
105
98
|
- archive-tar-external.gemspec
|
106
|
-
-
|
99
|
+
- certs/djberg96_pub.pem
|
107
100
|
- doc/archive_tar_external.md
|
101
|
+
- lib/archive-tar-external.rb
|
102
|
+
- lib/archive/tar/external.rb
|
103
|
+
- spec/archive_tar_external_spec.rb
|
104
|
+
- spec/spec_helper.rb
|
108
105
|
homepage: http://github.com/djberg96/archive-tar-external
|
109
106
|
licenses:
|
110
107
|
- Apache-2.0
|
111
108
|
metadata:
|
112
109
|
homepage_uri: https://github.com/djberg96/archive-tar-external
|
113
110
|
bug_tracker_uri: https://github.com/djberg96/archive-tar-external/issues
|
114
|
-
changelog_uri: https://github.com/djberg96/archive-tar-external/blob/
|
111
|
+
changelog_uri: https://github.com/djberg96/archive-tar-external/blob/main/CHANGES
|
115
112
|
documentation_uri: https://github.com/djberg96/archive-tar-external/wiki
|
116
113
|
source_code_uri: https://github.com/djberg96/archive-tar-external
|
117
114
|
wiki_uri: https://github.com/djberg96/archive-tar-external/wiki
|
@@ -130,9 +127,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
130
127
|
- !ruby/object:Gem::Version
|
131
128
|
version: '0'
|
132
129
|
requirements: []
|
133
|
-
rubygems_version: 3.
|
130
|
+
rubygems_version: 3.2.15
|
134
131
|
signing_key:
|
135
132
|
specification_version: 4
|
136
133
|
summary: A simple way to create tar archives using external calls
|
137
134
|
test_files:
|
138
|
-
-
|
135
|
+
- spec/archive_tar_external_spec.rb
|
136
|
+
- spec/spec_helper.rb
|
metadata.gz.sig
CHANGED
Binary file
|
@@ -1,209 +0,0 @@
|
|
1
|
-
###############################################################################
|
2
|
-
# test_archive_tar_external.rb
|
3
|
-
#
|
4
|
-
# Test suite for the archive-tar-external library. This test case should be
|
5
|
-
# run via the 'rake test' Rake task.
|
6
|
-
###############################################################################
|
7
|
-
require 'archive/tar/external'
|
8
|
-
require 'test-unit'
|
9
|
-
require 'ptools'
|
10
|
-
include Archive
|
11
|
-
|
12
|
-
class TC_ArchiveTarExternal < Test::Unit::TestCase
|
13
|
-
def self.startup
|
14
|
-
Dir.chdir(File.dirname(File.expand_path(__FILE__)))
|
15
|
-
|
16
|
-
@@tmp_file1 = 'temp1.txt'
|
17
|
-
@@tmp_file2 = 'temp2.txt'
|
18
|
-
@@tmp_file3 = 'temp3.txt'
|
19
|
-
|
20
|
-
@@gtar_found = File.which('gtar')
|
21
|
-
@@tar_found = File.which('tar')
|
22
|
-
@@gzip_found = File.which('gzip')
|
23
|
-
@@bzip2_found = File.which('bzip2')
|
24
|
-
|
25
|
-
File.open(@@tmp_file1, 'w'){ |f| f.puts 'This is a temporary text file' }
|
26
|
-
File.open(@@tmp_file2, 'w'){ |f| f.puts 'This is a temporary text file' }
|
27
|
-
File.open(@@tmp_file3, 'w'){ |f| f.puts 'This is a temporary text file' }
|
28
|
-
end
|
29
|
-
|
30
|
-
def setup
|
31
|
-
@tar = Tar::External.new('test.tar')
|
32
|
-
@tar_name = 'test.tar'
|
33
|
-
@pattern = '*.txt'
|
34
|
-
@archive = 'temp.tar.gz'
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_version
|
38
|
-
assert_equal('1.4.1', Tar::External::VERSION)
|
39
|
-
assert_true(Tar::External::VERSION.frozen?)
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_constructor
|
43
|
-
assert_nothing_raised{ Tar::External.new(@tar_name) }
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_constructor_with_extension
|
47
|
-
assert_nothing_raised{ Tar::External.new(@tar_name, '*.txt') }
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_constructor_with_program
|
51
|
-
omit_unless(@@gzip_found){ 'gzip program not found - skipping' }
|
52
|
-
assert_nothing_raised{ Tar::External.new(@tar_name, '*.txt', 'gzip') }
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_constructor_expected_errors
|
56
|
-
assert_raise(ArgumentError){ Tar::External.new }
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_tar_program
|
60
|
-
assert_respond_to(@tar, :tar_program)
|
61
|
-
assert_equal('tar', @tar.tar_program)
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_archive_name
|
65
|
-
assert_respond_to(@tar, :archive_name)
|
66
|
-
assert_respond_to(@tar, :archive_name=)
|
67
|
-
|
68
|
-
assert_equal('test.tar', @tar.archive_name)
|
69
|
-
assert_nothing_raised{ @tar.archive_name }
|
70
|
-
assert_nothing_raised{ @tar.archive_name = 'foo' }
|
71
|
-
end
|
72
|
-
|
73
|
-
def test_compressed_archive_name_get
|
74
|
-
assert_respond_to(@tar, :compressed_archive_name)
|
75
|
-
assert_nil(@tar.compressed_archive_name)
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_compressed_archive_name_set
|
79
|
-
assert_respond_to(@tar, :compressed_archive_name=)
|
80
|
-
assert_nothing_raised{ @tar.compressed_archive_name = 'test.tar.gz' }
|
81
|
-
assert_equal('test.tar.gz', @tar.compressed_archive_name)
|
82
|
-
assert_equal('test.tar', @tar.archive_name)
|
83
|
-
|
84
|
-
assert_nothing_raised{ @tar.compressed_archive_name = 'test.tgz' }
|
85
|
-
assert_equal('test.tgz', @tar.compressed_archive_name)
|
86
|
-
assert_equal('test.tar', @tar.archive_name)
|
87
|
-
end
|
88
|
-
|
89
|
-
test "create_archive basic functionality" do
|
90
|
-
assert_respond_to(@tar, :create_archive)
|
91
|
-
assert_nothing_raised{ @tar.create_archive(@pattern) }
|
92
|
-
assert_true(File.exist?(@tar_name))
|
93
|
-
end
|
94
|
-
|
95
|
-
test "create_archive requires at least on argument" do
|
96
|
-
assert_raises(ArgumentError){ @tar.create_archive }
|
97
|
-
end
|
98
|
-
|
99
|
-
test "create_archive raises an error if no files match the pattern" do
|
100
|
-
assert_raises(Tar::Error){ @tar.create_archive('*.blah') }
|
101
|
-
end
|
102
|
-
|
103
|
-
test "create_archive accepts optional parameters" do
|
104
|
-
assert_nothing_raised{ @tar.create_archive(@pattern, 'cfj') }
|
105
|
-
end
|
106
|
-
|
107
|
-
def test_create_alias
|
108
|
-
assert_respond_to(@tar, :create)
|
109
|
-
assert_true(Tar::External.instance_method(:create) == Tar::External.instance_method(:create_archive))
|
110
|
-
end
|
111
|
-
|
112
|
-
def test_compress_archive_basic
|
113
|
-
assert_respond_to(@tar, :compress_archive)
|
114
|
-
end
|
115
|
-
|
116
|
-
def test_compress_alias
|
117
|
-
assert_respond_to(@tar, :compress)
|
118
|
-
assert_true(Tar::External.instance_method(:compress) == Tar::External.instance_method(:compress_archive))
|
119
|
-
end
|
120
|
-
|
121
|
-
def test_compress_archive_gzip
|
122
|
-
assert_nothing_raised{ @tar.create_archive('*.txt') }
|
123
|
-
assert_nothing_raised{ @tar.compress_archive }
|
124
|
-
|
125
|
-
assert_equal('test.tar.gz', @tar.compressed_archive_name)
|
126
|
-
assert_true(File.exist?('test.tar.gz'))
|
127
|
-
end
|
128
|
-
|
129
|
-
def test_compress_archive_bzip2
|
130
|
-
assert_nothing_raised{ @tar.create_archive('*.txt') }
|
131
|
-
assert_nothing_raised{ @tar.compress_archive('bzip2') }
|
132
|
-
assert_true(File.exist?('test.tar.bz2'))
|
133
|
-
end
|
134
|
-
|
135
|
-
def test_uncompress_archive
|
136
|
-
assert_respond_to(@tar, :uncompress_archive)
|
137
|
-
assert_nothing_raised{ @tar.create_archive('*.txt') }
|
138
|
-
assert_nothing_raised{ @tar.compress_archive }
|
139
|
-
assert_nothing_raised{ @tar.uncompress_archive }
|
140
|
-
assert_false(File.exist?('test.tar.gz'))
|
141
|
-
end
|
142
|
-
|
143
|
-
def test_uncompress_archive_class_method
|
144
|
-
assert_respond_to(Tar::External, :uncompress_archive)
|
145
|
-
end
|
146
|
-
|
147
|
-
def test_uncompress_alias
|
148
|
-
assert_respond_to(Tar::External, :uncompress)
|
149
|
-
assert_true(Tar::External.method(:uncompress) == Tar::External.method(:uncompress_archive))
|
150
|
-
end
|
151
|
-
|
152
|
-
def test_archive_info
|
153
|
-
assert_respond_to(@tar, :archive_info)
|
154
|
-
assert_nothing_raised{ @tar.create_archive('*.txt') }
|
155
|
-
assert_equal(['temp1.txt','temp2.txt','temp3.txt'], @tar.archive_info)
|
156
|
-
end
|
157
|
-
|
158
|
-
def test_add_to_archive
|
159
|
-
assert_respond_to(@tar,:add_to_archive)
|
160
|
-
assert_nothing_raised{ @tar.create_archive('temp1.txt') }
|
161
|
-
assert_nothing_raised{ @tar.add_to_archive('temp2.txt') }
|
162
|
-
assert_nothing_raised{ @tar.add_to_archive('temp2.txt','temp3.txt') }
|
163
|
-
end
|
164
|
-
|
165
|
-
def test_update_archive
|
166
|
-
assert_respond_to(@tar, :update_archive)
|
167
|
-
assert_nothing_raised{ @tar.create_archive('*.txt') }
|
168
|
-
assert_nothing_raised{ @tar.update_archive('temp2.txt') }
|
169
|
-
end
|
170
|
-
|
171
|
-
def test_extract_archive_basic
|
172
|
-
assert_respond_to(@tar, :extract_archive)
|
173
|
-
end
|
174
|
-
|
175
|
-
def test_extract_archive_aliases
|
176
|
-
assert_true(Tar::External.instance_method(:extract_archive) == Tar::External.instance_method(:expand_archive))
|
177
|
-
assert_true(Tar::External.instance_method(:extract) == Tar::External.instance_method(:expand_archive))
|
178
|
-
assert_true(Tar::External.instance_method(:expand) == Tar::External.instance_method(:expand_archive))
|
179
|
-
end
|
180
|
-
|
181
|
-
def test_extract_archive_advanced
|
182
|
-
omit_unless(RbConfig::CONFIG['host_os'] =~ /sunos|solaris/){
|
183
|
-
assert_nothing_raised{ @tar.tar_program = @@gtar }
|
184
|
-
}
|
185
|
-
assert_nothing_raised{ @tar.create('*.txt') }
|
186
|
-
assert_raises(Tar::Error){ @tar.expand('blah.txt') }
|
187
|
-
|
188
|
-
assert_nothing_raised{ @tar.extract_archive }
|
189
|
-
assert_nothing_raised{ @tar.extract_archive('temp2.txt') }
|
190
|
-
end
|
191
|
-
|
192
|
-
def teardown
|
193
|
-
@tar = nil
|
194
|
-
File.delete('test.tar') if File.exist?('test.tar')
|
195
|
-
File.delete('test.tar.gz') if File.exist?('test.tar.gz')
|
196
|
-
File.delete('test.tar.bz2') if File.exist?('test.tar.bz2')
|
197
|
-
File.delete('test.tar.zip') if File.exist?('test.tar.zip')
|
198
|
-
end
|
199
|
-
|
200
|
-
def self.shutdown
|
201
|
-
@@tar_foudn = nil
|
202
|
-
@@gzip_found = nil
|
203
|
-
@@bzip2_found = nil
|
204
|
-
|
205
|
-
File.delete(@@tmp_file1) if File.exist?(@@tmp_file1)
|
206
|
-
File.delete(@@tmp_file2) if File.exist?(@@tmp_file2)
|
207
|
-
File.delete(@@tmp_file3) if File.exist?(@@tmp_file3)
|
208
|
-
end
|
209
|
-
end
|