module Bundler::FileUtils

def cp_lr(src, dest, noop: nil, verbose: nil,


Related: {methods for copying}[rdoc-ref:FileUtils@Copying].

and keyword argument remove_destination: true is not given.
Raises an exception if +dest+ is the path to an existing file or directory

cp -lr src2/sub0 src2/sub1 dest2
cp -lr src1 dest1
cp -lr src0 dest0

Output:

Bundler::FileUtils.cp_lr(['src2/sub0', 'src2/sub1'], 'dest2', noop: true, verbose: true)
Bundler::FileUtils.cp_lr('src1', 'dest1', noop: true, verbose: true)
Bundler::FileUtils.cp_lr('src0', 'dest0', noop: true, verbose: true)

- verbose: true - prints an equivalent command:
- remove_destination: true - removes +dest+ before creating links.
- noop: true - does not create links.
does not dereference it.
- dereference_root: false - if +src+ is a symbolic link,

Keyword arguments:

# `-- src3.txt
# |-- src2.txt
# `-- sub1
# | `-- src1.txt
# | |-- src0.txt
# |-- sub0
# => dest2
tree('dest2')
Bundler::FileUtils.cp_lr(['src2/sub0', 'src2/sub1'], 'dest2')
Bundler::FileUtils.mkdir('dest2')
# `-- src3.txt
# |-- src2.txt
# `-- sub1
# | `-- src1.txt
# | |-- src0.txt
# |-- sub0
# => src2
tree('src2')

pointing to that path:
for each path +filepath+ in +src+, creates a link at dest/filepath
If +src+ is an array of paths to entries and +dest+ is the path to a directory,

# `-- src3.txt
# |-- src2.txt
# `-- sub1
# | `-- src1.txt
# | |-- src0.txt
# |-- sub0
# `-- src1
# => dest1
tree('dest1')
Bundler::FileUtils.cp_lr('src1', 'dest1')
Bundler::FileUtils.mkdir('dest1')
# `-- src3.txt
# |-- src2.txt
# `-- sub1
# | `-- src1.txt
# | |-- src0.txt
# |-- sub0
# => src1
tree('src1')

pointing to +src+ and its descendents:
creates links dest/src and descendents
If +src+ and +dest+ are both paths to directories,

# `-- src3.txt
# |-- src2.txt
# `-- sub1
# | `-- src1.txt
# | |-- src0.txt
# |-- sub0
# => dest0
tree('dest0')
Bundler::FileUtils.cp_lr('src0', 'dest0')
File.exist?('dest0') # => false
# `-- src3.txt
# |-- src2.txt
# `-- sub1
# | `-- src1.txt
# | |-- src0.txt
# |-- sub0
# => src0
tree('src0')

creates links +dest+ and descendents pointing to +src+ and its descendents:
If +src+ is the path to a directory and +dest+ does not exist,

should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
and +dest+ (a single path)
Arguments +src+ (a single path or an array of paths)

Creates {hard links}[https://en.wikipedia.org/wiki/Hard_link].
def cp_lr(src, dest, noop: nil, verbose: nil,
          dereference_root: true, remove_destination: false)
  fu_output_message "cp -lr#{remove_destination ? ' --remove-destination' : ''} #{[src,dest].flatten.join ' '}" if verbose
  return if noop
  fu_each_src_dest(src, dest) do |s, d|
    link_entry s, d, dereference_root, remove_destination
  end
end