fileutils 1.0.2 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d17d793f31847089ba65e37117e6a28f59a3b729487c587afe796d5d9e50d33d
4
- data.tar.gz: 528bbd0bd36e972f602aa5739cf44283c64a04bbe2b8f807645be78199908705
3
+ metadata.gz: 67fa33577498dff5705331ce6453a3c11ff34d209343310f647d4cb404158617
4
+ data.tar.gz: 4608e153f0c69749fbf7e4d456388c44fdba1a3a99f5b328c71c283ccd7ca5a3
5
5
  SHA512:
6
- metadata.gz: 32259ad3ecb8b69a0b459e647d05f8bf5ede57cf6c5a7d26c9f9637d194cad54e14ed4904c4eb47532ecfb9e9b8fa72b8dd89fb8d134c723c877d8b3f6a07a4f
7
- data.tar.gz: d61c4a8f867d7fd3ebf61a1ec2a379bb2cac5e511df133330f062c05342dc008bc7e9b7f738a1b1577d35ea517d39151509b9cef3ad7f4a30cb0d01ec2e8464e
6
+ metadata.gz: db0b5ce907f782c5ba306ca0a8811c825ec1f97a47731ccc08b2ddc7e13160d7d40986afd1b744cef7b941b2bef2f1c1c4017eb8fc616e8695b506d5ce8cc8ae
7
+ data.tar.gz: ccbb52c0a277e03e29dfff22e5bb26b3dc30e7ede6db803f130047bb039cb12161d7f3ecafac5f0956959fde6276b16c68085f30be7c8edae019e7d313301b53
data/README.md CHANGED
@@ -1,7 +1,5 @@
1
1
  # FileUtils
2
2
 
3
- [![Build Status](https://travis-ci.org/ruby/fileutils.svg?branch=master)](https://travis-ci.org/ruby/fileutils)
4
-
5
3
  Namespace for several file utility methods for copying, moving, removing, etc.
6
4
 
7
5
  ## Installation
data/Rakefile CHANGED
@@ -1,10 +1,19 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rake/testtask"
3
3
 
4
+ JRuby.objectspace = true if RUBY_PLATFORM == 'java'
5
+
4
6
  Rake::TestTask.new(:test) do |t|
5
- t.libs << "test" << "test/lib"
6
- t.libs << "lib"
7
- t.test_files = FileList['test/**/test_*.rb']
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"
8
17
  end
9
18
 
10
19
  task :default => :test
data/fileutils.gemspec CHANGED
@@ -1,25 +1,31 @@
1
1
  # frozen_string_literal: true
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
+
2
13
  Gem::Specification.new do |s|
3
14
  s.name = "fileutils"
4
- s.version = '1.0.2'
5
- s.date = '2017-12-22'
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 = [".gitignore", ".travis.yml", "Gemfile", "LICENSE.txt", "README.md", "Rakefile", "bin/console", "bin/setup", "fileutils.gemspec", "lib/fileutils.rb"]
11
- s.required_ruby_version = ">= 2.4.0"
20
+ s.files = ["LICENSE.txt", "README.md", "Rakefile", "fileutils.gemspec", "lib/fileutils.rb"]
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.license = "BSD-2-Clause"
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.add_development_dependency 'rake'
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)
54
+ #
55
+ # Possible <tt>options</tt> are:
47
56
  #
48
- # The <tt>options</tt> parameter is a hash of options, taken from the list
49
- # <tt>:force</tt>, <tt>:noop</tt>, <tt>:preserve</tt>, and <tt>:verbose</tt>.
50
- # <tt>:noop</tt> means that no changes are made. The other three are obvious.
51
- # Each method documents the options that it honours.
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 any option:
74
+ # There are some `low level' methods, which do not accept keyword arguments:
58
75
  #
59
- # FileUtils.copy_entry(src, dest, preserve = false, dereference = 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,10 +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
104
  module FileUtils
89
-
90
- VERSION = "1.0.2"
105
+ VERSION = "1.5.0"
91
106
 
92
107
  def self.private_module_function(name) #:nodoc:
93
108
  module_function name
@@ -108,19 +123,22 @@ module FileUtils
108
123
  #
109
124
  # Changes the current directory to the directory +dir+.
110
125
  #
111
- # If this method is called with block, resumes to the old
112
- # 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.
113
128
  #
114
- # FileUtils.cd('/', :verbose => true) # chdir and report it
129
+ # FileUtils.cd('/') # change directory
115
130
  #
116
- # FileUtils.cd('/') do # chdir
131
+ # FileUtils.cd('/', verbose: true) # change directory and report it
132
+ #
133
+ # FileUtils.cd('/') do # change directory
117
134
  # # ... # do something
118
135
  # end # return to original directory
119
136
  #
120
137
  def cd(dir, verbose: nil, &block) # :yield: dir
121
138
  fu_output_message "cd #{dir}" if verbose
122
- Dir.chdir(dir, &block)
139
+ result = Dir.chdir(dir, &block)
123
140
  fu_output_message 'cd -' if verbose and block
141
+ result
124
142
  end
125
143
  module_function :cd
126
144
 
@@ -155,9 +173,9 @@ module FileUtils
155
173
  # Creates one or more directories.
156
174
  #
157
175
  # FileUtils.mkdir 'test'
158
- # FileUtils.mkdir %w( tmp data )
159
- # FileUtils.mkdir 'notexist', :noop => true # Does not really create.
160
- # FileUtils.mkdir 'tmp', :mode => 0700
176
+ # FileUtils.mkdir %w(tmp data)
177
+ # FileUtils.mkdir 'notexist', noop: true # Does not really create.
178
+ # FileUtils.mkdir 'tmp', mode: 0700
161
179
  #
162
180
  def mkdir(list, mode: nil, noop: nil, verbose: nil)
163
181
  list = fu_list(list)
@@ -176,7 +194,7 @@ module FileUtils
176
194
  #
177
195
  # FileUtils.mkdir_p '/usr/local/lib/ruby'
178
196
  #
179
- # causes to make following directories, if it does not exist.
197
+ # causes to make following directories, if they do not exist.
180
198
  #
181
199
  # * /usr
182
200
  # * /usr/local
@@ -190,7 +208,9 @@ module FileUtils
190
208
  fu_output_message "mkdir -p #{mode ? ('-m %03o ' % mode) : ''}#{list.join ' '}" if verbose
191
209
  return *list if noop
192
210
 
193
- list.map {|path| remove_trailing_slash(path)}.each do |path|
211
+ list.each do |item|
212
+ path = remove_trailing_slash(item)
213
+
194
214
  # optimize for the most common case
195
215
  begin
196
216
  fu_mkdir path, mode
@@ -203,8 +223,9 @@ module FileUtils
203
223
  until path == stack.last # dirname("/")=="/", dirname("C:/")=="C:/"
204
224
  stack.push path
205
225
  path = File.dirname(path)
226
+ break if File.directory?(path)
206
227
  end
207
- stack.pop # root directory should exist
228
+ stack.pop if path == stack.last # root directory should exist
208
229
  stack.reverse_each do |dir|
209
230
  begin
210
231
  fu_mkdir dir, mode
@@ -240,7 +261,7 @@ module FileUtils
240
261
  # FileUtils.rmdir 'somedir'
241
262
  # FileUtils.rmdir %w(somedir anydir otherdir)
242
263
  # # Does not really remove directory; outputs message.
243
- # FileUtils.rmdir 'somedir', :verbose => true, :noop => true
264
+ # FileUtils.rmdir 'somedir', verbose: true, noop: true
244
265
  #
245
266
  def rmdir(list, parents: nil, noop: nil, verbose: nil)
246
267
  list = fu_list(list)
@@ -269,7 +290,7 @@ module FileUtils
269
290
  #
270
291
  # In the first form, creates a hard link +link+ which points to +target+.
271
292
  # If +link+ already exists, raises Errno::EEXIST.
272
- # But if the :force option is set, overwrites +link+.
293
+ # But if the +force+ option is set, overwrites +link+.
273
294
  #
274
295
  # FileUtils.ln 'gcc', 'cc', verbose: true
275
296
  # FileUtils.ln '/usr/bin/emacs21', '/usr/bin/emacs'
@@ -295,6 +316,39 @@ module FileUtils
295
316
  alias link ln
296
317
  module_function :link
297
318
 
319
+ #
320
+ # Hard link +src+ to +dest+. If +src+ is a directory, this method links
321
+ # all its contents recursively. If +dest+ is a directory, links
322
+ # +src+ to +dest/src+.
323
+ #
324
+ # +src+ can be a list of files.
325
+ #
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
331
+ # FileUtils.cp_lr 'lib/', site_ruby + '/mylib'
332
+ #
333
+ # # Examples of linking several files to target directory.
334
+ # FileUtils.cp_lr %w(mail.rb field.rb debug/), site_ruby + '/tmail'
335
+ # FileUtils.cp_lr Dir.glob('*.rb'), '/home/aamine/lib/ruby', noop: true, verbose: true
336
+ #
337
+ # # If you want to link all contents of a directory instead of the
338
+ # # directory itself, c.f. src/x -> dest/x, src/y -> dest/y,
339
+ # # use the following code.
340
+ # FileUtils.cp_lr 'src/.', 'dest' # cp_lr('src', 'dest') makes dest/src, but this doesn't.
341
+ #
342
+ def cp_lr(src, dest, noop: nil, verbose: nil,
343
+ dereference_root: true, remove_destination: false)
344
+ fu_output_message "cp -lr#{remove_destination ? ' --remove-destination' : ''} #{[src,dest].flatten.join ' '}" if verbose
345
+ return if noop
346
+ fu_each_src_dest(src, dest) do |s, d|
347
+ link_entry s, d, dereference_root, remove_destination
348
+ end
349
+ end
350
+ module_function :cp_lr
351
+
298
352
  #
299
353
  # :call-seq:
300
354
  # FileUtils.ln_s(target, link, force: nil, noop: nil, verbose: nil)
@@ -303,7 +357,7 @@ module FileUtils
303
357
  #
304
358
  # In the first form, creates a symbolic link +link+ which points to +target+.
305
359
  # If +link+ already exists, raises Errno::EEXIST.
306
- # But if the :force option is set, overwrites +link+.
360
+ # But if the <tt>force</tt> option is set, overwrites +link+.
307
361
  #
308
362
  # FileUtils.ln_s '/usr/bin/ruby', '/usr/local/bin/ruby'
309
363
  # FileUtils.ln_s 'verylongsourcefilename.c', 'c', force: true
@@ -341,6 +395,26 @@ module FileUtils
341
395
  end
342
396
  module_function :ln_sf
343
397
 
398
+ #
399
+ # Hard links a file system entry +src+ to +dest+.
400
+ # If +src+ is a directory, this method links its contents recursively.
401
+ #
402
+ # Both of +src+ and +dest+ must be a path name.
403
+ # +src+ must exist, +dest+ must not exist.
404
+ #
405
+ # If +dereference_root+ is true, this method dereferences the tree root.
406
+ #
407
+ # If +remove_destination+ is true, this method removes each destination file before copy.
408
+ #
409
+ def link_entry(src, dest, dereference_root = false, remove_destination = false)
410
+ Entry_.new(src, nil, dereference_root).traverse do |ent|
411
+ destent = Entry_.new(dest, ent.rel, false)
412
+ File.unlink destent.path if remove_destination && File.file?(destent.path)
413
+ ent.link destent.path
414
+ end
415
+ end
416
+ module_function :link_entry
417
+
344
418
  #
345
419
  # Copies a file content +src+ to +dest+. If +dest+ is a directory,
346
420
  # copies +src+ to +dest/src+.
@@ -349,7 +423,7 @@ module FileUtils
349
423
  #
350
424
  # FileUtils.cp 'eval.c', 'eval.c.org'
351
425
  # FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
352
- # FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6', :verbose => true
426
+ # FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6', verbose: true
353
427
  # FileUtils.cp 'symlink', 'dest' # copy content, "dest" is not a symlink
354
428
  #
355
429
  def cp(src, dest, preserve: nil, noop: nil, verbose: nil)
@@ -371,13 +445,17 @@ module FileUtils
371
445
  #
372
446
  # +src+ can be a list of files.
373
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
+ #
374
452
  # # Installing Ruby library "mylib" under the site_ruby
375
- # FileUtils.rm_r site_ruby + '/mylib', :force
453
+ # FileUtils.rm_r site_ruby + '/mylib', force: true
376
454
  # FileUtils.cp_r 'lib/', site_ruby + '/mylib'
377
455
  #
378
456
  # # Examples of copying several files to target directory.
379
457
  # FileUtils.cp_r %w(mail.rb field.rb debug/), site_ruby + '/tmail'
380
- # FileUtils.cp_r Dir.glob('*.rb'), '/home/foo/lib/ruby', :noop => true, :verbose => true
458
+ # FileUtils.cp_r Dir.glob('*.rb'), '/home/foo/lib/ruby', noop: true, verbose: true
381
459
  #
382
460
  # # If you want to copy all contents of a directory instead of the
383
461
  # # directory itself, c.f. src/x -> dest/x, src/y -> dest/y,
@@ -412,7 +490,11 @@ module FileUtils
412
490
  # If +remove_destination+ is true, this method removes each destination file before copy.
413
491
  #
414
492
  def copy_entry(src, dest, preserve = false, dereference_root = false, remove_destination = false)
415
- Entry_.new(src, nil, dereference_root).wrap_traverse(proc do |ent|
493
+ if dereference_root
494
+ src = File.realpath(src)
495
+ end
496
+
497
+ Entry_.new(src, nil, false).wrap_traverse(proc do |ent|
416
498
  destent = Entry_.new(dest, ent.rel, false)
417
499
  File.unlink destent.path if remove_destination && (File.file?(destent.path) || File.symlink?(destent.path))
418
500
  ent.copy destent.path
@@ -449,10 +531,10 @@ module FileUtils
449
531
  # disk partition, the file is copied then the original file is removed.
450
532
  #
451
533
  # FileUtils.mv 'badname.rb', 'goodname.rb'
452
- # FileUtils.mv 'stuff.rb', '/notexist/lib/ruby', :force => true # no error
534
+ # FileUtils.mv 'stuff.rb', '/notexist/lib/ruby', force: true # no error
453
535
  #
454
536
  # FileUtils.mv %w(junk.txt dust.txt), '/home/foo/.trash/'
455
- # FileUtils.mv Dir.glob('test*.rb'), 'test', :noop => true, :verbose => true
537
+ # FileUtils.mv Dir.glob('test*.rb'), 'test', noop: true, verbose: true
456
538
  #
457
539
  def mv(src, dest, force: nil, noop: nil, verbose: nil, secure: nil)
458
540
  fu_output_message "mv#{force ? ' -f' : ''} #{[src,dest].flatten.join ' '}" if verbose
@@ -463,13 +545,12 @@ module FileUtils
463
545
  if destent.exist?
464
546
  if destent.directory?
465
547
  raise Errno::EEXIST, d
466
- else
467
- destent.remove_file if rename_cannot_overwrite_file?
468
548
  end
469
549
  end
470
550
  begin
471
551
  File.rename s, d
472
- rescue Errno::EXDEV
552
+ rescue Errno::EXDEV,
553
+ Errno::EPERM # move from unencrypted to encrypted dir (ext4)
473
554
  copy_entry s, d, true
474
555
  if secure
475
556
  remove_entry_secure s, force
@@ -487,18 +568,13 @@ module FileUtils
487
568
  alias move mv
488
569
  module_function :move
489
570
 
490
- def rename_cannot_overwrite_file? #:nodoc:
491
- /emx/ =~ RUBY_PLATFORM
492
- end
493
- private_module_function :rename_cannot_overwrite_file?
494
-
495
571
  #
496
572
  # Remove file(s) specified in +list+. This method cannot remove directories.
497
573
  # All StandardErrors are ignored when the :force option is set.
498
574
  #
499
575
  # FileUtils.rm %w( junk.txt dust.txt )
500
576
  # FileUtils.rm Dir.glob('*.so')
501
- # FileUtils.rm 'NotExistFile', :force => true # never raises exception
577
+ # FileUtils.rm 'NotExistFile', force: true # never raises exception
502
578
  #
503
579
  def rm(list, force: nil, noop: nil, verbose: nil)
504
580
  list = fu_list(list)
@@ -517,7 +593,7 @@ module FileUtils
517
593
  #
518
594
  # Equivalent to
519
595
  #
520
- # FileUtils.rm(list, :force => true)
596
+ # FileUtils.rm(list, force: true)
521
597
  #
522
598
  def rm_f(list, noop: nil, verbose: nil)
523
599
  rm list, force: true, noop: noop, verbose: verbose
@@ -533,18 +609,18 @@ module FileUtils
533
609
  # StandardError when :force option is set.
534
610
  #
535
611
  # FileUtils.rm_r Dir.glob('/tmp/*')
536
- # FileUtils.rm_r 'some_dir', :force => true
612
+ # FileUtils.rm_r 'some_dir', force: true
537
613
  #
538
614
  # WARNING: This method causes local vulnerability
539
615
  # if one of parent directories or removing directory tree are world
540
616
  # writable (including /tmp, whose permission is 1777), and the current
541
617
  # process has strong privilege such as Unix super user (root), and the
542
618
  # system has symbolic link. For secure removing, read the documentation
543
- # of #remove_entry_secure carefully, and set :secure option to true.
544
- # Default is :secure=>false.
619
+ # of remove_entry_secure carefully, and set :secure option to true.
620
+ # Default is <tt>secure: false</tt>.
545
621
  #
546
- # NOTE: This method calls #remove_entry_secure if :secure option is set.
547
- # See also #remove_entry_secure.
622
+ # NOTE: This method calls remove_entry_secure if :secure option is set.
623
+ # See also remove_entry_secure.
548
624
  #
549
625
  def rm_r(list, force: nil, noop: nil, verbose: nil, secure: nil)
550
626
  list = fu_list(list)
@@ -563,10 +639,10 @@ module FileUtils
563
639
  #
564
640
  # Equivalent to
565
641
  #
566
- # FileUtils.rm_r(list, :force => true)
642
+ # FileUtils.rm_r(list, force: true)
567
643
  #
568
644
  # WARNING: This method causes local vulnerability.
569
- # Read the documentation of #rm_r first.
645
+ # Read the documentation of rm_r first.
570
646
  #
571
647
  def rm_rf(list, noop: nil, verbose: nil, secure: nil)
572
648
  rm_r list, force: true, noop: noop, verbose: verbose, secure: secure
@@ -580,7 +656,7 @@ module FileUtils
580
656
  # This method removes a file system entry +path+. +path+ shall be a
581
657
  # regular file, a directory, or something. If +path+ is a directory,
582
658
  # remove it recursively. This method is required to avoid TOCTTOU
583
- # (time-of-check-to-time-of-use) local security vulnerability of #rm_r.
659
+ # (time-of-check-to-time-of-use) local security vulnerability of rm_r.
584
660
  # #rm_r causes security hole when:
585
661
  #
586
662
  # * Parent directory is world writable (including /tmp).
@@ -603,8 +679,8 @@ module FileUtils
603
679
  #
604
680
  # For details of this security vulnerability, see Perl's case:
605
681
  #
606
- # * http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2005-0448
607
- # * http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2004-0452
682
+ # * https://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2005-0448
683
+ # * https://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2004-0452
608
684
  #
609
685
  # For fileutils.rb, this vulnerability is reported in [ruby-dev:26100].
610
686
  #
@@ -628,22 +704,38 @@ module FileUtils
628
704
  unless parent_st.sticky?
629
705
  raise ArgumentError, "parent directory is world writable, FileUtils#remove_entry_secure does not work; abort: #{path.inspect} (parent directory mode #{'%o' % parent_st.mode})"
630
706
  end
707
+
631
708
  # freeze tree root
632
709
  euid = Process.euid
633
- File.open(fullpath + '/.') {|f|
634
- unless fu_stat_identical_entry?(st, f.stat)
635
- # symlink (TOC-to-TOU attack?)
636
- File.unlink fullpath
637
- return
638
- end
639
- f.chown euid, -1
640
- f.chmod 0700
641
- unless fu_stat_identical_entry?(st, File.lstat(fullpath))
642
- # TOC-to-TOU attack?
643
- File.unlink fullpath
644
- return
645
- end
646
- }
710
+ dot_file = fullpath + "/."
711
+ begin
712
+ File.open(dot_file) {|f|
713
+ unless fu_stat_identical_entry?(st, f.stat)
714
+ # symlink (TOC-to-TOU attack?)
715
+ File.unlink fullpath
716
+ return
717
+ end
718
+ f.chown euid, -1
719
+ f.chmod 0700
720
+ }
721
+ rescue Errno::EISDIR # JRuby in non-native mode can't open files as dirs
722
+ File.lstat(dot_file).tap {|fstat|
723
+ unless fu_stat_identical_entry?(st, fstat)
724
+ # symlink (TOC-to-TOU attack?)
725
+ File.unlink fullpath
726
+ return
727
+ end
728
+ File.chown euid, -1, dot_file
729
+ File.chmod 0700, dot_file
730
+ }
731
+ end
732
+
733
+ unless fu_stat_identical_entry?(st, File.lstat(fullpath))
734
+ # TOC-to-TOU attack?
735
+ File.unlink fullpath
736
+ return
737
+ end
738
+
647
739
  # ---- tree root is frozen ----
648
740
  root = Entry_.new(path)
649
741
  root.preorder_traverse do |ent|
@@ -683,7 +775,7 @@ module FileUtils
683
775
  # +path+ might be a regular file, a directory, or something.
684
776
  # If +path+ is a directory, remove it recursively.
685
777
  #
686
- # See also #remove_entry_secure.
778
+ # See also remove_entry_secure.
687
779
  #
688
780
  def remove_entry(path, force = false)
689
781
  Entry_.new(path).postorder_traverse do |ent|
@@ -744,8 +836,15 @@ module FileUtils
744
836
  #
745
837
  def compare_stream(a, b)
746
838
  bsize = fu_stream_blksize(a, b)
747
- sa = String.new(capacity: bsize)
748
- sb = String.new(capacity: bsize)
839
+
840
+ if RUBY_VERSION > "2.4"
841
+ sa = String.new(capacity: bsize)
842
+ sb = String.new(capacity: bsize)
843
+ else
844
+ sa = String.new
845
+ sb = String.new
846
+ end
847
+
749
848
  begin
750
849
  a.read(bsize, sa)
751
850
  b.read(bsize, sb)
@@ -760,8 +859,8 @@ module FileUtils
760
859
  # mode to +mode+. If +dest+ is a directory, destination is +dest+/+src+.
761
860
  # This method removes destination before copy.
762
861
  #
763
- # FileUtils.install 'ruby', '/usr/local/bin/ruby', :mode => 0755, :verbose => true
764
- # FileUtils.install 'lib.rb', '/usr/local/lib/ruby/site_ruby', :verbose => true
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
765
864
  #
766
865
  def install(src, dest, mode: nil, owner: nil, group: nil, preserve: nil,
767
866
  noop: nil, verbose: nil)
@@ -821,11 +920,8 @@ module FileUtils
821
920
  private_module_function :apply_mask
822
921
 
823
922
  def symbolic_modes_to_i(mode_sym, path) #:nodoc:
824
- mode = if File::Stat === path
825
- path.mode
826
- else
827
- File.stat(path).mode
828
- end
923
+ path = File.stat(path) unless File::Stat === path
924
+ mode = path.mode
829
925
  mode_sym.split(/,/).inject(mode & 07777) do |current_mode, clause|
830
926
  target, *actions = clause.split(/([=+-])/)
831
927
  raise ArgumentError, "invalid file mode: #{mode_sym}" if actions.empty?
@@ -842,7 +938,7 @@ module FileUtils
842
938
  when "x"
843
939
  mask | 0111
844
940
  when "X"
845
- if FileTest.directory? path
941
+ if path.directory?
846
942
  mask | 0111
847
943
  else
848
944
  mask
@@ -891,12 +987,12 @@ module FileUtils
891
987
  # Absolute mode is
892
988
  # FileUtils.chmod 0755, 'somecommand'
893
989
  # FileUtils.chmod 0644, %w(my.rb your.rb his.rb her.rb)
894
- # FileUtils.chmod 0755, '/usr/bin/ruby', :verbose => true
990
+ # FileUtils.chmod 0755, '/usr/bin/ruby', verbose: true
895
991
  #
896
992
  # Symbolic mode is
897
993
  # FileUtils.chmod "u=wrx,go=rx", 'somecommand'
898
994
  # FileUtils.chmod "u=wr,go=rr", %w(my.rb your.rb his.rb her.rb)
899
- # FileUtils.chmod "u=wrx,go=rx", '/usr/bin/ruby', :verbose => true
995
+ # FileUtils.chmod "u=wrx,go=rx", '/usr/bin/ruby', verbose: true
900
996
  #
901
997
  # "a" :: is user, group, other mask.
902
998
  # "u" :: is user's mask.
@@ -956,7 +1052,7 @@ module FileUtils
956
1052
  # the attribute.
957
1053
  #
958
1054
  # FileUtils.chown 'root', 'staff', '/usr/local/bin/ruby'
959
- # FileUtils.chown nil, 'bin', Dir.glob('/usr/bin/*'), :verbose => true
1055
+ # FileUtils.chown nil, 'bin', Dir.glob('/usr/bin/*'), verbose: true
960
1056
  #
961
1057
  def chown(user, group, list, noop: nil, verbose: nil)
962
1058
  list = fu_list(list)
@@ -980,7 +1076,7 @@ module FileUtils
980
1076
  # method does not change the attribute.
981
1077
  #
982
1078
  # FileUtils.chown_R 'www', 'www', '/var/www/htdocs'
983
- # FileUtils.chown_R 'cvs', 'cvs', '/var/cvs', :verbose => true
1079
+ # FileUtils.chown_R 'cvs', 'cvs', '/var/cvs', verbose: true
984
1080
  #
985
1081
  def chown_R(user, group, list, noop: nil, verbose: nil, force: nil)
986
1082
  list = fu_list(list)
@@ -1003,11 +1099,6 @@ module FileUtils
1003
1099
  end
1004
1100
  module_function :chown_R
1005
1101
 
1006
- begin
1007
- require 'etc'
1008
- rescue LoadError # rescue LoadError for miniruby
1009
- end
1010
-
1011
1102
  def fu_get_uid(user) #:nodoc:
1012
1103
  return nil unless user
1013
1104
  case user
@@ -1016,6 +1107,7 @@ module FileUtils
1016
1107
  when /\A\d+\z/
1017
1108
  user.to_i
1018
1109
  else
1110
+ require 'etc'
1019
1111
  Etc.getpwnam(user) ? Etc.getpwnam(user).uid : nil
1020
1112
  end
1021
1113
  end
@@ -1029,6 +1121,7 @@ module FileUtils
1029
1121
  when /\A\d+\z/
1030
1122
  group.to_i
1031
1123
  else
1124
+ require 'etc'
1032
1125
  Etc.getgrnam(group) ? Etc.getgrnam(group).gid : nil
1033
1126
  end
1034
1127
  end
@@ -1069,8 +1162,11 @@ module FileUtils
1069
1162
  module StreamUtils_
1070
1163
  private
1071
1164
 
1072
- def fu_windows?
1073
- /mswin|mingw|bccwin|emx/ =~ RUBY_PLATFORM
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
1074
1170
  end
1075
1171
 
1076
1172
  def fu_copy_stream0(src, dest, blksize = nil) #:nodoc:
@@ -1194,10 +1290,17 @@ module FileUtils
1194
1290
 
1195
1291
  def entries
1196
1292
  opts = {}
1197
- opts[:encoding] = ::Encoding::UTF_8 if fu_windows?
1198
- Dir.entries(path(), opts)\
1199
- .reject {|n| n == '.' or n == '..' }\
1200
- .map {|n| Entry_.new(prefix(), join(rel(), n.untaint)) }
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)) }
1201
1304
  end
1202
1305
 
1203
1306
  def stat
@@ -1242,6 +1345,7 @@ module FileUtils
1242
1345
  else
1243
1346
  File.chmod mode, path()
1244
1347
  end
1348
+ rescue Errno::EOPNOTSUPP
1245
1349
  end
1246
1350
 
1247
1351
  def chown(uid, gid)
@@ -1252,6 +1356,22 @@ module FileUtils
1252
1356
  end
1253
1357
  end
1254
1358
 
1359
+ def link(dest)
1360
+ case
1361
+ when directory?
1362
+ if !File.exist?(dest) and descendant_directory?(dest, path)
1363
+ raise ArgumentError, "cannot link directory %s to itself %s" % [path, dest]
1364
+ end
1365
+ begin
1366
+ Dir.mkdir dest
1367
+ rescue
1368
+ raise unless File.directory?(dest)
1369
+ end
1370
+ else
1371
+ File.link path(), dest
1372
+ end
1373
+ end
1374
+
1255
1375
  def copy(dest)
1256
1376
  lstat
1257
1377
  case
@@ -1268,18 +1388,21 @@ module FileUtils
1268
1388
  end
1269
1389
  when symlink?
1270
1390
  File.symlink File.readlink(path()), dest
1271
- when chardev?
1272
- raise "cannot handle device file" unless File.respond_to?(:mknod)
1273
- mknod dest, ?c, 0666, lstat().rdev
1274
- when blockdev?
1275
- raise "cannot handle device file" unless File.respond_to?(:mknod)
1276
- mknod dest, ?b, 0666, lstat().rdev
1391
+ when chardev?, blockdev?
1392
+ raise "cannot handle device file"
1277
1393
  when socket?
1278
- raise "cannot handle socket" unless File.respond_to?(:mknod)
1279
- mknod dest, nil, lstat().mode, 0
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
1280
1403
  when pipe?
1281
1404
  raise "cannot handle FIFO" unless File.respond_to?(:mkfifo)
1282
- mkfifo dest, 0666
1405
+ File.mkfifo dest, lstat().mode
1283
1406
  when door?
1284
1407
  raise "cannot handle door: #{path()}"
1285
1408
  else
@@ -1317,7 +1440,7 @@ module FileUtils
1317
1440
  if st.symlink?
1318
1441
  begin
1319
1442
  File.lchmod mode, path
1320
- rescue NotImplementedError
1443
+ rescue NotImplementedError, Errno::EOPNOTSUPP
1321
1444
  end
1322
1445
  else
1323
1446
  File.chmod mode, path
@@ -1398,14 +1521,14 @@ module FileUtils
1398
1521
 
1399
1522
  private
1400
1523
 
1401
- $fileutils_rb_have_lchmod = nil
1524
+ @@fileutils_rb_have_lchmod = nil
1402
1525
 
1403
1526
  def have_lchmod?
1404
1527
  # This is not MT-safe, but it does not matter.
1405
- if $fileutils_rb_have_lchmod == nil
1406
- $fileutils_rb_have_lchmod = check_have_lchmod?
1528
+ if @@fileutils_rb_have_lchmod == nil
1529
+ @@fileutils_rb_have_lchmod = check_have_lchmod?
1407
1530
  end
1408
- $fileutils_rb_have_lchmod
1531
+ @@fileutils_rb_have_lchmod
1409
1532
  end
1410
1533
 
1411
1534
  def check_have_lchmod?
@@ -1416,14 +1539,14 @@ module FileUtils
1416
1539
  return false
1417
1540
  end
1418
1541
 
1419
- $fileutils_rb_have_lchown = nil
1542
+ @@fileutils_rb_have_lchown = nil
1420
1543
 
1421
1544
  def have_lchown?
1422
1545
  # This is not MT-safe, but it does not matter.
1423
- if $fileutils_rb_have_lchown == nil
1424
- $fileutils_rb_have_lchown = check_have_lchown?
1546
+ if @@fileutils_rb_have_lchown == nil
1547
+ @@fileutils_rb_have_lchown = check_have_lchown?
1425
1548
  end
1426
- $fileutils_rb_have_lchown
1549
+ @@fileutils_rb_have_lchown
1427
1550
  end
1428
1551
 
1429
1552
  def check_have_lchown?
@@ -1437,7 +1560,15 @@ module FileUtils
1437
1560
  def join(dir, base)
1438
1561
  return File.path(dir) if not base or base == '.'
1439
1562
  return File.path(base) if not dir or dir == '.'
1440
- File.join(dir, base)
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
1441
1572
  end
1442
1573
 
1443
1574
  if File::ALT_SEPARATOR
@@ -1445,10 +1576,13 @@ module FileUtils
1445
1576
  else
1446
1577
  DIRECTORY_TERM = "(?=/|\\z)"
1447
1578
  end
1448
- SYSCASE = File::FNM_SYSCASE.nonzero? ? "-i" : ""
1449
1579
 
1450
1580
  def descendant_directory?(descendant, ascendant)
1451
- /\A(?#{SYSCASE}:#{Regexp.quote(ascendant)})#{DIRECTORY_TERM}/ =~ File.dirname(descendant)
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
1452
1586
  end
1453
1587
  end # class Entry_
1454
1588
 
@@ -1487,13 +1621,13 @@ module FileUtils
1487
1621
  end
1488
1622
  private_module_function :fu_same?
1489
1623
 
1490
- @fileutils_output = $stderr
1491
- @fileutils_label = ''
1492
-
1493
1624
  def fu_output_message(msg) #:nodoc:
1494
- @fileutils_output ||= $stderr
1495
- @fileutils_label ||= ''
1496
- @fileutils_output.puts @fileutils_label + msg
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
1497
1631
  end
1498
1632
  private_module_function :fu_output_message
1499
1633
 
@@ -1504,8 +1638,11 @@ module FileUtils
1504
1638
  tbl
1505
1639
  }
1506
1640
 
1641
+ public
1642
+
1507
1643
  #
1508
- # Returns an Array of method names which have any options.
1644
+ # Returns an Array of names of high-level methods that accept any keyword
1645
+ # arguments.
1509
1646
  #
1510
1647
  # p FileUtils.commands #=> ["chmod", "cp", "cp_r", "install", ...]
1511
1648
  #
@@ -1544,7 +1681,7 @@ module FileUtils
1544
1681
  end
1545
1682
 
1546
1683
  #
1547
- # Returns an Array of method names which have the option +opt+.
1684
+ # Returns an Array of methods names which have the option +opt+.
1548
1685
  #
1549
1686
  # p FileUtils.collect_method(:preserve) #=> ["cp", "cp_r", "copy", "install"]
1550
1687
  #
@@ -1552,14 +1689,16 @@ module FileUtils
1552
1689
  OPT_TABLE.keys.select {|m| OPT_TABLE[m].include?(opt) }
1553
1690
  end
1554
1691
 
1555
- LOW_METHODS = singleton_methods(false) - collect_method(:noop).map(&:intern)
1556
- module LowMethods
1692
+ private
1693
+
1694
+ LOW_METHODS = singleton_methods(false) - collect_method(:noop).map(&:intern) # :nodoc:
1695
+ module LowMethods # :nodoc: internal use only
1557
1696
  private
1558
1697
  def _do_nothing(*)end
1559
1698
  ::FileUtils::LOW_METHODS.map {|name| alias_method name, :_do_nothing}
1560
1699
  end
1561
1700
 
1562
- METHODS = singleton_methods() - [:private_module_function,
1701
+ METHODS = singleton_methods() - [:private_module_function, # :nodoc:
1563
1702
  :commands, :options, :have_option?, :options_of, :collect_method]
1564
1703
 
1565
1704
  #
@@ -1569,8 +1708,6 @@ module FileUtils
1569
1708
  #
1570
1709
  module Verbose
1571
1710
  include FileUtils
1572
- @fileutils_output = $stderr
1573
- @fileutils_label = ''
1574
1711
  names = ::FileUtils.collect_method(:verbose)
1575
1712
  names.each do |name|
1576
1713
  module_eval(<<-EOS, __FILE__, __LINE__ + 1)
@@ -1594,8 +1731,6 @@ module FileUtils
1594
1731
  module NoWrite
1595
1732
  include FileUtils
1596
1733
  include LowMethods
1597
- @fileutils_output = $stderr
1598
- @fileutils_label = ''
1599
1734
  names = ::FileUtils.collect_method(:noop)
1600
1735
  names.each do |name|
1601
1736
  module_eval(<<-EOS, __FILE__, __LINE__ + 1)
@@ -1620,8 +1755,6 @@ module FileUtils
1620
1755
  module DryRun
1621
1756
  include FileUtils
1622
1757
  include LowMethods
1623
- @fileutils_output = $stderr
1624
- @fileutils_label = ''
1625
1758
  names = ::FileUtils.collect_method(:noop)
1626
1759
  names.each do |name|
1627
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.0.2
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: 2017-12-22 00:00:00.000000000 Z
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
@@ -54,16 +36,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
54
36
  requirements:
55
37
  - - ">="
56
38
  - !ruby/object:Gem::Version
57
- version: 2.4.0
39
+ version: 2.3.0
58
40
  required_rubygems_version: !ruby/object:Gem::Requirement
59
41
  requirements:
60
42
  - - ">="
61
43
  - !ruby/object:Gem::Version
62
44
  version: '0'
63
45
  requirements: []
64
- rubyforge_project:
65
- rubygems_version: 2.7.3
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
@@ -1,9 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.4.2
5
- - ruby-head
6
- script: rake test
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in fileutils.gemspec
4
- gemspec
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__)
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here