Alternate implementations of system() and backticks " on Windows for ruby-1.8 and earlier.
# File lib/rake/alt_system.rb, line 36 def define_module_function(name, &block) define_method(name, &block) module_function(name) end
# File lib/rake/alt_system.rb, line 98 def backticks(cmd) kernel_backticks(repair_command(cmd)) end
# File lib/rake/alt_system.rb, line 71 def find_runnable(file) if file =~ RUNNABLE_PATTERN file else RUNNABLE_EXTS.each { |ext| if File.exist?(test = "#{file}.#{ext}") return test end } nil end end
# File lib/rake/alt_system.rb, line 51 def repair_command(cmd) "call " + ( if cmd =~ %r\A\s*\".*?\"! # already quoted cmd elsif match = cmd.match(%r\A\s*(\S+)!) if match[1] =~ %r/! # avoid x/y.bat interpretation as x with option /y %Q"#{match[1]}"! + match.post_match else # a shell command will fail if quoted cmd end else # empty or whitespace cmd end ) end
# File lib/rake/alt_system.rb, line 84 def system(cmd, *args) repaired = ( if args.empty? [repair_command(cmd)] elsif runnable = find_runnable(cmd) [File.expand_path(runnable), *args] else # non-existent file [cmd, *args] end ) kernel_system(*repaired) end