minitar 0.12.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minitar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Austin Ziegler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-22 00:00:00.000000000 Z
11
+ date: 2024-08-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -184,6 +184,34 @@ dependencies:
184
184
  - - "~>"
185
185
  - !ruby/object:Gem::Version
186
186
  version: '1.0'
187
+ - !ruby/object:Gem::Dependency
188
+ name: standard-minitest
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - "~>"
192
+ - !ruby/object:Gem::Version
193
+ version: '1.0'
194
+ type: :development
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - "~>"
199
+ - !ruby/object:Gem::Version
200
+ version: '1.0'
201
+ - !ruby/object:Gem::Dependency
202
+ name: standard-thread_safety
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - "~>"
206
+ - !ruby/object:Gem::Version
207
+ version: '1.0'
208
+ type: :development
209
+ prerelease: false
210
+ version_requirements: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - "~>"
213
+ - !ruby/object:Gem::Version
214
+ version: '1.0'
187
215
  - !ruby/object:Gem::Dependency
188
216
  name: simplecov
189
217
  requirement: !ruby/object:Gem::Requirement
@@ -230,17 +258,16 @@ files:
230
258
  - Rakefile
231
259
  - docs/bsdl.txt
232
260
  - docs/ruby.txt
233
- - lib/archive-tar-minitar.rb
234
- - lib/archive/tar/minitar.rb
235
- - lib/archive/tar/minitar/input.rb
236
- - lib/archive/tar/minitar/output.rb
237
- - lib/archive/tar/minitar/posix_header.rb
238
- - lib/archive/tar/minitar/reader.rb
239
- - lib/archive/tar/minitar/writer.rb
240
261
  - lib/minitar.rb
241
- - support/hoe/deprecated_gem.rb
262
+ - lib/minitar/input.rb
263
+ - lib/minitar/output.rb
264
+ - lib/minitar/posix_header.rb
265
+ - lib/minitar/reader.rb
266
+ - lib/minitar/writer.rb
242
267
  - test/minitest_helper.rb
243
268
  - test/support/tar_test_helpers.rb
269
+ - test/test_issue_46.rb
270
+ - test/test_minitar.rb
244
271
  - test/test_tar_header.rb
245
272
  - test/test_tar_input.rb
246
273
  - test/test_tar_output.rb
@@ -255,9 +282,7 @@ metadata:
255
282
  source_code_uri: https://github.com/halostatue/minitar/
256
283
  bug_tracker_uri: https://github.com/halostatue/minitar/issues
257
284
  rubygems_mfa_required: 'true'
258
- post_install_message: |
259
- The `minitar` executable is no longer bundled with `minitar`. If you are
260
- expecting this executable, make sure you also install `minitar-cli`.
285
+ post_install_message:
261
286
  rdoc_options:
262
287
  - "--main"
263
288
  - README.rdoc
@@ -267,14 +292,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
267
292
  requirements:
268
293
  - - ">="
269
294
  - !ruby/object:Gem::Version
270
- version: '1.8'
295
+ version: '3.1'
271
296
  required_rubygems_version: !ruby/object:Gem::Requirement
272
297
  requirements:
273
298
  - - ">="
274
299
  - !ruby/object:Gem::Version
275
300
  version: '0'
276
301
  requirements: []
277
- rubygems_version: 3.5.17
302
+ rubygems_version: 3.4.19
278
303
  signing_key:
279
304
  specification_version: 4
280
305
  summary: The minitar library is a pure-Ruby library that provides the ability to deal
@@ -1,278 +0,0 @@
1
- # coding: utf-8
2
-
3
- ##
4
- module Archive; end
5
-
6
- ##
7
- module Archive::Tar; end
8
-
9
- ##
10
- module Archive::Tar::Minitar; end
11
-
12
- # Implements the POSIX tar header as a Ruby class. The structure of
13
- # the POSIX tar header is:
14
- #
15
- # struct tarfile_entry_posix
16
- # { // pack/unpack
17
- # char name[100]; // ASCII (+ Z unless filled) a100/Z100
18
- # char mode[8]; // 0 padded, octal, null a8 /A8
19
- # char uid[8]; // 0 padded, octal, null a8 /A8
20
- # char gid[8]; // 0 padded, octal, null a8 /A8
21
- # char size[12]; // 0 padded, octal, null a12 /A12
22
- # char mtime[12]; // 0 padded, octal, null a12 /A12
23
- # char checksum[8]; // 0 padded, octal, null, space a8 /A8
24
- # char typeflag[1]; // see below a /a
25
- # char linkname[100]; // ASCII + (Z unless filled) a100/Z100
26
- # char magic[6]; // "ustar\0" a6 /A6
27
- # char version[2]; // "00" a2 /A2
28
- # char uname[32]; // ASCIIZ a32 /Z32
29
- # char gname[32]; // ASCIIZ a32 /Z32
30
- # char devmajor[8]; // 0 padded, octal, null a8 /A8
31
- # char devminor[8]; // 0 padded, octal, null a8 /A8
32
- # char prefix[155]; // ASCII (+ Z unless filled) a155/Z155
33
- # };
34
- #
35
- # The #typeflag is one of several known values.
36
- #
37
- # POSIX indicates that "A POSIX-compliant implementation must treat any
38
- # unrecognized typeflag value as a regular file."
39
- class Archive::Tar::Minitar::PosixHeader
40
- BLOCK_SIZE = 512
41
- MAGIC_BYTES = "ustar".freeze
42
-
43
- GNU_EXT_LONG_LINK = "././@LongLink"
44
-
45
- # Fields that must be set in a POSIX tar(1) header.
46
- REQUIRED_FIELDS = [:name, :size, :prefix, :mode].freeze
47
- # Fields that may be set in a POSIX tar(1) header.
48
- OPTIONAL_FIELDS = [
49
- :uid, :gid, :mtime, :checksum, :typeflag, :linkname, :magic, :version,
50
- :uname, :gname, :devmajor, :devminor
51
- ].freeze
52
-
53
- # All fields available in a POSIX tar(1) header.
54
- FIELDS = (REQUIRED_FIELDS + OPTIONAL_FIELDS).freeze
55
-
56
- FIELDS.each do |f|
57
- attr_reader f.to_sym unless f.to_sym == :name
58
- end
59
-
60
- # The name of the file. By default, limited to 100 bytes. Required. May be
61
- # longer (up to BLOCK_SIZE bytes) if using the GNU long name tar extension.
62
- attr_accessor :name
63
-
64
- # The pack format passed to Array#pack for encoding a header.
65
- HEADER_PACK_FORMAT = "a100a8a8a8a12a12a7aaa100a6a2a32a32a8a8a155".freeze
66
- # The unpack format passed to String#unpack for decoding a header.
67
- HEADER_UNPACK_FORMAT = "Z100A8A8A8A12A12A8aZ100A6A2Z32Z32A8A8Z155".freeze
68
-
69
- class << self
70
- # Creates a new PosixHeader from a data stream.
71
- def from_stream(stream)
72
- from_data(stream.read(BLOCK_SIZE))
73
- end
74
-
75
- # Creates a new PosixHeader from a data stream. Deprecated; use
76
- # PosixHeader.from_stream instead.
77
- def new_from_stream(stream)
78
- warn "#{__method__} has been deprecated; use from_stream instead."
79
- from_stream(stream)
80
- end
81
-
82
- # Creates a new PosixHeader from a BLOCK_SIZE-byte data buffer.
83
- def from_data(data)
84
- fields = data.unpack(HEADER_UNPACK_FORMAT)
85
- name = fields.shift
86
- mode = fields.shift.oct
87
- uid = fields.shift.oct
88
- gid = fields.shift.oct
89
- size = strict_oct(fields.shift)
90
- mtime = fields.shift.oct
91
- checksum = fields.shift.oct
92
- typeflag = fields.shift
93
- linkname = fields.shift
94
- magic = fields.shift
95
- version = fields.shift.oct
96
- uname = fields.shift
97
- gname = fields.shift
98
- devmajor = fields.shift.oct
99
- devminor = fields.shift.oct
100
- prefix = fields.shift
101
-
102
- empty = !data.each_byte.any?(&:nonzero?)
103
-
104
- new(
105
- :name => name,
106
- :mode => mode,
107
- :uid => uid,
108
- :gid => gid,
109
- :size => size,
110
- :mtime => mtime,
111
- :checksum => checksum,
112
- :typeflag => typeflag,
113
- :magic => magic,
114
- :version => version,
115
- :uname => uname,
116
- :gname => gname,
117
- :devmajor => devmajor,
118
- :devminor => devminor,
119
- :prefix => prefix,
120
- :empty => empty,
121
- :linkname => linkname
122
- )
123
- end
124
-
125
- private
126
-
127
- def strict_oct(string)
128
- return string.oct if string =~ /\A[0-7 ]*\z/
129
- raise ArgumentError, "#{string.inspect} is not a valid octal string"
130
- end
131
- end
132
-
133
- # Creates a new PosixHeader. A PosixHeader cannot be created unless
134
- # +name+, +size+, +prefix+, and +mode+ are provided.
135
- def initialize(v)
136
- REQUIRED_FIELDS.each do |f|
137
- raise ArgumentError, "Field #{f} is required." unless v.key?(f)
138
- end
139
-
140
- v[:mtime] = v[:mtime].to_i
141
- v[:checksum] ||= ""
142
- v[:typeflag] ||= "0"
143
- v[:magic] ||= MAGIC_BYTES
144
- v[:version] ||= "00"
145
-
146
- FIELDS.each do |f|
147
- instance_variable_set(:"@#{f}", v[f])
148
- end
149
-
150
- @empty = v[:empty]
151
- end
152
-
153
- # Indicates if the header was an empty header.
154
- def empty?
155
- @empty
156
- end
157
-
158
- # Indicates if the header has a valid magic value.
159
- def valid?
160
- empty? || @magic == MAGIC_BYTES
161
- end
162
-
163
- # Returns +true+ if the header is a long name special header which indicates
164
- # that the next block of data is the filename.
165
- def long_name?
166
- typeflag == "L" && name == GNU_EXT_LONG_LINK
167
- end
168
-
169
- # A string representation of the header.
170
- def to_s
171
- update_checksum
172
- header(@checksum)
173
- end
174
- alias_method :to_str, :to_s
175
-
176
- # Update the checksum field.
177
- def update_checksum
178
- hh = header(" " * 8)
179
- @checksum = oct(calculate_checksum(hh), 6)
180
- end
181
-
182
- private
183
-
184
- include Archive::Tar::Minitar::ByteSize
185
-
186
- def oct(num, len)
187
- if num.nil?
188
- "\0" * (len + 1)
189
- else
190
- "%0#{len}o" % num
191
- end
192
- end
193
-
194
- def calculate_checksum(hdr)
195
- hdr.unpack("C*").inject { |a, e| a + e }
196
- end
197
-
198
- def header(chksum)
199
- arr = [name, oct(mode, 7), oct(uid, 7), oct(gid, 7), oct(size, 11),
200
- oct(mtime, 11), chksum, " ", typeflag, linkname, magic, version,
201
- uname, gname, oct(devmajor, 7), oct(devminor, 7), prefix]
202
- str = arr.pack(HEADER_PACK_FORMAT)
203
- str + "\0" * ((BLOCK_SIZE - bytesize(str)) % BLOCK_SIZE)
204
- end
205
-
206
- ##
207
- # :attr_reader: size
208
- # The size of the file. Required.
209
-
210
- ##
211
- # :attr_reader: prefix
212
- # The prefix of the file; the path before #name. Limited to 155 bytes.
213
- # Required.
214
-
215
- ##
216
- # :attr_reader: mode
217
- # The Unix file mode of the file. Stored as an octal integer. Required.
218
-
219
- ##
220
- # :attr_reader: uid
221
- # The Unix owner user ID of the file. Stored as an octal integer.
222
-
223
- ##
224
- # :attr_reader: uname
225
- # The user name of the Unix owner of the file.
226
-
227
- ##
228
- # :attr_reader: gid
229
- # The Unix owner group ID of the file. Stored as an octal integer.
230
-
231
- ##
232
- # :attr_reader: gname
233
- # The group name of the Unix owner of the file.
234
-
235
- ##
236
- # :attr_reader: mtime
237
- # The modification time of the file in epoch seconds. Stored as an
238
- # octal integer.
239
-
240
- ##
241
- # :attr_reader: checksum
242
- # The checksum of the file. Stored as an octal integer. Calculated
243
- # before encoding the header as a string.
244
-
245
- ##
246
- # :attr_reader: typeflag
247
- # The type of record in the file.
248
- #
249
- # +0+:: Regular file. NULL should be treated as a synonym, for compatibility
250
- # purposes.
251
- # +1+:: Hard link.
252
- # +2+:: Symbolic link.
253
- # +3+:: Character device node.
254
- # +4+:: Block device node.
255
- # +5+:: Directory.
256
- # +6+:: FIFO node.
257
- # +7+:: Reserved.
258
-
259
- ##
260
- # :attr_reader: linkname
261
- # The name of the link stored. Not currently used.
262
-
263
- ##
264
- # :attr_reader: magic
265
- # Always "ustar\0".
266
-
267
- ##
268
- # :attr_reader: version
269
- # Always "00"
270
-
271
- ##
272
- # :attr_reader: devmajor
273
- # The major device ID. Not currently used.
274
-
275
- ##
276
- # :attr_reader: devminor
277
- # The minor device ID. Not currently used.
278
- end
@@ -1,311 +0,0 @@
1
- # coding: utf-8
2
-
3
- ##
4
- module Archive; end
5
-
6
- ##
7
- module Archive::Tar; end
8
-
9
- require "fileutils"
10
- require "rbconfig"
11
-
12
- class << Archive::Tar # :nodoc:
13
- def const_missing(const) # :nodoc:
14
- case const
15
- when :PosixHeader
16
- warn "Archive::Tar::PosixHeader has been renamed to " \
17
- "Archive::Tar::Minitar::PosixHeader"
18
- const_set :PosixHeader, Archive::Tar::Minitar::PosixHeader
19
- else
20
- super
21
- end
22
- end
23
-
24
- private
25
-
26
- def included(mod)
27
- return if modules.include?(mod)
28
- warn "Including Minitar via the #{self} namespace is deprecated."
29
- modules.add mod
30
- end
31
-
32
- def modules
33
- require "set"
34
- @modules ||= Set.new
35
- end
36
- end
37
-
38
- # == Synopsis
39
- #
40
- # Using minitar is easy. The simplest case is:
41
- #
42
- # require 'zlib'
43
- # require 'minitar'
44
- #
45
- # # Packs everything that matches Find.find('tests').
46
- # # test.tar will automatically be closed by Minitar.pack.
47
- # Minitar.pack('tests', File.open('test.tar', 'wb'))
48
- #
49
- # # Unpacks 'test.tar' to 'x', creating 'x' if necessary.
50
- # Minitar.unpack('test.tar', 'x')
51
- #
52
- # A gzipped tar can be written with:
53
- #
54
- # # test.tgz will be closed automatically.
55
- # Minitar.pack('tests', Zlib::GzipWriter.new(File.open('test.tgz', 'wb'))
56
- #
57
- # # test.tgz will be closed automatically.
58
- # Minitar.unpack(Zlib::GzipReader.new(File.open('test.tgz', 'rb')), 'x')
59
- #
60
- # As the case above shows, one need not write to a file. However, it will
61
- # sometimes require that one dive a little deeper into the API, as in the case
62
- # of StringIO objects. Note that I'm not providing a block with
63
- # Minitar::Output, as Minitar::Output#close automatically closes both the
64
- # Output object and the wrapped data stream object.
65
- #
66
- # begin
67
- # sgz = Zlib::GzipWriter.new(StringIO.new(""))
68
- # tar = Output.new(sgz)
69
- # Find.find('tests') do |entry|
70
- # Minitar.pack_file(entry, tar)
71
- # end
72
- # ensure
73
- # # Closes both tar and sgz.
74
- # tar.close
75
- # end
76
- module Archive::Tar::Minitar
77
- VERSION = "0.12.1".freeze # :nodoc:
78
-
79
- # The base class for any minitar error.
80
- Error = Class.new(::StandardError)
81
- # Raised when a wrapped data stream class is not seekable.
82
- NonSeekableStream = Class.new(Error)
83
- # The exception raised when operations are performed on a stream that has
84
- # previously been closed.
85
- ClosedStream = Class.new(Error)
86
- # The exception raised when a filename exceeds 256 bytes in length, the
87
- # maximum supported by the standard Tar format.
88
- FileNameTooLong = Class.new(Error)
89
- # The exception raised when a data stream ends before the amount of data
90
- # expected in the archive's PosixHeader.
91
- UnexpectedEOF = Class.new(StandardError)
92
- # The exception raised when a file contains a relative path in secure mode
93
- # (the default for this version).
94
- SecureRelativePathError = Class.new(Error)
95
- # The exception raised when a file contains an invalid Posix header.
96
- InvalidTarStream = Class.new(Error)
97
-
98
- class << self
99
- # Tests if +path+ refers to a directory. Fixes an apparently
100
- # corrupted <tt>stat()</tt> call on Windows.
101
- def dir?(path)
102
- # rubocop:disable Style/CharacterLiteral
103
- File.directory?((path[-1] == ?/) ? path : "#{path}/")
104
- # rubocop:enable Style/CharacterLiteral
105
- end
106
-
107
- # A convenience method for wrapping Archive::Tar::Minitar::Input.open
108
- # (mode +r+) and Archive::Tar::Minitar::Output.open (mode +w+). No other
109
- # modes are currently supported.
110
- def open(dest, mode = "r", &block)
111
- case mode
112
- when "r"
113
- Input.open(dest, &block)
114
- when "w"
115
- Output.open(dest, &block)
116
- else
117
- raise "Unknown open mode for Archive::Tar::Minitar.open."
118
- end
119
- end
120
-
121
- def const_missing(c) # :nodoc:
122
- case c
123
- when :BlockRequired
124
- warn "This constant has been removed."
125
- const_set(:BlockRequired, Class.new(StandardError))
126
- else
127
- super
128
- end
129
- end
130
-
131
- def windows? # :nodoc:
132
- RbConfig::CONFIG["host_os"] =~ /^(mswin|mingw|cygwin)/
133
- end
134
-
135
- # A convenience method to pack the file provided. +entry+ may either be a
136
- # filename (in which case various values for the file (see below) will be
137
- # obtained from <tt>File#stat(entry)</tt> or a Hash with the fields:
138
- #
139
- # <tt>:name</tt>:: The filename to be packed into the archive. Required.
140
- # <tt>:mode</tt>:: The mode to be applied.
141
- # <tt>:uid</tt>:: The user owner of the file. (Ignored on Windows.)
142
- # <tt>:gid</tt>:: The group owner of the file. (Ignored on Windows.)
143
- # <tt>:mtime</tt>:: The modification Time of the file.
144
- #
145
- # During packing, if a block is provided, #pack_file yields an +action+
146
- # Symol, the full name of the file being packed, and a Hash of
147
- # statistical information, just as with
148
- # Archive::Tar::Minitar::Input#extract_entry.
149
- #
150
- # The +action+ will be one of:
151
- # <tt>:dir</tt>:: The +entry+ is a directory.
152
- # <tt>:file_start</tt>:: The +entry+ is a file; the extract of the
153
- # file is just beginning.
154
- # <tt>:file_progress</tt>:: Yielded every 4096 bytes during the extract
155
- # of the +entry+.
156
- # <tt>:file_done</tt>:: Yielded when the +entry+ is completed.
157
- #
158
- # The +stats+ hash contains the following keys:
159
- # <tt>:current</tt>:: The current total number of bytes read in the
160
- # +entry+.
161
- # <tt>:currinc</tt>:: The current number of bytes read in this read
162
- # cycle.
163
- # <tt>:name</tt>:: The filename to be packed into the tarchive.
164
- # *REQUIRED*.
165
- # <tt>:mode</tt>:: The mode to be applied.
166
- # <tt>:uid</tt>:: The user owner of the file. (+nil+ on Windows.)
167
- # <tt>:gid</tt>:: The group owner of the file. (+nil+ on Windows.)
168
- # <tt>:mtime</tt>:: The modification Time of the file.
169
- def pack_file(entry, outputter) # :yields action, name, stats:
170
- if outputter.is_a?(Archive::Tar::Minitar::Output)
171
- outputter = outputter.tar
172
- end
173
-
174
- stats = {}
175
-
176
- if entry.is_a?(Hash)
177
- name = entry[:name]
178
- entry.each { |kk, vv| stats[kk] = vv unless vv.nil? }
179
- else
180
- name = entry
181
- end
182
-
183
- name = name.sub(%r{\./}, "")
184
- stat = File.stat(name)
185
- stats[:mode] ||= stat.mode
186
- stats[:mtime] ||= stat.mtime
187
- stats[:size] = stat.size
188
-
189
- if windows?
190
- stats[:uid] = nil
191
- stats[:gid] = nil
192
- else
193
- stats[:uid] ||= stat.uid
194
- stats[:gid] ||= stat.gid
195
- end
196
-
197
- if File.file?(name)
198
- outputter.add_file_simple(name, stats) do |os|
199
- stats[:current] = 0
200
- yield :file_start, name, stats if block_given?
201
- File.open(name, "rb") do |ff|
202
- until ff.eof?
203
- stats[:currinc] = os.write(ff.read(4096))
204
- stats[:current] += stats[:currinc]
205
- yield :file_progress, name, stats if block_given?
206
- end
207
- end
208
- yield :file_done, name, stats if block_given?
209
- end
210
- elsif dir?(name)
211
- yield :dir, name, stats if block_given?
212
- outputter.mkdir(name, stats)
213
- else
214
- raise "Don't yet know how to pack this type of file."
215
- end
216
- end
217
-
218
- # A convenience method to pack files specified by +src+ into +dest+. If
219
- # +src+ is an Array, then each file detailed therein will be packed into
220
- # the resulting Archive::Tar::Minitar::Output stream; if +recurse_dirs+ is
221
- # true, then directories will be recursed.
222
- #
223
- # If +src+ is not an Array, it will be treated as the result of Find.find;
224
- # all files matching will be packed.
225
- def pack(src, dest, recurse_dirs = true, &block)
226
- require "find"
227
- Output.open(dest) do |outp|
228
- if src.is_a?(Array)
229
- src.each do |entry|
230
- if dir?(entry) && recurse_dirs
231
- Find.find(entry) do |ee|
232
- pack_file(ee, outp, &block)
233
- end
234
- else
235
- pack_file(entry, outp, &block)
236
- end
237
- end
238
- else
239
- Find.find(src) do |entry|
240
- pack_file(entry, outp, &block)
241
- end
242
- end
243
- end
244
- end
245
-
246
- # A convenience method to unpack files from +src+ into the directory
247
- # specified by +dest+. Only those files named explicitly in +files+
248
- # will be extracted.
249
- def unpack(src, dest, files = [], options = {}, &block)
250
- Input.open(src) do |inp|
251
- if File.exist?(dest) && !dir?(dest)
252
- raise "Can't unpack to a non-directory."
253
- end
254
-
255
- FileUtils.mkdir_p(dest) unless File.exist?(dest)
256
-
257
- inp.each do |entry|
258
- if files.empty? || files.include?(entry.full_name)
259
- inp.extract_entry(dest, entry, options, &block)
260
- end
261
- end
262
- end
263
- end
264
-
265
- # Check whether +io+ can seek without errors.
266
- def seekable?(io, methods = nil)
267
- # The IO class throws an exception at runtime if we try to change
268
- # position on a non-regular file.
269
- if io.respond_to?(:stat)
270
- io.stat.file?
271
- else
272
- # Duck-type the rest of this.
273
- methods ||= [:pos, :pos=, :seek, :rewind]
274
- methods = [methods] unless methods.is_a?(Array)
275
- methods.all? { |m| io.respond_to?(m) }
276
- end
277
- end
278
-
279
- private
280
-
281
- def included(mod)
282
- return if modules.include?(mod)
283
- warn "Including #{self} has been deprecated (Minitar will become a class)."
284
- modules << mod
285
- end
286
-
287
- def modules
288
- require "set"
289
- @modules ||= Set.new
290
- end
291
- end
292
-
293
- # This exists to make bytesize implementations work across Ruby versions.
294
- module ByteSize # :nodoc:
295
- private
296
-
297
- if "".respond_to?(:bytesize)
298
- def bytesize(item)
299
- item.bytesize
300
- end
301
- else
302
- def bytesize(item)
303
- item.size
304
- end
305
- end
306
- end
307
- end
308
-
309
- require "archive/tar/minitar/posix_header"
310
- require "archive/tar/minitar/input"
311
- require "archive/tar/minitar/output"
@@ -1,3 +0,0 @@
1
- # coding: utf-8
2
-
3
- require "archive/tar/minitar"