fileutils 1.1.0 → 1.5.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.
- checksums.yaml +4 -4
- data/README.md +0 -2
- data/Rakefile +10 -3
- data/fileutils.gemspec +16 -10
- data/lib/fileutils.rb +183 -145
- metadata +9 -28
- data/.gitignore +0 -9
- data/.travis.yml +0 -13
- data/Gemfile +0 -4
- data/bin/console +0 -14
- data/bin/setup +0 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 67fa33577498dff5705331ce6453a3c11ff34d209343310f647d4cb404158617
|
|
4
|
+
data.tar.gz: 4608e153f0c69749fbf7e4d456388c44fdba1a3a99f5b328c71c283ccd7ca5a3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: db0b5ce907f782c5ba306ca0a8811c825ec1f97a47731ccc08b2ddc7e13160d7d40986afd1b744cef7b941b2bef2f1c1c4017eb8fc616e8695b506d5ce8cc8ae
|
|
7
|
+
data.tar.gz: ccbb52c0a277e03e29dfff22e5bb26b3dc30e7ede6db803f130047bb039cb12161d7f3ecafac5f0956959fde6276b16c68085f30be7c8edae019e7d313301b53
|
data/README.md
CHANGED
data/Rakefile
CHANGED
|
@@ -4,9 +4,16 @@ require "rake/testtask"
|
|
|
4
4
|
JRuby.objectspace = true if RUBY_PLATFORM == 'java'
|
|
5
5
|
|
|
6
6
|
Rake::TestTask.new(:test) do |t|
|
|
7
|
-
t.libs << "test
|
|
8
|
-
t.
|
|
9
|
-
t.test_files = FileList[
|
|
7
|
+
t.libs << "test/lib"
|
|
8
|
+
t.ruby_opts << "-rhelper"
|
|
9
|
+
t.test_files = FileList["test/**/test_*.rb"]
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
task :sync_tool do
|
|
13
|
+
require 'fileutils'
|
|
14
|
+
FileUtils.cp "../ruby/tool/lib/test/unit/core_assertions.rb", "./test/lib"
|
|
15
|
+
FileUtils.cp "../ruby/tool/lib/envutil.rb", "./test/lib"
|
|
16
|
+
FileUtils.cp "../ruby/tool/lib/find_executable.rb", "./test/lib"
|
|
10
17
|
end
|
|
11
18
|
|
|
12
19
|
task :default => :test
|
data/fileutils.gemspec
CHANGED
|
@@ -1,25 +1,31 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
source_version = ["", "lib/"].find do |dir|
|
|
4
|
+
begin
|
|
5
|
+
break File.open(File.join(__dir__, "#{dir}fileutils.rb")) {|f|
|
|
6
|
+
f.gets("\n VERSION = ")
|
|
7
|
+
f.gets[/\s*"(.+)"/, 1]
|
|
8
|
+
}
|
|
9
|
+
rescue Errno::ENOENT
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
3
13
|
Gem::Specification.new do |s|
|
|
4
14
|
s.name = "fileutils"
|
|
5
|
-
s.version =
|
|
15
|
+
s.version = source_version
|
|
6
16
|
s.summary = "Several file utility methods for copying, moving, removing, etc."
|
|
7
17
|
s.description = "Several file utility methods for copying, moving, removing, etc."
|
|
8
18
|
|
|
9
19
|
s.require_path = %w{lib}
|
|
10
|
-
s.files = ["
|
|
20
|
+
s.files = ["LICENSE.txt", "README.md", "Rakefile", "fileutils.gemspec", "lib/fileutils.rb"]
|
|
11
21
|
s.required_ruby_version = ">= 2.3.0"
|
|
12
22
|
|
|
13
23
|
s.authors = ["Minero Aoki"]
|
|
14
24
|
s.email = [nil]
|
|
15
25
|
s.homepage = "https://github.com/ruby/fileutils"
|
|
16
|
-
s.
|
|
17
|
-
|
|
18
|
-
if s.respond_to?(:metadata=)
|
|
19
|
-
s.metadata = {
|
|
20
|
-
"source_code_uri" => "https://github.com/ruby/fileutils"
|
|
21
|
-
}
|
|
22
|
-
end
|
|
26
|
+
s.licenses = ["Ruby", "BSD-2-Clause"]
|
|
23
27
|
|
|
24
|
-
s.
|
|
28
|
+
s.metadata = {
|
|
29
|
+
"source_code_uri" => "https://github.com/ruby/fileutils"
|
|
30
|
+
}
|
|
25
31
|
end
|
data/lib/fileutils.rb
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
begin
|
|
4
|
+
require 'rbconfig'
|
|
5
|
+
rescue LoadError
|
|
6
|
+
# for make mjit-headers
|
|
7
|
+
end
|
|
8
|
+
|
|
2
9
|
#
|
|
3
10
|
# = fileutils.rb
|
|
4
11
|
#
|
|
@@ -15,48 +22,58 @@
|
|
|
15
22
|
#
|
|
16
23
|
# require 'fileutils'
|
|
17
24
|
#
|
|
18
|
-
# FileUtils.cd(dir, options)
|
|
19
|
-
# FileUtils.cd(dir, options) {|dir| block }
|
|
25
|
+
# FileUtils.cd(dir, **options)
|
|
26
|
+
# FileUtils.cd(dir, **options) {|dir| block }
|
|
20
27
|
# FileUtils.pwd()
|
|
21
|
-
# FileUtils.mkdir(dir, options)
|
|
22
|
-
# FileUtils.mkdir(list, options)
|
|
23
|
-
# FileUtils.mkdir_p(dir, options)
|
|
24
|
-
# FileUtils.mkdir_p(list, options)
|
|
25
|
-
# FileUtils.rmdir(dir, options)
|
|
26
|
-
# FileUtils.rmdir(list, options)
|
|
27
|
-
# FileUtils.ln(target, link, options)
|
|
28
|
-
# FileUtils.ln(targets, dir, options)
|
|
29
|
-
# FileUtils.ln_s(target, link, options)
|
|
30
|
-
# FileUtils.ln_s(targets, dir, options)
|
|
31
|
-
# FileUtils.ln_sf(target, link, options)
|
|
32
|
-
# FileUtils.cp(src, dest, options)
|
|
33
|
-
# FileUtils.cp(list, dir, options)
|
|
34
|
-
# FileUtils.cp_r(src, dest, options)
|
|
35
|
-
# FileUtils.cp_r(list, dir, options)
|
|
36
|
-
# FileUtils.mv(src, dest, options)
|
|
37
|
-
# FileUtils.mv(list, dir, options)
|
|
38
|
-
# FileUtils.rm(list, options)
|
|
39
|
-
# FileUtils.rm_r(list, options)
|
|
40
|
-
# FileUtils.rm_rf(list, options)
|
|
41
|
-
# FileUtils.install(src, dest, options)
|
|
42
|
-
# FileUtils.chmod(mode, list, options)
|
|
43
|
-
# FileUtils.chmod_R(mode, list, options)
|
|
44
|
-
# FileUtils.chown(user, group, list, options)
|
|
45
|
-
# FileUtils.chown_R(user, group, list, options)
|
|
46
|
-
# FileUtils.touch(list, options)
|
|
28
|
+
# FileUtils.mkdir(dir, **options)
|
|
29
|
+
# FileUtils.mkdir(list, **options)
|
|
30
|
+
# FileUtils.mkdir_p(dir, **options)
|
|
31
|
+
# FileUtils.mkdir_p(list, **options)
|
|
32
|
+
# FileUtils.rmdir(dir, **options)
|
|
33
|
+
# FileUtils.rmdir(list, **options)
|
|
34
|
+
# FileUtils.ln(target, link, **options)
|
|
35
|
+
# FileUtils.ln(targets, dir, **options)
|
|
36
|
+
# FileUtils.ln_s(target, link, **options)
|
|
37
|
+
# FileUtils.ln_s(targets, dir, **options)
|
|
38
|
+
# FileUtils.ln_sf(target, link, **options)
|
|
39
|
+
# FileUtils.cp(src, dest, **options)
|
|
40
|
+
# FileUtils.cp(list, dir, **options)
|
|
41
|
+
# FileUtils.cp_r(src, dest, **options)
|
|
42
|
+
# FileUtils.cp_r(list, dir, **options)
|
|
43
|
+
# FileUtils.mv(src, dest, **options)
|
|
44
|
+
# FileUtils.mv(list, dir, **options)
|
|
45
|
+
# FileUtils.rm(list, **options)
|
|
46
|
+
# FileUtils.rm_r(list, **options)
|
|
47
|
+
# FileUtils.rm_rf(list, **options)
|
|
48
|
+
# FileUtils.install(src, dest, **options)
|
|
49
|
+
# FileUtils.chmod(mode, list, **options)
|
|
50
|
+
# FileUtils.chmod_R(mode, list, **options)
|
|
51
|
+
# FileUtils.chown(user, group, list, **options)
|
|
52
|
+
# FileUtils.chown_R(user, group, list, **options)
|
|
53
|
+
# FileUtils.touch(list, **options)
|
|
47
54
|
#
|
|
48
|
-
#
|
|
49
|
-
#
|
|
50
|
-
# <tt>:
|
|
51
|
-
#
|
|
55
|
+
# Possible <tt>options</tt> are:
|
|
56
|
+
#
|
|
57
|
+
# <tt>:force</tt> :: forced operation (rewrite files if exist, remove
|
|
58
|
+
# directories if not empty, etc.);
|
|
59
|
+
# <tt>:verbose</tt> :: print command to be run, in bash syntax, before
|
|
60
|
+
# performing it;
|
|
61
|
+
# <tt>:preserve</tt> :: preserve object's group, user and modification
|
|
62
|
+
# time on copying;
|
|
63
|
+
# <tt>:noop</tt> :: no changes are made (usable in combination with
|
|
64
|
+
# <tt>:verbose</tt> which will print the command to run)
|
|
65
|
+
#
|
|
66
|
+
# Each method documents the options that it honours. See also ::commands,
|
|
67
|
+
# ::options and ::options_of methods to introspect which command have which
|
|
68
|
+
# options.
|
|
52
69
|
#
|
|
53
70
|
# All methods that have the concept of a "source" file or directory can take
|
|
54
71
|
# either one file or a list of files in that argument. See the method
|
|
55
72
|
# documentation for examples.
|
|
56
73
|
#
|
|
57
|
-
# There are some `low level' methods, which do not accept
|
|
74
|
+
# There are some `low level' methods, which do not accept keyword arguments:
|
|
58
75
|
#
|
|
59
|
-
# FileUtils.copy_entry(src, dest, preserve = false,
|
|
76
|
+
# FileUtils.copy_entry(src, dest, preserve = false, dereference_root = false, remove_destination = false)
|
|
60
77
|
# FileUtils.copy_file(src, dest, preserve = false, dereference = true)
|
|
61
78
|
# FileUtils.copy_stream(srcstream, deststream)
|
|
62
79
|
# FileUtils.remove_entry(path, force = false)
|
|
@@ -84,12 +101,8 @@
|
|
|
84
101
|
# files/directories. This equates to passing the <tt>:noop</tt> and
|
|
85
102
|
# <tt>:verbose</tt> flags to methods in FileUtils.
|
|
86
103
|
#
|
|
87
|
-
|
|
88
|
-
require 'rbconfig'
|
|
89
|
-
|
|
90
104
|
module FileUtils
|
|
91
|
-
|
|
92
|
-
VERSION = "1.1.0"
|
|
105
|
+
VERSION = "1.5.0"
|
|
93
106
|
|
|
94
107
|
def self.private_module_function(name) #:nodoc:
|
|
95
108
|
module_function name
|
|
@@ -110,12 +123,14 @@ module FileUtils
|
|
|
110
123
|
#
|
|
111
124
|
# Changes the current directory to the directory +dir+.
|
|
112
125
|
#
|
|
113
|
-
# If this method is called with block, resumes to the
|
|
114
|
-
# working directory after the block execution finished.
|
|
126
|
+
# If this method is called with block, resumes to the previous
|
|
127
|
+
# working directory after the block execution has finished.
|
|
128
|
+
#
|
|
129
|
+
# FileUtils.cd('/') # change directory
|
|
115
130
|
#
|
|
116
|
-
# FileUtils.cd('/', :
|
|
131
|
+
# FileUtils.cd('/', verbose: true) # change directory and report it
|
|
117
132
|
#
|
|
118
|
-
# FileUtils.cd('/') do #
|
|
133
|
+
# FileUtils.cd('/') do # change directory
|
|
119
134
|
# # ... # do something
|
|
120
135
|
# end # return to original directory
|
|
121
136
|
#
|
|
@@ -158,9 +173,9 @@ module FileUtils
|
|
|
158
173
|
# Creates one or more directories.
|
|
159
174
|
#
|
|
160
175
|
# FileUtils.mkdir 'test'
|
|
161
|
-
# FileUtils.mkdir %w(
|
|
162
|
-
# FileUtils.mkdir 'notexist', :
|
|
163
|
-
# FileUtils.mkdir 'tmp', :
|
|
176
|
+
# FileUtils.mkdir %w(tmp data)
|
|
177
|
+
# FileUtils.mkdir 'notexist', noop: true # Does not really create.
|
|
178
|
+
# FileUtils.mkdir 'tmp', mode: 0700
|
|
164
179
|
#
|
|
165
180
|
def mkdir(list, mode: nil, noop: nil, verbose: nil)
|
|
166
181
|
list = fu_list(list)
|
|
@@ -179,7 +194,7 @@ module FileUtils
|
|
|
179
194
|
#
|
|
180
195
|
# FileUtils.mkdir_p '/usr/local/lib/ruby'
|
|
181
196
|
#
|
|
182
|
-
# causes to make following directories, if
|
|
197
|
+
# causes to make following directories, if they do not exist.
|
|
183
198
|
#
|
|
184
199
|
# * /usr
|
|
185
200
|
# * /usr/local
|
|
@@ -193,7 +208,9 @@ module FileUtils
|
|
|
193
208
|
fu_output_message "mkdir -p #{mode ? ('-m %03o ' % mode) : ''}#{list.join ' '}" if verbose
|
|
194
209
|
return *list if noop
|
|
195
210
|
|
|
196
|
-
list.
|
|
211
|
+
list.each do |item|
|
|
212
|
+
path = remove_trailing_slash(item)
|
|
213
|
+
|
|
197
214
|
# optimize for the most common case
|
|
198
215
|
begin
|
|
199
216
|
fu_mkdir path, mode
|
|
@@ -206,8 +223,9 @@ module FileUtils
|
|
|
206
223
|
until path == stack.last # dirname("/")=="/", dirname("C:/")=="C:/"
|
|
207
224
|
stack.push path
|
|
208
225
|
path = File.dirname(path)
|
|
226
|
+
break if File.directory?(path)
|
|
209
227
|
end
|
|
210
|
-
stack.pop
|
|
228
|
+
stack.pop if path == stack.last # root directory should exist
|
|
211
229
|
stack.reverse_each do |dir|
|
|
212
230
|
begin
|
|
213
231
|
fu_mkdir dir, mode
|
|
@@ -243,7 +261,7 @@ module FileUtils
|
|
|
243
261
|
# FileUtils.rmdir 'somedir'
|
|
244
262
|
# FileUtils.rmdir %w(somedir anydir otherdir)
|
|
245
263
|
# # Does not really remove directory; outputs message.
|
|
246
|
-
# FileUtils.rmdir 'somedir', :
|
|
264
|
+
# FileUtils.rmdir 'somedir', verbose: true, noop: true
|
|
247
265
|
#
|
|
248
266
|
def rmdir(list, parents: nil, noop: nil, verbose: nil)
|
|
249
267
|
list = fu_list(list)
|
|
@@ -272,7 +290,7 @@ module FileUtils
|
|
|
272
290
|
#
|
|
273
291
|
# In the first form, creates a hard link +link+ which points to +target+.
|
|
274
292
|
# If +link+ already exists, raises Errno::EEXIST.
|
|
275
|
-
# But if the
|
|
293
|
+
# But if the +force+ option is set, overwrites +link+.
|
|
276
294
|
#
|
|
277
295
|
# FileUtils.ln 'gcc', 'cc', verbose: true
|
|
278
296
|
# FileUtils.ln '/usr/bin/emacs21', '/usr/bin/emacs'
|
|
@@ -298,9 +316,6 @@ module FileUtils
|
|
|
298
316
|
alias link ln
|
|
299
317
|
module_function :link
|
|
300
318
|
|
|
301
|
-
#
|
|
302
|
-
# :call-seq:
|
|
303
|
-
# FileUtils.cp_lr(src, dest, noop: nil, verbose: nil, dereference_root: true, remove_destination: false)
|
|
304
319
|
#
|
|
305
320
|
# Hard link +src+ to +dest+. If +src+ is a directory, this method links
|
|
306
321
|
# all its contents recursively. If +dest+ is a directory, links
|
|
@@ -308,13 +323,16 @@ module FileUtils
|
|
|
308
323
|
#
|
|
309
324
|
# +src+ can be a list of files.
|
|
310
325
|
#
|
|
311
|
-
#
|
|
312
|
-
#
|
|
326
|
+
# If +dereference_root+ is true, this method dereference tree root.
|
|
327
|
+
#
|
|
328
|
+
# If +remove_destination+ is true, this method removes each destination file before copy.
|
|
329
|
+
#
|
|
330
|
+
# FileUtils.rm_r site_ruby + '/mylib', force: true
|
|
313
331
|
# FileUtils.cp_lr 'lib/', site_ruby + '/mylib'
|
|
314
332
|
#
|
|
315
333
|
# # Examples of linking several files to target directory.
|
|
316
334
|
# FileUtils.cp_lr %w(mail.rb field.rb debug/), site_ruby + '/tmail'
|
|
317
|
-
# FileUtils.cp_lr Dir.glob('*.rb'), '/home/aamine/lib/ruby', :
|
|
335
|
+
# FileUtils.cp_lr Dir.glob('*.rb'), '/home/aamine/lib/ruby', noop: true, verbose: true
|
|
318
336
|
#
|
|
319
337
|
# # If you want to link all contents of a directory instead of the
|
|
320
338
|
# # directory itself, c.f. src/x -> dest/x, src/y -> dest/y,
|
|
@@ -339,7 +357,7 @@ module FileUtils
|
|
|
339
357
|
#
|
|
340
358
|
# In the first form, creates a symbolic link +link+ which points to +target+.
|
|
341
359
|
# If +link+ already exists, raises Errno::EEXIST.
|
|
342
|
-
# But if the
|
|
360
|
+
# But if the <tt>force</tt> option is set, overwrites +link+.
|
|
343
361
|
#
|
|
344
362
|
# FileUtils.ln_s '/usr/bin/ruby', '/usr/local/bin/ruby'
|
|
345
363
|
# FileUtils.ln_s 'verylongsourcefilename.c', 'c', force: true
|
|
@@ -405,7 +423,7 @@ module FileUtils
|
|
|
405
423
|
#
|
|
406
424
|
# FileUtils.cp 'eval.c', 'eval.c.org'
|
|
407
425
|
# FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
|
|
408
|
-
# FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6', :
|
|
426
|
+
# FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6', verbose: true
|
|
409
427
|
# FileUtils.cp 'symlink', 'dest' # copy content, "dest" is not a symlink
|
|
410
428
|
#
|
|
411
429
|
def cp(src, dest, preserve: nil, noop: nil, verbose: nil)
|
|
@@ -427,13 +445,17 @@ module FileUtils
|
|
|
427
445
|
#
|
|
428
446
|
# +src+ can be a list of files.
|
|
429
447
|
#
|
|
448
|
+
# If +dereference_root+ is true, this method dereference tree root.
|
|
449
|
+
#
|
|
450
|
+
# If +remove_destination+ is true, this method removes each destination file before copy.
|
|
451
|
+
#
|
|
430
452
|
# # Installing Ruby library "mylib" under the site_ruby
|
|
431
|
-
# FileUtils.rm_r site_ruby + '/mylib', :
|
|
453
|
+
# FileUtils.rm_r site_ruby + '/mylib', force: true
|
|
432
454
|
# FileUtils.cp_r 'lib/', site_ruby + '/mylib'
|
|
433
455
|
#
|
|
434
456
|
# # Examples of copying several files to target directory.
|
|
435
457
|
# FileUtils.cp_r %w(mail.rb field.rb debug/), site_ruby + '/tmail'
|
|
436
|
-
# FileUtils.cp_r Dir.glob('*.rb'), '/home/foo/lib/ruby', :
|
|
458
|
+
# FileUtils.cp_r Dir.glob('*.rb'), '/home/foo/lib/ruby', noop: true, verbose: true
|
|
437
459
|
#
|
|
438
460
|
# # If you want to copy all contents of a directory instead of the
|
|
439
461
|
# # directory itself, c.f. src/x -> dest/x, src/y -> dest/y,
|
|
@@ -468,7 +490,11 @@ module FileUtils
|
|
|
468
490
|
# If +remove_destination+ is true, this method removes each destination file before copy.
|
|
469
491
|
#
|
|
470
492
|
def copy_entry(src, dest, preserve = false, dereference_root = false, remove_destination = false)
|
|
471
|
-
|
|
493
|
+
if dereference_root
|
|
494
|
+
src = File.realpath(src)
|
|
495
|
+
end
|
|
496
|
+
|
|
497
|
+
Entry_.new(src, nil, false).wrap_traverse(proc do |ent|
|
|
472
498
|
destent = Entry_.new(dest, ent.rel, false)
|
|
473
499
|
File.unlink destent.path if remove_destination && (File.file?(destent.path) || File.symlink?(destent.path))
|
|
474
500
|
ent.copy destent.path
|
|
@@ -505,10 +531,10 @@ module FileUtils
|
|
|
505
531
|
# disk partition, the file is copied then the original file is removed.
|
|
506
532
|
#
|
|
507
533
|
# FileUtils.mv 'badname.rb', 'goodname.rb'
|
|
508
|
-
# FileUtils.mv 'stuff.rb', '/notexist/lib/ruby', :
|
|
534
|
+
# FileUtils.mv 'stuff.rb', '/notexist/lib/ruby', force: true # no error
|
|
509
535
|
#
|
|
510
536
|
# FileUtils.mv %w(junk.txt dust.txt), '/home/foo/.trash/'
|
|
511
|
-
# FileUtils.mv Dir.glob('test*.rb'), 'test', :
|
|
537
|
+
# FileUtils.mv Dir.glob('test*.rb'), 'test', noop: true, verbose: true
|
|
512
538
|
#
|
|
513
539
|
def mv(src, dest, force: nil, noop: nil, verbose: nil, secure: nil)
|
|
514
540
|
fu_output_message "mv#{force ? ' -f' : ''} #{[src,dest].flatten.join ' '}" if verbose
|
|
@@ -519,13 +545,12 @@ module FileUtils
|
|
|
519
545
|
if destent.exist?
|
|
520
546
|
if destent.directory?
|
|
521
547
|
raise Errno::EEXIST, d
|
|
522
|
-
else
|
|
523
|
-
destent.remove_file if rename_cannot_overwrite_file?
|
|
524
548
|
end
|
|
525
549
|
end
|
|
526
550
|
begin
|
|
527
551
|
File.rename s, d
|
|
528
|
-
rescue Errno::EXDEV
|
|
552
|
+
rescue Errno::EXDEV,
|
|
553
|
+
Errno::EPERM # move from unencrypted to encrypted dir (ext4)
|
|
529
554
|
copy_entry s, d, true
|
|
530
555
|
if secure
|
|
531
556
|
remove_entry_secure s, force
|
|
@@ -543,18 +568,13 @@ module FileUtils
|
|
|
543
568
|
alias move mv
|
|
544
569
|
module_function :move
|
|
545
570
|
|
|
546
|
-
def rename_cannot_overwrite_file? #:nodoc:
|
|
547
|
-
/emx/ =~ RbConfig::CONFIG['host_os']
|
|
548
|
-
end
|
|
549
|
-
private_module_function :rename_cannot_overwrite_file?
|
|
550
|
-
|
|
551
571
|
#
|
|
552
572
|
# Remove file(s) specified in +list+. This method cannot remove directories.
|
|
553
573
|
# All StandardErrors are ignored when the :force option is set.
|
|
554
574
|
#
|
|
555
575
|
# FileUtils.rm %w( junk.txt dust.txt )
|
|
556
576
|
# FileUtils.rm Dir.glob('*.so')
|
|
557
|
-
# FileUtils.rm 'NotExistFile', :
|
|
577
|
+
# FileUtils.rm 'NotExistFile', force: true # never raises exception
|
|
558
578
|
#
|
|
559
579
|
def rm(list, force: nil, noop: nil, verbose: nil)
|
|
560
580
|
list = fu_list(list)
|
|
@@ -573,7 +593,7 @@ module FileUtils
|
|
|
573
593
|
#
|
|
574
594
|
# Equivalent to
|
|
575
595
|
#
|
|
576
|
-
# FileUtils.rm(list, :
|
|
596
|
+
# FileUtils.rm(list, force: true)
|
|
577
597
|
#
|
|
578
598
|
def rm_f(list, noop: nil, verbose: nil)
|
|
579
599
|
rm list, force: true, noop: noop, verbose: verbose
|
|
@@ -589,18 +609,18 @@ module FileUtils
|
|
|
589
609
|
# StandardError when :force option is set.
|
|
590
610
|
#
|
|
591
611
|
# FileUtils.rm_r Dir.glob('/tmp/*')
|
|
592
|
-
# FileUtils.rm_r 'some_dir', :
|
|
612
|
+
# FileUtils.rm_r 'some_dir', force: true
|
|
593
613
|
#
|
|
594
614
|
# WARNING: This method causes local vulnerability
|
|
595
615
|
# if one of parent directories or removing directory tree are world
|
|
596
616
|
# writable (including /tmp, whose permission is 1777), and the current
|
|
597
617
|
# process has strong privilege such as Unix super user (root), and the
|
|
598
618
|
# system has symbolic link. For secure removing, read the documentation
|
|
599
|
-
# of
|
|
600
|
-
# Default is :
|
|
619
|
+
# of remove_entry_secure carefully, and set :secure option to true.
|
|
620
|
+
# Default is <tt>secure: false</tt>.
|
|
601
621
|
#
|
|
602
|
-
# NOTE: This method calls
|
|
603
|
-
# See also
|
|
622
|
+
# NOTE: This method calls remove_entry_secure if :secure option is set.
|
|
623
|
+
# See also remove_entry_secure.
|
|
604
624
|
#
|
|
605
625
|
def rm_r(list, force: nil, noop: nil, verbose: nil, secure: nil)
|
|
606
626
|
list = fu_list(list)
|
|
@@ -619,10 +639,10 @@ module FileUtils
|
|
|
619
639
|
#
|
|
620
640
|
# Equivalent to
|
|
621
641
|
#
|
|
622
|
-
# FileUtils.rm_r(list, :
|
|
642
|
+
# FileUtils.rm_r(list, force: true)
|
|
623
643
|
#
|
|
624
644
|
# WARNING: This method causes local vulnerability.
|
|
625
|
-
# Read the documentation of
|
|
645
|
+
# Read the documentation of rm_r first.
|
|
626
646
|
#
|
|
627
647
|
def rm_rf(list, noop: nil, verbose: nil, secure: nil)
|
|
628
648
|
rm_r list, force: true, noop: noop, verbose: verbose, secure: secure
|
|
@@ -636,7 +656,7 @@ module FileUtils
|
|
|
636
656
|
# This method removes a file system entry +path+. +path+ shall be a
|
|
637
657
|
# regular file, a directory, or something. If +path+ is a directory,
|
|
638
658
|
# remove it recursively. This method is required to avoid TOCTTOU
|
|
639
|
-
# (time-of-check-to-time-of-use) local security vulnerability of
|
|
659
|
+
# (time-of-check-to-time-of-use) local security vulnerability of rm_r.
|
|
640
660
|
# #rm_r causes security hole when:
|
|
641
661
|
#
|
|
642
662
|
# * Parent directory is world writable (including /tmp).
|
|
@@ -698,7 +718,7 @@ module FileUtils
|
|
|
698
718
|
f.chown euid, -1
|
|
699
719
|
f.chmod 0700
|
|
700
720
|
}
|
|
701
|
-
rescue EISDIR # JRuby in non-native mode can't open files as dirs
|
|
721
|
+
rescue Errno::EISDIR # JRuby in non-native mode can't open files as dirs
|
|
702
722
|
File.lstat(dot_file).tap {|fstat|
|
|
703
723
|
unless fu_stat_identical_entry?(st, fstat)
|
|
704
724
|
# symlink (TOC-to-TOU attack?)
|
|
@@ -755,7 +775,7 @@ module FileUtils
|
|
|
755
775
|
# +path+ might be a regular file, a directory, or something.
|
|
756
776
|
# If +path+ is a directory, remove it recursively.
|
|
757
777
|
#
|
|
758
|
-
# See also
|
|
778
|
+
# See also remove_entry_secure.
|
|
759
779
|
#
|
|
760
780
|
def remove_entry(path, force = false)
|
|
761
781
|
Entry_.new(path).postorder_traverse do |ent|
|
|
@@ -839,8 +859,8 @@ module FileUtils
|
|
|
839
859
|
# mode to +mode+. If +dest+ is a directory, destination is +dest+/+src+.
|
|
840
860
|
# This method removes destination before copy.
|
|
841
861
|
#
|
|
842
|
-
# FileUtils.install 'ruby', '/usr/local/bin/ruby', :
|
|
843
|
-
# FileUtils.install 'lib.rb', '/usr/local/lib/ruby/site_ruby', :
|
|
862
|
+
# FileUtils.install 'ruby', '/usr/local/bin/ruby', mode: 0755, verbose: true
|
|
863
|
+
# FileUtils.install 'lib.rb', '/usr/local/lib/ruby/site_ruby', verbose: true
|
|
844
864
|
#
|
|
845
865
|
def install(src, dest, mode: nil, owner: nil, group: nil, preserve: nil,
|
|
846
866
|
noop: nil, verbose: nil)
|
|
@@ -900,11 +920,8 @@ module FileUtils
|
|
|
900
920
|
private_module_function :apply_mask
|
|
901
921
|
|
|
902
922
|
def symbolic_modes_to_i(mode_sym, path) #:nodoc:
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
else
|
|
906
|
-
File.stat(path).mode
|
|
907
|
-
end
|
|
923
|
+
path = File.stat(path) unless File::Stat === path
|
|
924
|
+
mode = path.mode
|
|
908
925
|
mode_sym.split(/,/).inject(mode & 07777) do |current_mode, clause|
|
|
909
926
|
target, *actions = clause.split(/([=+-])/)
|
|
910
927
|
raise ArgumentError, "invalid file mode: #{mode_sym}" if actions.empty?
|
|
@@ -921,7 +938,7 @@ module FileUtils
|
|
|
921
938
|
when "x"
|
|
922
939
|
mask | 0111
|
|
923
940
|
when "X"
|
|
924
|
-
if
|
|
941
|
+
if path.directory?
|
|
925
942
|
mask | 0111
|
|
926
943
|
else
|
|
927
944
|
mask
|
|
@@ -970,12 +987,12 @@ module FileUtils
|
|
|
970
987
|
# Absolute mode is
|
|
971
988
|
# FileUtils.chmod 0755, 'somecommand'
|
|
972
989
|
# FileUtils.chmod 0644, %w(my.rb your.rb his.rb her.rb)
|
|
973
|
-
# FileUtils.chmod 0755, '/usr/bin/ruby', :
|
|
990
|
+
# FileUtils.chmod 0755, '/usr/bin/ruby', verbose: true
|
|
974
991
|
#
|
|
975
992
|
# Symbolic mode is
|
|
976
993
|
# FileUtils.chmod "u=wrx,go=rx", 'somecommand'
|
|
977
994
|
# FileUtils.chmod "u=wr,go=rr", %w(my.rb your.rb his.rb her.rb)
|
|
978
|
-
# FileUtils.chmod "u=wrx,go=rx", '/usr/bin/ruby', :
|
|
995
|
+
# FileUtils.chmod "u=wrx,go=rx", '/usr/bin/ruby', verbose: true
|
|
979
996
|
#
|
|
980
997
|
# "a" :: is user, group, other mask.
|
|
981
998
|
# "u" :: is user's mask.
|
|
@@ -1035,7 +1052,7 @@ module FileUtils
|
|
|
1035
1052
|
# the attribute.
|
|
1036
1053
|
#
|
|
1037
1054
|
# FileUtils.chown 'root', 'staff', '/usr/local/bin/ruby'
|
|
1038
|
-
# FileUtils.chown nil, 'bin', Dir.glob('/usr/bin/*'), :
|
|
1055
|
+
# FileUtils.chown nil, 'bin', Dir.glob('/usr/bin/*'), verbose: true
|
|
1039
1056
|
#
|
|
1040
1057
|
def chown(user, group, list, noop: nil, verbose: nil)
|
|
1041
1058
|
list = fu_list(list)
|
|
@@ -1059,7 +1076,7 @@ module FileUtils
|
|
|
1059
1076
|
# method does not change the attribute.
|
|
1060
1077
|
#
|
|
1061
1078
|
# FileUtils.chown_R 'www', 'www', '/var/www/htdocs'
|
|
1062
|
-
# FileUtils.chown_R 'cvs', 'cvs', '/var/cvs', :
|
|
1079
|
+
# FileUtils.chown_R 'cvs', 'cvs', '/var/cvs', verbose: true
|
|
1063
1080
|
#
|
|
1064
1081
|
def chown_R(user, group, list, noop: nil, verbose: nil, force: nil)
|
|
1065
1082
|
list = fu_list(list)
|
|
@@ -1082,11 +1099,6 @@ module FileUtils
|
|
|
1082
1099
|
end
|
|
1083
1100
|
module_function :chown_R
|
|
1084
1101
|
|
|
1085
|
-
begin
|
|
1086
|
-
require 'etc'
|
|
1087
|
-
rescue LoadError # rescue LoadError for miniruby
|
|
1088
|
-
end
|
|
1089
|
-
|
|
1090
1102
|
def fu_get_uid(user) #:nodoc:
|
|
1091
1103
|
return nil unless user
|
|
1092
1104
|
case user
|
|
@@ -1095,6 +1107,7 @@ module FileUtils
|
|
|
1095
1107
|
when /\A\d+\z/
|
|
1096
1108
|
user.to_i
|
|
1097
1109
|
else
|
|
1110
|
+
require 'etc'
|
|
1098
1111
|
Etc.getpwnam(user) ? Etc.getpwnam(user).uid : nil
|
|
1099
1112
|
end
|
|
1100
1113
|
end
|
|
@@ -1108,6 +1121,7 @@ module FileUtils
|
|
|
1108
1121
|
when /\A\d+\z/
|
|
1109
1122
|
group.to_i
|
|
1110
1123
|
else
|
|
1124
|
+
require 'etc'
|
|
1111
1125
|
Etc.getgrnam(group) ? Etc.getgrnam(group).gid : nil
|
|
1112
1126
|
end
|
|
1113
1127
|
end
|
|
@@ -1148,8 +1162,11 @@ module FileUtils
|
|
|
1148
1162
|
module StreamUtils_
|
|
1149
1163
|
private
|
|
1150
1164
|
|
|
1151
|
-
|
|
1152
|
-
|
|
1165
|
+
case (defined?(::RbConfig) ? ::RbConfig::CONFIG['host_os'] : ::RUBY_PLATFORM)
|
|
1166
|
+
when /mswin|mingw/
|
|
1167
|
+
def fu_windows?; true end
|
|
1168
|
+
else
|
|
1169
|
+
def fu_windows?; false end
|
|
1153
1170
|
end
|
|
1154
1171
|
|
|
1155
1172
|
def fu_copy_stream0(src, dest, blksize = nil) #:nodoc:
|
|
@@ -1273,10 +1290,17 @@ module FileUtils
|
|
|
1273
1290
|
|
|
1274
1291
|
def entries
|
|
1275
1292
|
opts = {}
|
|
1276
|
-
opts[:encoding] = ::Encoding::UTF_8
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1293
|
+
opts[:encoding] = fu_windows? ? ::Encoding::UTF_8 : path.encoding
|
|
1294
|
+
|
|
1295
|
+
files = if Dir.respond_to?(:children)
|
|
1296
|
+
Dir.children(path, **opts)
|
|
1297
|
+
else
|
|
1298
|
+
Dir.entries(path(), **opts)
|
|
1299
|
+
.reject {|n| n == '.' or n == '..' }
|
|
1300
|
+
end
|
|
1301
|
+
|
|
1302
|
+
untaint = RUBY_VERSION < '2.7'
|
|
1303
|
+
files.map {|n| Entry_.new(prefix(), join(rel(), untaint ? n.untaint : n)) }
|
|
1280
1304
|
end
|
|
1281
1305
|
|
|
1282
1306
|
def stat
|
|
@@ -1321,6 +1345,7 @@ module FileUtils
|
|
|
1321
1345
|
else
|
|
1322
1346
|
File.chmod mode, path()
|
|
1323
1347
|
end
|
|
1348
|
+
rescue Errno::EOPNOTSUPP
|
|
1324
1349
|
end
|
|
1325
1350
|
|
|
1326
1351
|
def chown(uid, gid)
|
|
@@ -1363,18 +1388,21 @@ module FileUtils
|
|
|
1363
1388
|
end
|
|
1364
1389
|
when symlink?
|
|
1365
1390
|
File.symlink File.readlink(path()), dest
|
|
1366
|
-
when chardev?
|
|
1367
|
-
raise "cannot handle device file"
|
|
1368
|
-
mknod dest, ?c, 0666, lstat().rdev
|
|
1369
|
-
when blockdev?
|
|
1370
|
-
raise "cannot handle device file" unless File.respond_to?(:mknod)
|
|
1371
|
-
mknod dest, ?b, 0666, lstat().rdev
|
|
1391
|
+
when chardev?, blockdev?
|
|
1392
|
+
raise "cannot handle device file"
|
|
1372
1393
|
when socket?
|
|
1373
|
-
|
|
1374
|
-
|
|
1394
|
+
begin
|
|
1395
|
+
require 'socket'
|
|
1396
|
+
rescue LoadError
|
|
1397
|
+
raise "cannot handle socket"
|
|
1398
|
+
else
|
|
1399
|
+
raise "cannot handle socket" unless defined?(UNIXServer)
|
|
1400
|
+
end
|
|
1401
|
+
UNIXServer.new(dest).close
|
|
1402
|
+
File.chmod lstat().mode, dest
|
|
1375
1403
|
when pipe?
|
|
1376
1404
|
raise "cannot handle FIFO" unless File.respond_to?(:mkfifo)
|
|
1377
|
-
mkfifo dest,
|
|
1405
|
+
File.mkfifo dest, lstat().mode
|
|
1378
1406
|
when door?
|
|
1379
1407
|
raise "cannot handle door: #{path()}"
|
|
1380
1408
|
else
|
|
@@ -1412,7 +1440,7 @@ module FileUtils
|
|
|
1412
1440
|
if st.symlink?
|
|
1413
1441
|
begin
|
|
1414
1442
|
File.lchmod mode, path
|
|
1415
|
-
rescue NotImplementedError
|
|
1443
|
+
rescue NotImplementedError, Errno::EOPNOTSUPP
|
|
1416
1444
|
end
|
|
1417
1445
|
else
|
|
1418
1446
|
File.chmod mode, path
|
|
@@ -1493,14 +1521,14 @@ module FileUtils
|
|
|
1493
1521
|
|
|
1494
1522
|
private
|
|
1495
1523
|
|
|
1496
|
-
|
|
1524
|
+
@@fileutils_rb_have_lchmod = nil
|
|
1497
1525
|
|
|
1498
1526
|
def have_lchmod?
|
|
1499
1527
|
# This is not MT-safe, but it does not matter.
|
|
1500
|
-
if
|
|
1501
|
-
|
|
1528
|
+
if @@fileutils_rb_have_lchmod == nil
|
|
1529
|
+
@@fileutils_rb_have_lchmod = check_have_lchmod?
|
|
1502
1530
|
end
|
|
1503
|
-
|
|
1531
|
+
@@fileutils_rb_have_lchmod
|
|
1504
1532
|
end
|
|
1505
1533
|
|
|
1506
1534
|
def check_have_lchmod?
|
|
@@ -1511,14 +1539,14 @@ module FileUtils
|
|
|
1511
1539
|
return false
|
|
1512
1540
|
end
|
|
1513
1541
|
|
|
1514
|
-
|
|
1542
|
+
@@fileutils_rb_have_lchown = nil
|
|
1515
1543
|
|
|
1516
1544
|
def have_lchown?
|
|
1517
1545
|
# This is not MT-safe, but it does not matter.
|
|
1518
|
-
if
|
|
1519
|
-
|
|
1546
|
+
if @@fileutils_rb_have_lchown == nil
|
|
1547
|
+
@@fileutils_rb_have_lchown = check_have_lchown?
|
|
1520
1548
|
end
|
|
1521
|
-
|
|
1549
|
+
@@fileutils_rb_have_lchown
|
|
1522
1550
|
end
|
|
1523
1551
|
|
|
1524
1552
|
def check_have_lchown?
|
|
@@ -1532,7 +1560,15 @@ module FileUtils
|
|
|
1532
1560
|
def join(dir, base)
|
|
1533
1561
|
return File.path(dir) if not base or base == '.'
|
|
1534
1562
|
return File.path(base) if not dir or dir == '.'
|
|
1535
|
-
|
|
1563
|
+
begin
|
|
1564
|
+
File.join(dir, base)
|
|
1565
|
+
rescue EncodingError
|
|
1566
|
+
if fu_windows?
|
|
1567
|
+
File.join(dir.encode(::Encoding::UTF_8), base.encode(::Encoding::UTF_8))
|
|
1568
|
+
else
|
|
1569
|
+
raise
|
|
1570
|
+
end
|
|
1571
|
+
end
|
|
1536
1572
|
end
|
|
1537
1573
|
|
|
1538
1574
|
if File::ALT_SEPARATOR
|
|
@@ -1540,10 +1576,13 @@ module FileUtils
|
|
|
1540
1576
|
else
|
|
1541
1577
|
DIRECTORY_TERM = "(?=/|\\z)"
|
|
1542
1578
|
end
|
|
1543
|
-
SYSCASE = File::FNM_SYSCASE.nonzero? ? "-i" : ""
|
|
1544
1579
|
|
|
1545
1580
|
def descendant_directory?(descendant, ascendant)
|
|
1546
|
-
|
|
1581
|
+
if File::FNM_SYSCASE.nonzero?
|
|
1582
|
+
File.expand_path(File.dirname(descendant)).casecmp(File.expand_path(ascendant)) == 0
|
|
1583
|
+
else
|
|
1584
|
+
File.expand_path(File.dirname(descendant)) == File.expand_path(ascendant)
|
|
1585
|
+
end
|
|
1547
1586
|
end
|
|
1548
1587
|
end # class Entry_
|
|
1549
1588
|
|
|
@@ -1582,13 +1621,13 @@ module FileUtils
|
|
|
1582
1621
|
end
|
|
1583
1622
|
private_module_function :fu_same?
|
|
1584
1623
|
|
|
1585
|
-
@fileutils_output = $stderr
|
|
1586
|
-
@fileutils_label = ''
|
|
1587
|
-
|
|
1588
1624
|
def fu_output_message(msg) #:nodoc:
|
|
1589
|
-
@fileutils_output
|
|
1590
|
-
|
|
1591
|
-
|
|
1625
|
+
output = @fileutils_output if defined?(@fileutils_output)
|
|
1626
|
+
output ||= $stdout
|
|
1627
|
+
if defined?(@fileutils_label)
|
|
1628
|
+
msg = @fileutils_label + msg
|
|
1629
|
+
end
|
|
1630
|
+
output.puts msg
|
|
1592
1631
|
end
|
|
1593
1632
|
private_module_function :fu_output_message
|
|
1594
1633
|
|
|
@@ -1599,8 +1638,11 @@ module FileUtils
|
|
|
1599
1638
|
tbl
|
|
1600
1639
|
}
|
|
1601
1640
|
|
|
1641
|
+
public
|
|
1642
|
+
|
|
1602
1643
|
#
|
|
1603
|
-
# Returns an Array of
|
|
1644
|
+
# Returns an Array of names of high-level methods that accept any keyword
|
|
1645
|
+
# arguments.
|
|
1604
1646
|
#
|
|
1605
1647
|
# p FileUtils.commands #=> ["chmod", "cp", "cp_r", "install", ...]
|
|
1606
1648
|
#
|
|
@@ -1639,7 +1681,7 @@ module FileUtils
|
|
|
1639
1681
|
end
|
|
1640
1682
|
|
|
1641
1683
|
#
|
|
1642
|
-
# Returns an Array of
|
|
1684
|
+
# Returns an Array of methods names which have the option +opt+.
|
|
1643
1685
|
#
|
|
1644
1686
|
# p FileUtils.collect_method(:preserve) #=> ["cp", "cp_r", "copy", "install"]
|
|
1645
1687
|
#
|
|
@@ -1647,14 +1689,16 @@ module FileUtils
|
|
|
1647
1689
|
OPT_TABLE.keys.select {|m| OPT_TABLE[m].include?(opt) }
|
|
1648
1690
|
end
|
|
1649
1691
|
|
|
1650
|
-
|
|
1651
|
-
|
|
1692
|
+
private
|
|
1693
|
+
|
|
1694
|
+
LOW_METHODS = singleton_methods(false) - collect_method(:noop).map(&:intern) # :nodoc:
|
|
1695
|
+
module LowMethods # :nodoc: internal use only
|
|
1652
1696
|
private
|
|
1653
1697
|
def _do_nothing(*)end
|
|
1654
1698
|
::FileUtils::LOW_METHODS.map {|name| alias_method name, :_do_nothing}
|
|
1655
1699
|
end
|
|
1656
1700
|
|
|
1657
|
-
METHODS = singleton_methods() - [:private_module_function,
|
|
1701
|
+
METHODS = singleton_methods() - [:private_module_function, # :nodoc:
|
|
1658
1702
|
:commands, :options, :have_option?, :options_of, :collect_method]
|
|
1659
1703
|
|
|
1660
1704
|
#
|
|
@@ -1664,8 +1708,6 @@ module FileUtils
|
|
|
1664
1708
|
#
|
|
1665
1709
|
module Verbose
|
|
1666
1710
|
include FileUtils
|
|
1667
|
-
@fileutils_output = $stderr
|
|
1668
|
-
@fileutils_label = ''
|
|
1669
1711
|
names = ::FileUtils.collect_method(:verbose)
|
|
1670
1712
|
names.each do |name|
|
|
1671
1713
|
module_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
|
@@ -1689,8 +1731,6 @@ module FileUtils
|
|
|
1689
1731
|
module NoWrite
|
|
1690
1732
|
include FileUtils
|
|
1691
1733
|
include LowMethods
|
|
1692
|
-
@fileutils_output = $stderr
|
|
1693
|
-
@fileutils_label = ''
|
|
1694
1734
|
names = ::FileUtils.collect_method(:noop)
|
|
1695
1735
|
names.each do |name|
|
|
1696
1736
|
module_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
|
@@ -1715,8 +1755,6 @@ module FileUtils
|
|
|
1715
1755
|
module DryRun
|
|
1716
1756
|
include FileUtils
|
|
1717
1757
|
include LowMethods
|
|
1718
|
-
@fileutils_output = $stderr
|
|
1719
|
-
@fileutils_label = ''
|
|
1720
1758
|
names = ::FileUtils.collect_method(:noop)
|
|
1721
1759
|
names.each do |name|
|
|
1722
1760
|
module_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
metadata
CHANGED
|
@@ -1,52 +1,34 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fileutils
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Minero Aoki
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
12
|
-
dependencies:
|
|
13
|
-
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: rake
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - ">="
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: '0'
|
|
20
|
-
type: :development
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - ">="
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: '0'
|
|
11
|
+
date: 2020-12-22 00:00:00.000000000 Z
|
|
12
|
+
dependencies: []
|
|
27
13
|
description: Several file utility methods for copying, moving, removing, etc.
|
|
28
14
|
email:
|
|
29
|
-
-
|
|
15
|
+
-
|
|
30
16
|
executables: []
|
|
31
17
|
extensions: []
|
|
32
18
|
extra_rdoc_files: []
|
|
33
19
|
files:
|
|
34
|
-
- ".gitignore"
|
|
35
|
-
- ".travis.yml"
|
|
36
|
-
- Gemfile
|
|
37
20
|
- LICENSE.txt
|
|
38
21
|
- README.md
|
|
39
22
|
- Rakefile
|
|
40
|
-
- bin/console
|
|
41
|
-
- bin/setup
|
|
42
23
|
- fileutils.gemspec
|
|
43
24
|
- lib/fileutils.rb
|
|
44
25
|
homepage: https://github.com/ruby/fileutils
|
|
45
26
|
licenses:
|
|
27
|
+
- Ruby
|
|
46
28
|
- BSD-2-Clause
|
|
47
29
|
metadata:
|
|
48
30
|
source_code_uri: https://github.com/ruby/fileutils
|
|
49
|
-
post_install_message:
|
|
31
|
+
post_install_message:
|
|
50
32
|
rdoc_options: []
|
|
51
33
|
require_paths:
|
|
52
34
|
- lib
|
|
@@ -61,9 +43,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
61
43
|
- !ruby/object:Gem::Version
|
|
62
44
|
version: '0'
|
|
63
45
|
requirements: []
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
signing_key:
|
|
46
|
+
rubygems_version: 3.2.2
|
|
47
|
+
signing_key:
|
|
67
48
|
specification_version: 4
|
|
68
49
|
summary: Several file utility methods for copying, moving, removing, etc.
|
|
69
50
|
test_files: []
|
data/.gitignore
DELETED
data/.travis.yml
DELETED
data/Gemfile
DELETED
data/bin/console
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
|
|
3
|
-
require "bundler/setup"
|
|
4
|
-
require "fileutils"
|
|
5
|
-
|
|
6
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
|
7
|
-
# with your gem easier. You can also use a different console, if you like.
|
|
8
|
-
|
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
|
10
|
-
# require "pry"
|
|
11
|
-
# Pry.start
|
|
12
|
-
|
|
13
|
-
require "irb"
|
|
14
|
-
IRB.start(__FILE__)
|