Files

Mixlib::ShellOut::Windows::Utils

Public Class Methods

find_executable(path) click to toggle source

Windows has a different notion of what "executable" means The OS will search through valid the extensions and look for a binary there.

# File lib/mixlib/shellout/windows.rb, line 301
def self.find_executable(path)
  return path if File.executable? path

  pathext.each do |ext|
    exe = "#{path}#{ext}"
    return exe if File.executable? exe
  end
  return nil
end
pathext() click to toggle source
# File lib/mixlib/shellout/windows.rb, line 284
def self.pathext
  @pathext ||= ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') + [''] : ['']
end
should_run_under_cmd?(command) click to toggle source

api: semi-private If there are special characters parsable by cmd.exe (such as file redirection), then this method should return true.

This parser is based on github.com/ruby/ruby/blob/9073db5cb1d3173aff62be5b48d00f0fb2890991/win32/win32.c#L1437

# File lib/mixlib/shellout/windows.rb, line 250
def self.should_run_under_cmd?(command)
  return true if command =~ /^@/

  quote = nil
  env = false
  env_first_char = false

  command.dup.each_char do |c|
    case c
    when "'", '"'
      if (!quote)
        quote = c
      elsif quote == c
        quote = nil
      end
      next
    when '>', '<', '|', '&', "\n"
      return true unless quote
    when '%'
      return true if env
      env = env_first_char = true
      next
    else
      next unless env
      if env_first_char
        env_first_char = false
        env = false and next if c !~ /[A-Za-z_]/
      end
      env = false if c !~ /[A-Za-z1-9_]/
    end
  end
  return false
end
which(cmd) click to toggle source

which() mimicks the Unix which command FIXME: it is not working

# File lib/mixlib/shellout/windows.rb, line 290
def self.which(cmd)
  ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
    exe = find_executable("#{path}/#{cmd}")
    return exe if exe
  end
  return nil
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.