Module: FileUtils
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Extended In:
| |
Included In:
| |
Defined in: | lib/rake/file_utils.rb |
Constant Summary
-
LN_SUPPORTED =
# File 'lib/rake/file_utils.rb', line 109[true]
-
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, '"\&"')
Instance Method Summary
-
#ruby(*args, &block)
Run a Ruby interpreter with the given arguments.
-
#safe_ln(*args)
Attempt to do a normal file link, but fall back to a copy if the link fails.
-
#sh(*cmd, &block)
Run the system command
cmd
. -
#split_all(path)
Split a file path into individual directory names.
- #create_shell_runner(cmd) private Internal use only
- #set_verbose_option(options) private Internal use only
- #sh_show_command(cmd) private Internal use only
Instance Method Details
#create_shell_runner(cmd) (private)
# File 'lib/rake/file_utils.rb', line 61
def create_shell_runner(cmd) # :nodoc: show_command = sh_show_command cmd show_command = show_command[0, 42] + "..." unless $trace lambda do |ok, status| ok or fail "Command failed with status (#{status.exitstatus}): " + "[#{show_command}]" end end
#ruby(*args, &block)
Run a Ruby interpreter with the given arguments.
Example:
ruby %{-pe '$_.upcase!' <README}
#safe_ln(*args)
Attempt to do a normal file link, but fall back to a copy if the link fails.
# File 'lib/rake/file_utils.rb', line 113
def safe_ln(*args) if !LN_SUPPORTED[0] cp(*args) else begin ln(*args) rescue StandardError, NotImplementedError LN_SUPPORTED[0] = false cp(*args) end end end
#set_verbose_option(options) (private)
# File 'lib/rake/file_utils.rb', line 86
def set_verbose_option( ) # :nodoc: unless .key? :verbose [:verbose] = (Rake::FileUtilsExt.verbose_flag == Rake::FileUtilsExt::DEFAULT) || Rake::FileUtilsExt.verbose_flag end end
#sh(*cmd, &block)
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
# 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
#sh_show_command(cmd) (private)
# File 'lib/rake/file_utils.rb', line 73
def sh_show_command(cmd) # :nodoc: cmd = cmd.dup if Hash === cmd.first env = cmd.first env = env.map { |name, value| "#{name}=#{value}" }.join " " cmd[0] = env end cmd.join " " end
#split_all(path)
Split a file path into individual directory names.
Example:
split_all("a/b/c") => ['a', 'b', 'c']
# File 'lib/rake/file_utils.rb', line 131
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