Module: FileUtils
- Included in:
- RakeFileUtils
- Defined in:
- lib/rake.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']). 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}
1002 1003 1004 1005 1006 1007 1008 1009 |
# File 'lib/rake.rb', line 1002 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.
1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 |
# File 'lib/rake.rb', line 1015 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
964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 |
# File 'lib/rake.rb', line 964 def sh(*cmd, &block) = (Hash === cmd.last) ? cmd.pop : {} unless block_given? show_command = cmd.join(" ") show_command = show_command[0,42] + "..." # 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] = false else [:verbose] ||= RakeFileUtils.verbose_flag end [:noop] ||= RakeFileUtils.nowrite_flag , :noop, :verbose cmd.join(" ") if [:verbose] unless [:noop] res = rake_system(*cmd) block.call(res, $?) end end |
#split_all(path) ⇒ Object
Split a file path into individual directory names.
Example:
split_all("a/b/c") => ['a', 'b', 'c']
1033 1034 1035 1036 1037 1038 |
# File 'lib/rake.rb', line 1033 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 |