Skip to content

Commit a4da433

Browse files
[DOC] Enhanced RDoc for ::cp_r (#75)
1 parent 956b345 commit a4da433

File tree

1 file changed

+68
-17
lines changed

1 file changed

+68
-17
lines changed

lib/fileutils.rb

Lines changed: 68 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -677,6 +677,8 @@ def link_entry(src, dest, dereference_root = false, remove_destination = false)
677677
#
678678
# Raises an exception if +src+ is a directory.
679679
#
680+
# Related: FileUtils.cp_r (recursive).
681+
#
680682
# FileUtils.copy is an alias for FileUtils.cp.
681683
#
682684
def cp(src, dest, preserve: nil, noop: nil, verbose: nil)
@@ -691,30 +693,79 @@ def cp(src, dest, preserve: nil, noop: nil, verbose: nil)
691693
alias copy cp
692694
module_function :copy
693695

696+
# Recursively copies files from +src+ to +dest+.
694697
#
695-
# Copies +src+ to +dest+. If +src+ is a directory, this method copies
696-
# all its contents recursively. If +dest+ is a directory, copies
697-
# +src+ to +dest/src+.
698698
#
699-
# +src+ can be a list of files.
699+
# If +src+ is the path to a file and +dest+ is not the path to a directory,
700+
# copies +src+ to +dest+:
700701
#
701-
# If +dereference_root+ is true, this method dereference tree root.
702+
# FileUtils.touch('src0.txt')
703+
# File.exist?('dest0.txt') # => false
704+
# FileUtils.cp_r('src0.txt', 'dest0.txt')
705+
# File.exist?('dest0.txt') # => true
702706
#
703-
# If +remove_destination+ is true, this method removes each destination file before copy.
707+
# If +src+ is the path to a file and +dest+ is the path to a directory,
708+
# copies +src+ to <tt>dest/src</tt>:
709+
#
710+
# FileUtils.touch('src1.txt')
711+
# FileUtils.mkdir('dest1')
712+
# FileUtils.cp_r('src1.txt', 'dest1')
713+
# File.exist?('dest1/src1.txt') # => true
714+
#
715+
# If +src+ is the path to a directory and +dest+ does not exist,
716+
# recursively copies +src+ to +dest+:
717+
#
718+
# FileUtils.mkdir_p(['src2/dir0', 'src2/dir1'])
719+
# FileUtils.touch('src2/dir0/src0.txt')
720+
# FileUtils.touch('src2/dir0/src1.txt')
721+
# FileUtils.touch('src2/dir1/src2.txt')
722+
# FileUtils.touch('src2/dir1/src3.txt')
723+
# FileUtils.cp_r('src2', 'dest2')
724+
# File.exist?('dest2/dir0/src0.txt') # => true
725+
# File.exist?('dest2/dir0/src1.txt') # => true
726+
# File.exist?('dest2/dir1/src2.txt') # => true
727+
# File.exist?('dest2/dir1/src3.txt') # => true
728+
#
729+
# If +src+ and +dest+ are paths to directories,
730+
# recursively copies +src+ to <tt>dest/src</tt>:
731+
#
732+
# FileUtils.mkdir_p(['src3/dir0', 'src3/dir1'])
733+
# FileUtils.touch('src3/dir0/src0.txt')
734+
# FileUtils.touch('src3/dir0/src1.txt')
735+
# FileUtils.touch('src3/dir1/src2.txt')
736+
# FileUtils.touch('src3/dir1/src3.txt')
737+
# FileUtils.mkdir('dest3')
738+
# FileUtils.cp_r('src3', 'dest3')
739+
# File.exist?('dest3/src3/dir0/src0.txt') # => true
740+
# File.exist?('dest3/src3/dir0/src1.txt') # => true
741+
# File.exist?('dest3/src3/dir1/src2.txt') # => true
742+
# File.exist?('dest3/src3/dir1/src3.txt') # => true
743+
#
744+
# Keyword arguments:
745+
#
746+
# - <tt>dereference_root: false</tt> - if +src+ is a symbolic link,
747+
# does not dereference it.
748+
# - <tt>noop: true</tt> - does not copy files.
749+
# - <tt>preserve</tt> - preserves file times.
750+
# - <tt>remove_destination: true</tt> - removes +dest+ before copying files.
751+
# - <tt>verbose: true</tt> - prints an equivalent command:
752+
#
753+
# FileUtils.cp_r('src0.txt', 'dest0.txt', noop: true, verbose: true)
754+
# FileUtils.cp_r('src1.txt', 'dest1', noop: true, verbose: true)
755+
# FileUtils.cp_r('src2', 'dest2', noop: true, verbose: true)
756+
# FileUtils.cp_r('src3', 'dest3', noop: true, verbose: true)
757+
#
758+
# Output:
704759
#
705-
# # Installing Ruby library "mylib" under the site_ruby
706-
# FileUtils.rm_r site_ruby + '/mylib', force: true
707-
# FileUtils.cp_r 'lib/', site_ruby + '/mylib'
760+
# cp -r src0.txt dest0.txt
761+
# cp -r src1.txt dest1
762+
# cp -r src2 dest2
763+
# cp -r src3 dest3
708764
#
709-
# # Examples of copying several files to target directory.
710-
# FileUtils.cp_r %w(mail.rb field.rb debug/), site_ruby + '/tmail'
711-
# FileUtils.cp_r Dir.glob('*.rb'), '/home/foo/lib/ruby', noop: true, verbose: true
765+
# Raises an exception of +src+ is the path to a directory
766+
# and +dest+ is the path to a file.
712767
#
713-
# # If you want to copy all contents of a directory instead of the
714-
# # directory itself, c.f. src/x -> dest/x, src/y -> dest/y,
715-
# # use following code.
716-
# FileUtils.cp_r 'src/.', 'dest' # cp_r('src', 'dest') makes dest/src,
717-
# # but this doesn't.
768+
# Related: FileUtils.cp (not recursive).
718769
#
719770
def cp_r(src, dest, preserve: nil, noop: nil, verbose: nil,
720771
dereference_root: true, remove_destination: nil)

0 commit comments

Comments
 (0)