Module: FileUtils
- Included in:
- Rake::Cleaner, Rake::FileUtilsExt
- Defined in:
- lib/rake/file_utils.rb
Overview
– This a FileUtils extension that defines several additional commands to be added to the FileUtils utility functions.
Constant Summary collapse
- RUBY =
Path to the currently running Ruby program
ENV["RUBY"] || File.join( RbConfig::CONFIG["bindir"], RbConfig::CONFIG["ruby_install_name"] + RbConfig::CONFIG["EXEEXT"]). sub(/.*\s.*/m, '"\&"')
- LN_SUPPORTED =
[true]
Instance Method Summary collapse
-
#ruby(*args, **options, &block) ⇒ Object
Run a Ruby interpreter with the given arguments.
-
#safe_ln(*args, **options) ⇒ Object
Attempt to do a normal file link, but fall back to a copy if the link fails.
-
#sh(*cmd, &block) ⇒ Object
Run the system command
cmd
. -
#split_all(path) ⇒ Object
Split a file path into individual directory names.
Instance Method Details
#ruby(*args, **options, &block) ⇒ Object
Run a Ruby interpreter with the given arguments.
Example:
ruby %{-pe '$_.upcase!' <README}
100 101 102 103 104 105 106 |
# File 'lib/rake/file_utils.rb', line 100 def ruby(*args, **, &block) if args.length > 1 sh(RUBY, *args, **, &block) else sh("#{RUBY} #{args.first}", **, &block) end end |
#safe_ln(*args, **options) ⇒ Object
Attempt to do a normal file link, but fall back to a copy if the link
fails.
112 113 114 115 116 117 118 119 120 121 |
# File 'lib/rake/file_utils.rb', line 112 def safe_ln(*args, **) if LN_SUPPORTED[0] begin return .empty? ? ln(*args) : ln(*args, **) rescue StandardError, NotImplementedError LN_SUPPORTED[0] = false end end .empty? ? cp(*args) : cp(*args, **) end |
#sh(*cmd, &block) ⇒ Object
Run the system command cmd
. If multiple arguments are given the command is run directly (without the shell, same semantics as Kernel::exec and Kernel::system).
It is recommended you use the multiple argument form over interpolating user input for both usability and security reasons. With the multiple argument form you can easily process files with spaces or other shell reserved characters in them. With the multiple argument form your rake tasks are not vulnerable to users providing an argument like ; rm # -rf /
.
If a block is given, upon command completion the block is called with an OK flag (true on a zero exit status) and a Process::Status object. Without a block a RuntimeError is raised when the command exits non-zero.
Examples:
sh 'ls -ltr'
sh 'ls', 'file with spaces'
# check exit status after command runs
sh %{grep pattern file} do |ok, res|
if !ok
puts "pattern not found (status = #{res.exitstatus})"
end
end
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/rake/file_utils.rb', line 43 def sh(*cmd, &block) = (Hash === cmd.last) ? cmd.pop : {} shell_runner = block_given? ? block : create_shell_runner(cmd) set_verbose_option() verbose = .delete :verbose noop = .delete(:noop) || Rake::FileUtilsExt.nowrite_flag Rake. sh_show_command cmd if verbose unless noop res = (Hash === cmd.last) ? system(*cmd) : system(*cmd, ) status = $? status = Rake::PseudoStatus.new(1) if !res && status.nil? shell_runner.call(res, status) end end |
#split_all(path) ⇒ Object
Split a file path into individual directory names.
Example:
split_all("a/b/c") => ['a', 'b', 'c']
128 129 130 131 132 133 |
# File 'lib/rake/file_utils.rb', line 128 def split_all(path) head, tail = File.split(path) return [tail] if head == "." || tail == "/" return [head, tail] if head == "/" return split_all(head) + [tail] end |