Module: FileUtils
- Included in:
- RakeFileUtils
- 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 =
File.join( Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'] + Config::CONFIG['EXEEXT']). sub(/.*\s.*/m, '"\&"')
- LN_SUPPORTED =
[true]
Instance Method Summary collapse
-
#ruby(*args, &block) ⇒ Object
Run a Ruby interpreter with the given arguments.
-
#safe_ln(*args) ⇒ 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, &block) ⇒ Object
Run a Ruby interpreter with the given arguments.
Example:
ruby %{-pe '$_.upcase!' <README}
66 67 68 69 70 71 72 73 |
# File 'lib/rake/file_utils.rb', line 66 def ruby(*args,&block) = (Hash === args.last) ? args.pop : {} if args.length > 1 then sh(*([RUBY] + args + []), &block) else sh("#{RUBY} #{args.first}", , &block) end end |
#safe_ln(*args) ⇒ Object
Attempt to do a normal file link, but fall back to a copy if the link
fails.
79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/rake/file_utils.rb', line 79 def safe_ln(*args) unless LN_SUPPORTED[0] cp(*args) else begin ln(*args) rescue StandardError, NotImplementedError => ex LN_SUPPORTED[0] = false cp(*args) end end end |
#sh(*cmd, &block) ⇒ Object
Run the system command cmd. If multiple arguments are given the command is not run with the shell (same semantics as Kernel::exec and Kernel::system).
Example:
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
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/rake/file_utils.rb', line 30 def sh(*cmd, &block) = (Hash === cmd.last) ? cmd.pop : {} unless block_given? show_command = cmd.join(" ") show_command = show_command[0,42] + "..." unless $trace # TODO code application logic heref show_command.length > 45 block = lambda { |ok, status| ok or fail "Command failed with status (#{status.exitstatus}): [#{show_command}]" } end if RakeFileUtils.verbose_flag == :default [:verbose] = true else [:verbose] ||= RakeFileUtils.verbose_flag end [:noop] ||= RakeFileUtils.nowrite_flag , :noop, :verbose cmd.join(" ") if [:verbose] unless [:noop] res = rake_system(*cmd) status = $? status = PseudoStatus.new(1) if !res && status.nil? block.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']
97 98 99 100 101 102 |
# File 'lib/rake/file_utils.rb', line 97 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 |