archive-tar-external 1.2.3 → 1.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.
- data/CHANGES +94 -87
- data/MANIFEST +7 -7
- data/README +47 -29
- data/Rakefile +26 -26
- data/archive-tar-external.gemspec +40 -40
- data/doc/tar_external.txt +109 -136
- data/lib/archive/tar/external.rb +281 -0
- data/test/test_archive_tar_external.rb +203 -201
- metadata +14 -4
- data/lib/archive/tar_external.rb +0 -303
@@ -0,0 +1,281 @@
|
|
1
|
+
require 'rbconfig'
|
2
|
+
|
3
|
+
if Config::CONFIG['host_os'] =~ /mswin|dos|win32|cygwin|mingw/i
|
4
|
+
if RUBY_VERSION.to_f < 1.9 && RUBY_PLATFORM !~ /java/i
|
5
|
+
require 'win32/open3'
|
6
|
+
else
|
7
|
+
require 'open3'
|
8
|
+
end
|
9
|
+
else
|
10
|
+
require 'open3'
|
11
|
+
end
|
12
|
+
|
13
|
+
# The Archive module serves as a namespace only.
|
14
|
+
module Archive
|
15
|
+
|
16
|
+
# The Tar class serves as a toplevel class namespace only.
|
17
|
+
class Tar
|
18
|
+
|
19
|
+
# Raised if something goes wrong during the execution of any methods
|
20
|
+
# which use the tar command internally.
|
21
|
+
class Error < StandardError; end
|
22
|
+
|
23
|
+
# Raised if something goes wrong during the Tar#compress_archive or
|
24
|
+
# Tar#uncompress_archive methods.
|
25
|
+
class CompressError < StandardError; end
|
26
|
+
|
27
|
+
# This class encapsulates tar & zip operations.
|
28
|
+
class Tar::External
|
29
|
+
# The version of the archive-tar-external library.
|
30
|
+
VERSION = '1.3.0'
|
31
|
+
|
32
|
+
# The name of the archive file to be used, e.g. "test.tar"
|
33
|
+
attr_accessor :archive_name
|
34
|
+
|
35
|
+
# The name of the tar program you wish to use. The default is "tar".
|
36
|
+
attr_accessor :tar_program
|
37
|
+
|
38
|
+
# The name of the archive file after compression, e.g. "test.tar.gz"
|
39
|
+
attr_reader :compressed_archive_name
|
40
|
+
|
41
|
+
# Returns an Archive::Tar::External object. The +archive_name+ is the
|
42
|
+
# name of the tarball. While a .tar extension is recommended based on
|
43
|
+
# years of convention, it is not enforced.
|
44
|
+
#
|
45
|
+
# Note that this does not actually create the archive unless you
|
46
|
+
# pass a value to +file_pattern+. This then becomes a shortcut for
|
47
|
+
# Archive::Tar::External.new + Archive::Tar::External#create_archive.
|
48
|
+
#
|
49
|
+
# If +program+ is provided, then it compresses the archive as well by
|
50
|
+
# calling Archive::Tar::External#compress_archive internally.
|
51
|
+
#
|
52
|
+
def initialize(archive_name, file_pattern=nil, program=nil)
|
53
|
+
@archive_name = archive_name.to_s
|
54
|
+
@compressed_archive_name = nil
|
55
|
+
@tar_program = 'tar'
|
56
|
+
|
57
|
+
if file_pattern
|
58
|
+
create_archive(file_pattern)
|
59
|
+
end
|
60
|
+
|
61
|
+
if program
|
62
|
+
compress_archive(program)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Assign a compressed archive name. This autogenerates the archive_name
|
67
|
+
# based on the extension of the name provided, unless you provide the
|
68
|
+
# extension yourself. If the extension is '.tgz', then the base of the
|
69
|
+
# name + '.tar' will be the new archive name.
|
70
|
+
#
|
71
|
+
# This should only be used if you have a pre-existing, compressed archive
|
72
|
+
# that you want to uncompress, and want to have a Tar::External object
|
73
|
+
# around. Otherwise, use the class method Tar::External.uncompress.
|
74
|
+
#
|
75
|
+
def compressed_archive_name=(name, ext=File.extname(name))
|
76
|
+
if ext.downcase == '.tgz'
|
77
|
+
@archive_name = File.basename(name, ext.downcase) + '.tar'
|
78
|
+
else
|
79
|
+
@archive_name = File.basename(name, ext)
|
80
|
+
end
|
81
|
+
@compressed_archive_name = name
|
82
|
+
end
|
83
|
+
|
84
|
+
# Creates the archive using +file_pattern+. Any errors that occur
|
85
|
+
# here will raise a Error.
|
86
|
+
#
|
87
|
+
def create_archive(file_pattern)
|
88
|
+
cmd = "#{@tar_program} cf #{@archive_name} #{file_pattern}"
|
89
|
+
|
90
|
+
Open3.popen3(cmd){ |tar_in, tar_out, tar_err|
|
91
|
+
err = tar_err.gets
|
92
|
+
if err
|
93
|
+
raise Error, err.chomp
|
94
|
+
end
|
95
|
+
}
|
96
|
+
|
97
|
+
self
|
98
|
+
end
|
99
|
+
|
100
|
+
alias :create :create_archive
|
101
|
+
|
102
|
+
# Compresses the archive with +program+, or gzip if no program is
|
103
|
+
# provided. If you want to pass arguments to +program+, merely include
|
104
|
+
# them as part of the program name, e.g. "gzip -f".
|
105
|
+
#
|
106
|
+
# Any errors that occur here will raise a Tar::CompressError.
|
107
|
+
#
|
108
|
+
def compress_archive(program='gzip')
|
109
|
+
cmd = "#{program} #{@archive_name}"
|
110
|
+
|
111
|
+
Open3.popen3(cmd){ |prog_in, prog_out, prog_err|
|
112
|
+
err = prog_err.gets
|
113
|
+
raise CompressError, err.chomp if err
|
114
|
+
|
115
|
+
# Find the new file name with the extension. There's probably a more
|
116
|
+
# reliable way to do this, but this should work 99% of the time.
|
117
|
+
name = Dir["#{@archive_name}.{gz,bz2,cpio,zip}"].first
|
118
|
+
@compressed_archive_name = name
|
119
|
+
}
|
120
|
+
|
121
|
+
self
|
122
|
+
end
|
123
|
+
|
124
|
+
alias :compress :compress_archive
|
125
|
+
|
126
|
+
# Uncompresses the tarball using the program you pass to this method. The
|
127
|
+
# default is "gunzip". Just as for +compress_archive+, you can pass
|
128
|
+
# arguments along as part of the argument.
|
129
|
+
#
|
130
|
+
# Note that this is only for use with archives that have been zipped up
|
131
|
+
# with gunzip, or whatever. If you want to *extract* the files from the
|
132
|
+
# tarball, use Tar::External#extract instead.
|
133
|
+
#
|
134
|
+
# Any errors that occur here will raise a Tar::CompressError.
|
135
|
+
#
|
136
|
+
def uncompress_archive(program="gunzip")
|
137
|
+
unless @compressed_archive_name
|
138
|
+
raise CompressError, "no compressed file found"
|
139
|
+
end
|
140
|
+
|
141
|
+
cmd = "#{program} #{@compressed_archive_name}"
|
142
|
+
|
143
|
+
Open3.popen3(cmd){ |prog_in, prog_out, prog_err|
|
144
|
+
err = prog_err.gets
|
145
|
+
raise CompressError, err.chomp if err
|
146
|
+
@compressed_archive_name = nil
|
147
|
+
}
|
148
|
+
self
|
149
|
+
end
|
150
|
+
|
151
|
+
alias :uncompress :uncompress_archive
|
152
|
+
|
153
|
+
# Uncompress an existing archive, using +program+ to uncompress it.
|
154
|
+
# The default decompression program is gunzip.
|
155
|
+
#
|
156
|
+
def self.uncompress_archive(archive, program='gunzip')
|
157
|
+
cmd = "#{program} #{archive}"
|
158
|
+
|
159
|
+
Open3.popen3(cmd){ |prog_in, prog_out, prog_err|
|
160
|
+
err = prog_err.gets
|
161
|
+
raise CompressError, err.chomp if err
|
162
|
+
}
|
163
|
+
end
|
164
|
+
|
165
|
+
class << self
|
166
|
+
alias uncompress uncompress_archive
|
167
|
+
end
|
168
|
+
|
169
|
+
# Returns an array of file names that are included within the tarball.
|
170
|
+
# This method does not extract the archive.
|
171
|
+
#
|
172
|
+
def archive_info
|
173
|
+
result = []
|
174
|
+
cmd = "#{@tar_program} tf #{@archive_name}"
|
175
|
+
Open3.popen3(cmd){ |ain, aout, aerr|
|
176
|
+
err = aerr.gets
|
177
|
+
if err
|
178
|
+
raise Error, err.chomp
|
179
|
+
end
|
180
|
+
|
181
|
+
while output = aout.gets
|
182
|
+
result << output.chomp
|
183
|
+
end
|
184
|
+
}
|
185
|
+
result
|
186
|
+
end
|
187
|
+
|
188
|
+
alias :info :archive_info
|
189
|
+
|
190
|
+
# Adds +files+ to an already existing archive.
|
191
|
+
#
|
192
|
+
def add_to_archive(*files)
|
193
|
+
if files.empty?
|
194
|
+
raise Error, "there must be at least one file specified"
|
195
|
+
end
|
196
|
+
|
197
|
+
cmd = "#{@tar_program} rf #{@archive_name} #{files.join(" ")}"
|
198
|
+
|
199
|
+
Open3.popen3(cmd){ |ain, aout, aerr|
|
200
|
+
err = aerr.gets
|
201
|
+
raise Error, err.chomp if err
|
202
|
+
}
|
203
|
+
self
|
204
|
+
end
|
205
|
+
|
206
|
+
alias :add :add_to_archive
|
207
|
+
|
208
|
+
# Updates the given +files+ in the archive, i.e. they are added if they
|
209
|
+
# are not already in the archive or have been modified.
|
210
|
+
#
|
211
|
+
def update_archive(*files)
|
212
|
+
if files.empty?
|
213
|
+
raise Error, "there must be at least one file specified"
|
214
|
+
end
|
215
|
+
|
216
|
+
cmd = "#{@tar_program} uf #{@archive_name} #{files.join(" ")}"
|
217
|
+
|
218
|
+
Open3.popen3(cmd){ |ain, aout, aerr|
|
219
|
+
err = aerr.gets
|
220
|
+
raise Error, err.chomp if err
|
221
|
+
}
|
222
|
+
|
223
|
+
self
|
224
|
+
end
|
225
|
+
|
226
|
+
alias :update :update_archive
|
227
|
+
|
228
|
+
# Expands the contents of the tarball. It does NOT delete the tarball.
|
229
|
+
# If +files+ are provided, then only those files are extracted.
|
230
|
+
# Otherwise, all files are extracted.
|
231
|
+
#
|
232
|
+
# Note that some tar programs, notably the tar program shipped by Sun,
|
233
|
+
# does not issue any sort of warning or error if you try to extract a
|
234
|
+
# file that does not exist in the archive.
|
235
|
+
#
|
236
|
+
def extract_archive(*files)
|
237
|
+
cmd = "#{@tar_program} xf #{@archive_name}"
|
238
|
+
|
239
|
+
unless files.empty?
|
240
|
+
cmd << " " << files.join(" ")
|
241
|
+
end
|
242
|
+
|
243
|
+
Open3.popen3(cmd){ |ain, aout, aerr|
|
244
|
+
err = aerr.gets
|
245
|
+
raise Error, err.chomp if err
|
246
|
+
}
|
247
|
+
|
248
|
+
self
|
249
|
+
end
|
250
|
+
|
251
|
+
alias :expand_archive :extract_archive
|
252
|
+
alias :extract :extract_archive
|
253
|
+
alias :expand :extract_archive
|
254
|
+
|
255
|
+
# A class method that behaves identically to the equivalent instance
|
256
|
+
# method, except that you must specifiy that tarball as the first
|
257
|
+
# argument. Also, the tar program is hard coded to 'tar xf'.
|
258
|
+
#
|
259
|
+
def self.extract_archive(archive, *files)
|
260
|
+
cmd = "tar xf #{archive}"
|
261
|
+
|
262
|
+
unless files.empty?
|
263
|
+
cmd << " " << files.join(" ")
|
264
|
+
end
|
265
|
+
|
266
|
+
Open3.popen3(cmd){ |ain, aout, aerr|
|
267
|
+
err = aerr.gets
|
268
|
+
raise Error, err.chomp if err
|
269
|
+
}
|
270
|
+
|
271
|
+
self
|
272
|
+
end
|
273
|
+
|
274
|
+
class << self
|
275
|
+
alias expand_archive extract_archive
|
276
|
+
alias extract extract_archive
|
277
|
+
alias expand extract_archive
|
278
|
+
end
|
279
|
+
end
|
280
|
+
end
|
281
|
+
end
|
@@ -1,201 +1,203 @@
|
|
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 'rubygems'
|
8
|
-
gem 'test-unit'
|
9
|
-
|
10
|
-
require 'archive/
|
11
|
-
require 'test/unit'
|
12
|
-
require 'ptools'
|
13
|
-
include Archive
|
14
|
-
|
15
|
-
class TC_ArchiveTarExternal < Test::Unit::TestCase
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
assert_nothing_raised{ @tar.
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
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 'rubygems'
|
8
|
+
gem 'test-unit'
|
9
|
+
|
10
|
+
require 'archive/tar/external'
|
11
|
+
require 'test/unit'
|
12
|
+
require 'ptools'
|
13
|
+
include Archive
|
14
|
+
|
15
|
+
class TC_ArchiveTarExternal < Test::Unit::TestCase
|
16
|
+
def self.startup
|
17
|
+
Dir.chdir(File.dirname(File.expand_path(__FILE__)))
|
18
|
+
|
19
|
+
@@tmp_file1 = 'temp1.txt'
|
20
|
+
@@tmp_file2 = 'temp2.txt'
|
21
|
+
@@tmp_file3 = 'temp3.txt'
|
22
|
+
|
23
|
+
@@gtar_found = File.which('gtar')
|
24
|
+
@@tar_found = File.which('tar')
|
25
|
+
@@gzip_found = File.which('gzip')
|
26
|
+
@@bzip2_found = File.which('bzip2')
|
27
|
+
|
28
|
+
File.open(@@tmp_file1, 'w'){ |f| f.puts 'This is a temporary text file' }
|
29
|
+
File.open(@@tmp_file2, 'w'){ |f| f.puts 'This is a temporary text file' }
|
30
|
+
File.open(@@tmp_file3, 'w'){ |f| f.puts 'This is a temporary text file' }
|
31
|
+
end
|
32
|
+
|
33
|
+
def setup
|
34
|
+
@tar = Tar::External.new('test.tar')
|
35
|
+
@tar_name = 'test.tar'
|
36
|
+
@pattern = '*.txt'
|
37
|
+
@archive = 'temp.tar.gz'
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_version
|
41
|
+
assert_equal('1.3.0', Tar::External::VERSION)
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_constructor
|
45
|
+
assert_nothing_raised{ Tar::External.new(@tar_name) }
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_constructor_with_extension
|
49
|
+
assert_nothing_raised{ Tar::External.new(@tar_name, '*.txt') }
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_constructor_with_program
|
53
|
+
omit_unless(@@gzip_found){ 'gzip program not found - skipping' }
|
54
|
+
assert_nothing_raised{ Tar::External.new(@tar_name, '*.txt', 'gzip') }
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_constructor_expected_errors
|
58
|
+
assert_raise(ArgumentError){ Tar::External.new }
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_tar_program
|
62
|
+
assert_respond_to(@tar, :tar_program)
|
63
|
+
assert_equal('tar', @tar.tar_program)
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_archive_name
|
67
|
+
assert_respond_to(@tar, :archive_name)
|
68
|
+
assert_respond_to(@tar, :archive_name=)
|
69
|
+
|
70
|
+
assert_equal('test.tar', @tar.archive_name)
|
71
|
+
assert_nothing_raised{ @tar.archive_name }
|
72
|
+
assert_nothing_raised{ @tar.archive_name = 'foo' }
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_compressed_archive_name_get
|
76
|
+
assert_respond_to(@tar, :compressed_archive_name)
|
77
|
+
assert_nil(@tar.compressed_archive_name)
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_compressed_archive_name_set
|
81
|
+
assert_respond_to(@tar, :compressed_archive_name=)
|
82
|
+
assert_nothing_raised{ @tar.compressed_archive_name = 'test.tar.gz' }
|
83
|
+
assert_equal('test.tar.gz', @tar.compressed_archive_name)
|
84
|
+
assert_equal('test.tar', @tar.archive_name)
|
85
|
+
|
86
|
+
assert_nothing_raised{ @tar.compressed_archive_name = 'test.tgz' }
|
87
|
+
assert_equal('test.tgz', @tar.compressed_archive_name)
|
88
|
+
assert_equal('test.tar', @tar.archive_name)
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_create_archive_basic
|
92
|
+
assert_respond_to(@tar, :create_archive)
|
93
|
+
|
94
|
+
assert_raises(ArgumentError){ @tar.create_archive }
|
95
|
+
assert_raises(Tar::Error){ @tar.create_archive('*.blah') }
|
96
|
+
|
97
|
+
assert_nothing_raised{ @tar.create_archive(@pattern) }
|
98
|
+
assert_true(File.exists?(@tar_name))
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_create_alias
|
102
|
+
assert_respond_to(@tar, :create)
|
103
|
+
assert_true(Tar::External.instance_method(:create) == Tar::External.instance_method(:create_archive))
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_compress_archive_basic
|
107
|
+
assert_respond_to(@tar, :compress_archive)
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_compress_alias
|
111
|
+
assert_respond_to(@tar, :compress)
|
112
|
+
assert_true(Tar::External.instance_method(:compress) == Tar::External.instance_method(:compress_archive))
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_compress_archive_gzip
|
116
|
+
assert_nothing_raised{ @tar.create_archive('*.txt') }
|
117
|
+
assert_nothing_raised{ @tar.compress_archive }
|
118
|
+
|
119
|
+
assert_equal('test.tar.gz', @tar.compressed_archive_name)
|
120
|
+
assert_true(File.exists?('test.tar.gz'))
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_compress_archive_bzip2
|
124
|
+
assert_nothing_raised{ @tar.create_archive('*.txt') }
|
125
|
+
assert_nothing_raised{ @tar.compress_archive('bzip2') }
|
126
|
+
assert_true(File.exists?('test.tar.bz2'))
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_uncompress_archive
|
130
|
+
assert_respond_to(@tar, :uncompress_archive)
|
131
|
+
assert_nothing_raised{ @tar.create_archive('*.txt') }
|
132
|
+
assert_nothing_raised{ @tar.compress_archive }
|
133
|
+
assert_nothing_raised{ @tar.uncompress_archive }
|
134
|
+
assert_false(File.exists?('test.tar.gz'))
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_uncompress_archive_class_method
|
138
|
+
assert_respond_to(Tar::External, :uncompress_archive)
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_uncompress_alias
|
142
|
+
assert_respond_to(Tar::External, :uncompress)
|
143
|
+
assert_true(Tar::External.method(:uncompress) == Tar::External.method(:uncompress_archive))
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_archive_info
|
147
|
+
assert_respond_to(@tar, :archive_info)
|
148
|
+
assert_nothing_raised{ @tar.create_archive('*.txt') }
|
149
|
+
assert_equal(['temp1.txt','temp2.txt','temp3.txt'], @tar.archive_info)
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_add_to_archive
|
153
|
+
assert_respond_to(@tar,:add_to_archive)
|
154
|
+
assert_nothing_raised{ @tar.create_archive('temp1.txt') }
|
155
|
+
assert_nothing_raised{ @tar.add_to_archive('temp2.txt') }
|
156
|
+
assert_nothing_raised{ @tar.add_to_archive('temp2.txt','temp3.txt') }
|
157
|
+
end
|
158
|
+
|
159
|
+
def test_update_archive
|
160
|
+
assert_respond_to(@tar, :update_archive)
|
161
|
+
assert_nothing_raised{ @tar.create_archive('*.txt') }
|
162
|
+
assert_nothing_raised{ @tar.update_archive('temp2.txt') }
|
163
|
+
end
|
164
|
+
|
165
|
+
def test_extract_archive_basic
|
166
|
+
assert_respond_to(@tar, :extract_archive)
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_extract_archive_aliases
|
170
|
+
assert_true(Tar::External.instance_method(:extract_archive) == Tar::External.instance_method(:expand_archive))
|
171
|
+
assert_true(Tar::External.instance_method(:extract) == Tar::External.instance_method(:expand_archive))
|
172
|
+
assert_true(Tar::External.instance_method(:expand) == Tar::External.instance_method(:expand_archive))
|
173
|
+
end
|
174
|
+
|
175
|
+
def test_extract_archive_advanced
|
176
|
+
omit_unless(Config::CONFIG['host_os'] =~ /sunos|solaris/){
|
177
|
+
assert_nothing_raised{ @tar.tar_program = @@gtar }
|
178
|
+
}
|
179
|
+
assert_nothing_raised{ @tar.create('*.txt') }
|
180
|
+
assert_raises(Tar::Error){ @tar.expand('blah.txt') }
|
181
|
+
|
182
|
+
assert_nothing_raised{ @tar.extract_archive }
|
183
|
+
assert_nothing_raised{ @tar.extract_archive('temp2.txt') }
|
184
|
+
end
|
185
|
+
|
186
|
+
def teardown
|
187
|
+
@tar = nil
|
188
|
+
File.delete('test.tar') if File.exists?('test.tar')
|
189
|
+
File.delete('test.tar.gz') if File.exists?('test.tar.gz')
|
190
|
+
File.delete('test.tar.bz2') if File.exists?('test.tar.bz2')
|
191
|
+
File.delete('test.tar.zip') if File.exists?('test.tar.zip')
|
192
|
+
end
|
193
|
+
|
194
|
+
def self.shutdown
|
195
|
+
@@tar_foudn = nil
|
196
|
+
@@gzip_found = nil
|
197
|
+
@@bzip2_found = nil
|
198
|
+
|
199
|
+
File.delete(@@tmp_file1) if File.exists?(@@tmp_file1)
|
200
|
+
File.delete(@@tmp_file2) if File.exists?(@@tmp_file2)
|
201
|
+
File.delete(@@tmp_file3) if File.exists?(@@tmp_file3)
|
202
|
+
end
|
203
|
+
end
|