archive-tar-external 1.2.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 +63 -0
- data/README +34 -0
- data/doc/tar_external.txt +136 -0
- data/lib/archive/tar_external.rb +277 -0
- data/test/tc_archive.rb +158 -0
- data/test/temp1.txt +1 -0
- data/test/temp2.txt +4 -0
- data/test/temp3.txt +3 -0
- metadata +54 -0
data/CHANGES
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
== 1.2.0 - 7-Apr-2006
|
2
|
+
* Project renamed 'archive-tar-external'.
|
3
|
+
* The 'Tar' class is now Tar::External.
|
4
|
+
* The RAA project name is now tar-external.
|
5
|
+
* Added the Tar::External.uncompress_archive class method for archives
|
6
|
+
that already exist.
|
7
|
+
* Added the Tar::External.extract_archive class method for tarballs
|
8
|
+
that already exist.
|
9
|
+
* Added the Tar::External#compressed_archive_name= method.
|
10
|
+
|
11
|
+
== 1.1.1 - 1-Mar-2006
|
12
|
+
* Replaced PLATFORM with RUBY_PLATFORM since the former is deprecated
|
13
|
+
for Ruby 1.9/2.0.
|
14
|
+
|
15
|
+
== 1.1.0 - 10-Feb-2006
|
16
|
+
* Internal refactoring changes - now uses block form of Open3.popen3.
|
17
|
+
* Most methods now return self instead of true (better for chaining).
|
18
|
+
* Corresponding test suite changes.
|
19
|
+
|
20
|
+
== 1.0.0 - 1-Sep-2005
|
21
|
+
* Moved project to RubyForge.
|
22
|
+
* Modified the constructor to accept a file pattern. If present, becomes
|
23
|
+
a shortcut for Tar.new + Tar#create_archive.
|
24
|
+
* Constructor merely calls .to_s on the archive name, rather than validating
|
25
|
+
that it's a String argument.
|
26
|
+
* You can now specify the tar program you wish to use, e.g. "tar", "gtar", etc.
|
27
|
+
* Fixed a bug in Tar#uncompress_archive where it wasn't finding the appropriate
|
28
|
+
compressed archive name.
|
29
|
+
* Added aliases for most methods whereby you can omit the word "archive" in
|
30
|
+
the method name now, e.g. Tar#compress is an alias for Tar#compress_archive.
|
31
|
+
* Now more polite about closing open handles from Open3.
|
32
|
+
* The (rdoc) documentation is now inlined.
|
33
|
+
* Removed the tarsimple.rd and tarsimple.html files.
|
34
|
+
* Made most documentation rdoc friendly.
|
35
|
+
* Updated the README and MANIFEST files.
|
36
|
+
* Removed the INSTALL file. The installation instructions are now included
|
37
|
+
in the README file.
|
38
|
+
* Test suite updates.
|
39
|
+
* Added a gemspec.
|
40
|
+
|
41
|
+
== 0.3.0 - 10-Aug-2004
|
42
|
+
* Added the update_archive() method.
|
43
|
+
* The expand_archive() method has been renamed to extract_archive().
|
44
|
+
For backward's compatability, an alias remains so you may use
|
45
|
+
either method name.
|
46
|
+
* The extract_archive() method now accepts a list of file names as
|
47
|
+
an argument. If present, then only those file names are extracted.
|
48
|
+
If not, then the entire archive is extracted.
|
49
|
+
* Added corresponding tests and documentation updates.
|
50
|
+
|
51
|
+
== 0.2.0 - 9-Aug-2004
|
52
|
+
* Added the add_to_archive() method.
|
53
|
+
* Removed the VERSION() class method. Use the constant instead.
|
54
|
+
* Changed "TarException" and "CompressionException" to "TarError" and
|
55
|
+
"CompressError", respectively.
|
56
|
+
* Moved rd documentation into its own file under the 'doc' directory.
|
57
|
+
* Added unit tests and updated the docs.
|
58
|
+
* Removed the html file. You can generate that on your own if you
|
59
|
+
wish using the rd2 tool.
|
60
|
+
* Added warranty information.
|
61
|
+
|
62
|
+
== 0.1.0 - 24-Jan-2003
|
63
|
+
* Initial Release
|
data/README
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
== Description
|
2
|
+
A very simple tar/compress package that uses calls to external programs
|
3
|
+
to do the work.
|
4
|
+
|
5
|
+
== Synopsis
|
6
|
+
require "archive/tar_external"
|
7
|
+
include Archive
|
8
|
+
|
9
|
+
# The long way
|
10
|
+
t = Tar::External.new("test.tar")
|
11
|
+
t.create_archive("*.rb")
|
12
|
+
t.compress_archive("gzip")
|
13
|
+
|
14
|
+
# The short way
|
15
|
+
t = Tar::External.new("test.tar", "*.rb", "gzip")
|
16
|
+
|
17
|
+
== Prerequisites
|
18
|
+
Ruby 1.8.0 or later.
|
19
|
+
The win32-open3 package (Windows only).
|
20
|
+
The "tar" command line program.
|
21
|
+
At least one compression program, e.g. gzip, bzip2, zip, etc.
|
22
|
+
|
23
|
+
== Installation
|
24
|
+
=== Standard Installation
|
25
|
+
ruby test/tc_archive.rb (optional)
|
26
|
+
ruby install.rb
|
27
|
+
|
28
|
+
=== Gem Installation
|
29
|
+
ruby archive-tar-external.gemspec
|
30
|
+
gem install archive-tar-external-XXX.gem
|
31
|
+
|
32
|
+
== Notes
|
33
|
+
For further documentation and information, see the tar_external.txt file
|
34
|
+
in the 'doc' directory.
|
@@ -0,0 +1,136 @@
|
|
1
|
+
== Description
|
2
|
+
A simple tar interface using external system calls.
|
3
|
+
|
4
|
+
== Synopsis
|
5
|
+
# Assuming we have three .txt files, t1.txt, t2.txt, t3.txt ...
|
6
|
+
require 'archive/tar_external'
|
7
|
+
include Archive
|
8
|
+
|
9
|
+
t = Tar::External.new("myfile.tar")
|
10
|
+
|
11
|
+
t.create_archive("*.txt")
|
12
|
+
t.compress_archive("bzip2") # 'myfile.tar.bz2' now exists
|
13
|
+
|
14
|
+
t.uncompress_archive("bunzip2")
|
15
|
+
|
16
|
+
t.archive_name # "myfile.tar"
|
17
|
+
t.archive_info # ["t1.txt","t2.txt","t3.txt"]
|
18
|
+
|
19
|
+
t.add_to_archive("t4.txt","t5.txt")
|
20
|
+
t.expand_archive
|
21
|
+
|
22
|
+
== Constants
|
23
|
+
VERSION
|
24
|
+
Current version number of this package. This is a string.
|
25
|
+
|
26
|
+
== Class Methods
|
27
|
+
Archive::Tar::External.new(archive_name, pattern=nil, program=nil)
|
28
|
+
Creates an instance of an Archive::Tar::External object. The +archive_name+ is
|
29
|
+
the name of the tarball. While a '.tar' extension is recommended based on
|
30
|
+
years of convention, it is not enforced.
|
31
|
+
|
32
|
+
If +pattern+ is provided, then the Archive#create_archive method is called
|
33
|
+
internally.
|
34
|
+
|
35
|
+
If +program+ is provided, then the Archive#compress_archive method is
|
36
|
+
called internally.
|
37
|
+
|
38
|
+
Note that +archive_name+ name must be a String, or a TypeError is raised.
|
39
|
+
|
40
|
+
Archive::Tar::External.expand_archive(archive_name, *files)
|
41
|
+
Identical to the instance method of the same name, except that you must
|
42
|
+
specify the +archive_name+, and the tar program is hard coded to 'tar xf'.
|
43
|
+
|
44
|
+
Archive::Tar::External.uncompress_archive(archive_name, program='gunzip')
|
45
|
+
Identical to the instance method of the same name, except that you must
|
46
|
+
specify the +archive_name+ as the first argument.
|
47
|
+
|
48
|
+
== Instance Methods
|
49
|
+
Archive;:Tar#add(file1 [, file2, ...])
|
50
|
+
Archive::Tar::External#add_to_archive(file1 [, file2, ...])
|
51
|
+
Adds a list of files to the current archive. At least one file must be
|
52
|
+
provided or a TarError is raised.
|
53
|
+
|
54
|
+
Archive::Tar::External#archive_info
|
55
|
+
Archive::Tar::External#info
|
56
|
+
Returns an array of file names that are included within the tarball.
|
57
|
+
|
58
|
+
Archive::Tar::External#archive_name
|
59
|
+
Returns the current archive name.
|
60
|
+
|
61
|
+
Archive::Tar::External#archive_name=
|
62
|
+
Sets the current archive name.
|
63
|
+
|
64
|
+
Archive::Tar::External#compress(program="gzip")
|
65
|
+
Archive::Tar::External#compress_archive(program="gzip")
|
66
|
+
Compresses the tarball using the program you pass to this method. The
|
67
|
+
default is "gzip".
|
68
|
+
|
69
|
+
Note that any arguments you want to be passed along with the program can
|
70
|
+
simply be included as part of the program, e.g. "gzip -f".
|
71
|
+
|
72
|
+
Archive::Tar::External#create(file_pattern)
|
73
|
+
Archive::Tar::External#create_archive(file_pattern)
|
74
|
+
Creates a new tarball, including those files which match 'file_pattern'.
|
75
|
+
|
76
|
+
Archive::Tar::External#expand_archive(files=nil)
|
77
|
+
Archive::Tar::External#extract_archive(files=nil)
|
78
|
+
Expands the contents of the tarball. Note that this method does NOT delete
|
79
|
+
the tarball.
|
80
|
+
|
81
|
+
If file names are provided, then only those files are extracted.
|
82
|
+
|
83
|
+
Archive::Tar::External#tar_program
|
84
|
+
Returns the name of the tar program used. The default is "tar".
|
85
|
+
|
86
|
+
Archive::Tar::External#tar_program=(program_name)
|
87
|
+
Sets the name of the tar program to be used.
|
88
|
+
|
89
|
+
Archive::Tar::External#uncompress(program="gunzip")
|
90
|
+
Archive::Tar::External#uncompress_archive(program="gunzip")
|
91
|
+
Uncompresses the tarball using the program you pass to this method. The
|
92
|
+
default is "gunzip".
|
93
|
+
|
94
|
+
As for compress_archive(), you can pass arguments along as part of the
|
95
|
+
argument.
|
96
|
+
|
97
|
+
Archive::Tar::External#update(files)
|
98
|
+
Archive::Tar::External#update_archive(files)
|
99
|
+
Updates the given +files+ in the archive, i.e they are added if they
|
100
|
+
are not already in the archive or have been modified.
|
101
|
+
|
102
|
+
== Exceptions
|
103
|
+
TarError
|
104
|
+
Raised if something goes wrong during the execution of any methods that
|
105
|
+
use the tar command internally.
|
106
|
+
|
107
|
+
CompressError
|
108
|
+
Raised if something goes wrong during the Tar#compress_archive or
|
109
|
+
Tar#uncompress_archive methods.
|
110
|
+
|
111
|
+
== Known Issues
|
112
|
+
The tar program that comes with Solaris will not raise an error if you
|
113
|
+
try to expand a file from an archive that does not contain that file.
|
114
|
+
|
115
|
+
If you come across any other issues, please report them on the project
|
116
|
+
page at http://www.rubyforge.org/projects/shards.
|
117
|
+
|
118
|
+
== Future Plans
|
119
|
+
Anything folks are looking for?
|
120
|
+
|
121
|
+
== License
|
122
|
+
Ruby's
|
123
|
+
|
124
|
+
== Warranty
|
125
|
+
This package is provided "as is" and without any express or
|
126
|
+
implied warranties, including, without limitation, the implied
|
127
|
+
warranties of merchantability and fitness for a particular purpose.
|
128
|
+
|
129
|
+
== Copyright
|
130
|
+
(C) 2003 - 2006 Daniel J. Berger
|
131
|
+
All Rights Reserved
|
132
|
+
|
133
|
+
== Author
|
134
|
+
Daniel J. Berger
|
135
|
+
djberg96 at gmail dot com
|
136
|
+
imperator on IRC (freenode)
|
@@ -0,0 +1,277 @@
|
|
1
|
+
if RUBY_PLATFORM.match("mswin")
|
2
|
+
require "win32/open3"
|
3
|
+
else
|
4
|
+
require "open3"
|
5
|
+
end
|
6
|
+
|
7
|
+
module Archive
|
8
|
+
|
9
|
+
class TarError < StandardError; end
|
10
|
+
class CompressError < StandardError; end
|
11
|
+
class Tar; end # Dummy, so our nesting/scoping works properly.
|
12
|
+
|
13
|
+
class Tar::External
|
14
|
+
VERSION = '1.2.0'
|
15
|
+
|
16
|
+
# The name of the archive file to be used, e.g. "test.tar"
|
17
|
+
attr_accessor :archive_name
|
18
|
+
|
19
|
+
# The name of the tar program you wish to use. The default is "tar".
|
20
|
+
attr_accessor :tar_program
|
21
|
+
|
22
|
+
# The name of the archive file after compression, e.g. "test.tar.gz"
|
23
|
+
attr_reader :compressed_archive_name
|
24
|
+
|
25
|
+
# Returns an Archive::Tar::External object. The +archive_name+ is the
|
26
|
+
# name of the tarball. While a .tar extension is recommended based on
|
27
|
+
# years of convention, it is not enforced.
|
28
|
+
#
|
29
|
+
# Note that this does not actually create the archive unless you
|
30
|
+
# pass a value to +file_pattern+. This then becomes a shortcut for
|
31
|
+
# Archive::Tar::External.new + Archive::Tar::External#create_archive.
|
32
|
+
#
|
33
|
+
# If +program+ is provided, then it compresses the archive as well by
|
34
|
+
# calling Archive::Tar::External#compress_archive internally.
|
35
|
+
#
|
36
|
+
def initialize(archive_name, file_pattern=nil, program=nil)
|
37
|
+
@archive_name = archive_name.to_s
|
38
|
+
@compressed_archive_name = nil
|
39
|
+
@tar_program = "tar"
|
40
|
+
|
41
|
+
if file_pattern
|
42
|
+
create_archive(file_pattern)
|
43
|
+
end
|
44
|
+
|
45
|
+
if program
|
46
|
+
compress_archive(program)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Assign a compressed archive name. This autogenerates the archive_name
|
51
|
+
# based on the extension of the name provided, unless you provide the
|
52
|
+
# extension yourself. If the extension is '.tgz', then the base of the
|
53
|
+
# name + '.tar' will be the new archive name.
|
54
|
+
#
|
55
|
+
# This should only be used if you have a pre-existing, compressed archive
|
56
|
+
# that you want to uncompress, and want to have a Tar::External object
|
57
|
+
# around. Otherwise, use the class method Tar::External.uncompress.
|
58
|
+
#
|
59
|
+
def compressed_archive_name=(name, ext=File.extname(name))
|
60
|
+
if ext == '.tgz' || ext == '.TGZ'
|
61
|
+
@archive_name = File.basename(name, ext.downcase) + '.tar'
|
62
|
+
else
|
63
|
+
@archive_name = File.basename(name, ext)
|
64
|
+
end
|
65
|
+
@compressed_archive_name = name
|
66
|
+
end
|
67
|
+
|
68
|
+
# Creates the archive using +file_pattern+. Any errors that occur
|
69
|
+
# here will raise a TarError.
|
70
|
+
#
|
71
|
+
def create_archive(file_pattern)
|
72
|
+
cmd = "#{@tar_program} cf #{@archive_name} #{file_pattern}"
|
73
|
+
Open3.popen3(cmd){ |tar_in, tar_out, tar_err|
|
74
|
+
err = tar_err.gets
|
75
|
+
if err
|
76
|
+
raise TarError, err.chomp
|
77
|
+
end
|
78
|
+
}
|
79
|
+
self
|
80
|
+
end
|
81
|
+
alias :create :create_archive
|
82
|
+
|
83
|
+
# Compresses the archive with +program+, or gzip if no program is
|
84
|
+
# provided. If you want to pass arguments to +program+, merely include
|
85
|
+
# them as part of the program name, e.g. "gzip -f".
|
86
|
+
#
|
87
|
+
# Any errors that occur here will raise a CompressError.
|
88
|
+
#
|
89
|
+
def compress_archive(program="gzip")
|
90
|
+
cmd = "#{program} #{@archive_name}"
|
91
|
+
Open3.popen3(cmd){ |prog_in, prog_out, prog_err|
|
92
|
+
err = prog_err.gets
|
93
|
+
if err
|
94
|
+
raise CompressError, err.chomp
|
95
|
+
end
|
96
|
+
|
97
|
+
# Find the new file name with the extension. There's probably a more
|
98
|
+
# reliable way to do this, but this should work 99% of the time.
|
99
|
+
name = Dir["#{@archive_name}.{gz,bz2,cpio,zip}"].first
|
100
|
+
@compressed_archive_name = name
|
101
|
+
}
|
102
|
+
self
|
103
|
+
end
|
104
|
+
alias :compress :compress_archive
|
105
|
+
|
106
|
+
# Uncompresses the tarball using the program you pass to this method. The
|
107
|
+
# default is "gunzip". Just as for +compress_archive+, you can pass
|
108
|
+
# arguments along as part of the argument.
|
109
|
+
#
|
110
|
+
# Note that this is only for use with archives that have been zipped up
|
111
|
+
# with gunzip, or whatever. If you want to *extract* the files from the
|
112
|
+
# tarball, use Tar::External#extract instead.
|
113
|
+
#
|
114
|
+
# Any errors that occur here will raise a CompressError.
|
115
|
+
#
|
116
|
+
def uncompress_archive(program="gunzip")
|
117
|
+
unless @compressed_archive_name
|
118
|
+
raise CompressError, "no compressed file found"
|
119
|
+
end
|
120
|
+
|
121
|
+
cmd = "#{program} #{@compressed_archive_name}"
|
122
|
+
|
123
|
+
Open3.popen3(cmd){ |prog_in, prog_out, prog_err|
|
124
|
+
err = prog_err.gets
|
125
|
+
if err
|
126
|
+
raise CompressError, err.chomp
|
127
|
+
end
|
128
|
+
@compressed_archive_name = nil
|
129
|
+
}
|
130
|
+
self
|
131
|
+
end
|
132
|
+
alias :uncompress :uncompress_archive
|
133
|
+
|
134
|
+
# Uncompress an existing archive, using +program+ to uncompress it.
|
135
|
+
# The default decompression program is gunzip.
|
136
|
+
#
|
137
|
+
def self.uncompress_archive(archive, program='gunzip')
|
138
|
+
cmd = "#{program} #{archive}"
|
139
|
+
|
140
|
+
Open3.popen3(cmd){ |prog_in, prog_out, prog_err|
|
141
|
+
err = prog_err.gets
|
142
|
+
if err
|
143
|
+
raise CompressError, err.chomp
|
144
|
+
end
|
145
|
+
}
|
146
|
+
end
|
147
|
+
|
148
|
+
# An alias for Tar::External.uncompress_archive.
|
149
|
+
#
|
150
|
+
def self.uncompress(file, program='gunzip')
|
151
|
+
self.uncompress_archive(file, program)
|
152
|
+
end
|
153
|
+
|
154
|
+
# Returns an array of file names that are included within the tarball.
|
155
|
+
# This method does not extract the archive.
|
156
|
+
#
|
157
|
+
def archive_info
|
158
|
+
result = []
|
159
|
+
cmd = "#{@tar_program} tf #{@archive_name}"
|
160
|
+
Open3.popen3(cmd){ |ain, aout, aerr|
|
161
|
+
err = aerr.gets
|
162
|
+
if err
|
163
|
+
raise TarError, err.chomp
|
164
|
+
end
|
165
|
+
|
166
|
+
while output = aout.gets
|
167
|
+
result << output.chomp
|
168
|
+
end
|
169
|
+
}
|
170
|
+
result
|
171
|
+
end
|
172
|
+
alias :info :archive_info
|
173
|
+
|
174
|
+
# Adds +files+ to an already existing archive.
|
175
|
+
#
|
176
|
+
def add_to_archive(*files)
|
177
|
+
if files.empty?
|
178
|
+
raise TarError, "there must be at least one file specified"
|
179
|
+
end
|
180
|
+
|
181
|
+
cmd = "#{@tar_program} rf #{@archive_name} #{files.join(" ")}"
|
182
|
+
Open3.popen3(cmd){ |ain, aout, aerr|
|
183
|
+
err = aerr.gets
|
184
|
+
|
185
|
+
if err
|
186
|
+
raise TarError, err.chomp
|
187
|
+
end
|
188
|
+
}
|
189
|
+
self
|
190
|
+
end
|
191
|
+
alias :add :add_to_archive
|
192
|
+
|
193
|
+
# Updates the given +files+ in the archive, i.e. they are added if they
|
194
|
+
# are not already in the archive or have been modified.
|
195
|
+
#
|
196
|
+
def update_archive(*files)
|
197
|
+
if files.empty?
|
198
|
+
raise TarError, "there must be at least one file specified"
|
199
|
+
end
|
200
|
+
|
201
|
+
cmd = "#{@tar_program} uf #{@archive_name} #{files.join(" ")}"
|
202
|
+
|
203
|
+
Open3.popen3(cmd){ |ain, aout, aerr|
|
204
|
+
err = aerr.gets
|
205
|
+
if err
|
206
|
+
raise TarError, err.chomp
|
207
|
+
end
|
208
|
+
}
|
209
|
+
self
|
210
|
+
end
|
211
|
+
alias :update :update_archive
|
212
|
+
|
213
|
+
# Expands the contents of the tarball. It does NOT delete the tarball.
|
214
|
+
# If +files+ are provided, then only those files are extracted.
|
215
|
+
# Otherwise, all files are extracted.
|
216
|
+
#
|
217
|
+
# Note that some tar programs, notably the tar program shipped by Sun,
|
218
|
+
# does not issue any sort of warning or error if you try to extract a
|
219
|
+
# file that does not exist in the archive.
|
220
|
+
#
|
221
|
+
def extract_archive(*files)
|
222
|
+
cmd = "#{@tar_program} xf #{@archive_name}"
|
223
|
+
|
224
|
+
unless files.empty?
|
225
|
+
cmd << " " << files.join(" ")
|
226
|
+
end
|
227
|
+
|
228
|
+
Open3.popen3(cmd){ |ain, aout, aerr|
|
229
|
+
err = aerr.gets
|
230
|
+
|
231
|
+
if err
|
232
|
+
raise TarError, err.chomp
|
233
|
+
end
|
234
|
+
}
|
235
|
+
self
|
236
|
+
end
|
237
|
+
alias :expand_archive :extract_archive
|
238
|
+
alias :extract :extract_archive
|
239
|
+
alias :expand :extract_archive
|
240
|
+
|
241
|
+
# A class method that behaves identically to the equivalent instance
|
242
|
+
# method, except that you must specifiy that tarball as the first
|
243
|
+
# argument. Also, the tar program is hard coded to 'tar xf'.
|
244
|
+
#
|
245
|
+
def self.extract_archive(archive, *files)
|
246
|
+
cmd = "tar xf #{archive}"
|
247
|
+
|
248
|
+
unless files.empty?
|
249
|
+
cmd << " " << files.join(" ")
|
250
|
+
end
|
251
|
+
|
252
|
+
Open3.popen3(cmd){ |ain, aout, aerr|
|
253
|
+
err = aerr.gets
|
254
|
+
|
255
|
+
if err
|
256
|
+
raise TarError, err.chomp
|
257
|
+
end
|
258
|
+
}
|
259
|
+
self
|
260
|
+
end
|
261
|
+
|
262
|
+
# Alias for self.extract_archive
|
263
|
+
def self.expand_archive(*args)
|
264
|
+
self.extract_archive(*args)
|
265
|
+
end
|
266
|
+
|
267
|
+
# Alias for self.extract_archive
|
268
|
+
def self.extract(*args)
|
269
|
+
self.extract_archive(*args)
|
270
|
+
end
|
271
|
+
|
272
|
+
# Alias for self.extract_archive
|
273
|
+
def self.expand(*args)
|
274
|
+
self.extract_archive(*args)
|
275
|
+
end
|
276
|
+
end
|
277
|
+
end
|
data/test/tc_archive.rb
ADDED
@@ -0,0 +1,158 @@
|
|
1
|
+
###############################################################################
|
2
|
+
# tc_archive.rb
|
3
|
+
#
|
4
|
+
# Test suite for the archive-tarsimple package.
|
5
|
+
###############################################################################
|
6
|
+
base = File.basename(Dir.pwd)
|
7
|
+
if base == 'test' || base =~ /archive-tar-external/i
|
8
|
+
Dir.chdir('..') if base == 'test'
|
9
|
+
$LOAD_PATH.unshift(Dir.pwd + '/lib')
|
10
|
+
Dir.chdir('test') rescue nil
|
11
|
+
end
|
12
|
+
|
13
|
+
require 'archive/tar_external'
|
14
|
+
require 'test/unit'
|
15
|
+
include Archive
|
16
|
+
|
17
|
+
class TC_Archive < Test::Unit::TestCase
|
18
|
+
def setup
|
19
|
+
@t = Tar::External.new('test.tar')
|
20
|
+
@tar_name = 'test.tar'
|
21
|
+
@pattern = '*.txt'
|
22
|
+
@archive = 'temp.tar.gz'
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_version
|
26
|
+
assert_equal('1.2.0', Tar::External::VERSION)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_constructor
|
30
|
+
assert_nothing_raised{ Tar::External.new(@tar_name) }
|
31
|
+
assert_nothing_raised{ Tar::External.new(@tar_name, '*.txt') }
|
32
|
+
assert_raises(ArgumentError){ Tar::External.new }
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_tar_program
|
36
|
+
assert_respond_to(@t, :tar_program)
|
37
|
+
assert_equal('tar', @t.tar_program)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_archive_name
|
41
|
+
assert_respond_to(@t, :archive_name)
|
42
|
+
assert_respond_to(@t, :archive_name=)
|
43
|
+
|
44
|
+
assert_equal('test.tar', @t.archive_name)
|
45
|
+
assert_nothing_raised{ @t.archive_name }
|
46
|
+
assert_nothing_raised{ @t.archive_name = 'foo' }
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_compressed_archive_name_get
|
50
|
+
assert_respond_to(@t, :compressed_archive_name)
|
51
|
+
assert_nil(@t.compressed_archive_name)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_compressed_archive_name_set
|
55
|
+
assert_respond_to(@t, :compressed_archive_name=)
|
56
|
+
assert_nothing_raised{ @t.compressed_archive_name = 'test.tar.gz' }
|
57
|
+
assert_equal('test.tar.gz', @t.compressed_archive_name)
|
58
|
+
assert_equal('test.tar', @t.archive_name)
|
59
|
+
|
60
|
+
assert_nothing_raised{ @t.compressed_archive_name = 'test.tgz' }
|
61
|
+
assert_equal('test.tgz', @t.compressed_archive_name)
|
62
|
+
assert_equal('test.tar', @t.archive_name)
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_create_archive_basic
|
66
|
+
assert_respond_to(@t, :create_archive)
|
67
|
+
assert_respond_to(@t, :create) # Alias
|
68
|
+
|
69
|
+
assert_raises(ArgumentError){ @t.create_archive }
|
70
|
+
assert_raises(TarError){ @t.create_archive('*.blah') }
|
71
|
+
|
72
|
+
assert_nothing_raised{ @t.create_archive(@pattern) }
|
73
|
+
assert(@t.create_archive(@pattern))
|
74
|
+
assert(File.exists?(@tar_name))
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_compress_archive_basic
|
78
|
+
assert_respond_to(@t, :compress_archive)
|
79
|
+
assert_respond_to(@t, :compress) # Alias
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_compress_archive_gzip
|
83
|
+
assert_nothing_raised{ @t.create_archive('*.txt') }
|
84
|
+
assert_nothing_raised{ @t.compress_archive }
|
85
|
+
|
86
|
+
assert_equal('test.tar.gz', @t.compressed_archive_name)
|
87
|
+
assert(File.exists?('test.tar.gz'))
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_compress_archive_bzip2
|
91
|
+
assert_nothing_raised{ @t.create_archive('*.txt') }
|
92
|
+
assert_nothing_raised{ @t.compress_archive('bzip2') }
|
93
|
+
assert(File.exists?('test.tar.bz2'))
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_uncompress_archive
|
97
|
+
assert_respond_to(@t, :uncompress_archive)
|
98
|
+
assert_nothing_raised{ @t.create_archive('*.txt') }
|
99
|
+
assert_nothing_raised{ @t.compress_archive }
|
100
|
+
assert_nothing_raised{ @t.uncompress_archive }
|
101
|
+
assert(!File.exists?('test.tar.gz'))
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_uncompress_archive_class_method
|
105
|
+
assert_respond_to(Tar::External, :uncompress_archive)
|
106
|
+
assert_respond_to(Tar::External, :uncompress)
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_archive_info
|
110
|
+
assert_respond_to(@t, :archive_info)
|
111
|
+
assert_nothing_raised{ @t.create_archive('*.txt') }
|
112
|
+
assert_equal(['temp1.txt','temp2.txt','temp3.txt'], @t.archive_info)
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_add_to_archive
|
116
|
+
assert_respond_to(@t,:add_to_archive)
|
117
|
+
assert_nothing_raised{ @t.create_archive('temp1.txt') }
|
118
|
+
assert_nothing_raised{ @t.add_to_archive('temp2.txt') }
|
119
|
+
assert_nothing_raised{ @t.add_to_archive('temp2.txt','temp3.txt') }
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_update_archive
|
123
|
+
assert_respond_to(@t, :update_archive)
|
124
|
+
assert_nothing_raised{ @t.create_archive('*.txt') }
|
125
|
+
assert_nothing_raised{ @t.update_archive('temp2.txt') }
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_extract_archive_basic
|
129
|
+
assert_respond_to(@t, :extract_archive)
|
130
|
+
assert_respond_to(@t, :expand_archive) # Alias
|
131
|
+
assert_respond_to(@t, :extract) # Alias
|
132
|
+
assert_respond_to(@t, :expand) # Alias
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_extract_archive_advanced
|
136
|
+
@t.tar_program = 'gtar' if PLATFORM.match('solaris')
|
137
|
+
assert_nothing_raised{ @t.create('*.txt') }
|
138
|
+
assert_raises(TarError){ @t.expand('blah.txt') }
|
139
|
+
|
140
|
+
assert_nothing_raised{ @t.extract_archive }
|
141
|
+
assert_nothing_raised{ @t.extract_archive('temp2.txt') }
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_extract_archive_class_method
|
145
|
+
assert_respond_to(Tar::External, :extract_archive)
|
146
|
+
assert_respond_to(Tar::External, :expand_archive)
|
147
|
+
assert_respond_to(Tar::External, :extract)
|
148
|
+
assert_respond_to(Tar::External, :expand)
|
149
|
+
end
|
150
|
+
|
151
|
+
def teardown
|
152
|
+
@t = nil
|
153
|
+
File.unlink('test.tar') if File.exists?('test.tar')
|
154
|
+
File.unlink('test.tar.gz') if File.exists?('test.tar.gz')
|
155
|
+
File.unlink('test.tar.bz2') if File.exists?('test.tar.bz2')
|
156
|
+
File.unlink('test.tar.zip') if File.exists?('test.tar.zip')
|
157
|
+
end
|
158
|
+
end
|
data/test/temp1.txt
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
This is a temporary text file
|
data/test/temp2.txt
ADDED
data/test/temp3.txt
ADDED
metadata
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.11
|
3
|
+
specification_version: 1
|
4
|
+
name: archive-tar-external
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 1.2.0
|
7
|
+
date: 2006-04-07 00:00:00 -06:00
|
8
|
+
summary: A simple way to create tar archives using external calls
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: djberg96@gmail.com
|
12
|
+
homepage: http://www.rubyforge.org/shards
|
13
|
+
rubyforge_project:
|
14
|
+
description: A simple way to create tar archives using external calls
|
15
|
+
autorequire:
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
authors:
|
29
|
+
- Daniel Berger
|
30
|
+
files:
|
31
|
+
- doc/tar_external.txt
|
32
|
+
- lib/archive
|
33
|
+
- lib/archive/tar_external.rb
|
34
|
+
- test/tc_archive.rb
|
35
|
+
- test/temp1.txt
|
36
|
+
- test/temp2.txt
|
37
|
+
- test/temp3.txt
|
38
|
+
- README
|
39
|
+
- CHANGES
|
40
|
+
test_files:
|
41
|
+
- test/tc_archive.rb
|
42
|
+
rdoc_options: []
|
43
|
+
|
44
|
+
extra_rdoc_files:
|
45
|
+
- README
|
46
|
+
- CHANGES
|
47
|
+
executables: []
|
48
|
+
|
49
|
+
extensions: []
|
50
|
+
|
51
|
+
requirements: []
|
52
|
+
|
53
|
+
dependencies: []
|
54
|
+
|