commands: support .sh commands

This commit is contained in:
Baptiste Fontaine 2016-01-18 00:55:50 +01:00
parent b8547eab2c
commit c1e673e19a
2 changed files with 81 additions and 7 deletions

View File

@ -27,18 +27,30 @@ module Homebrew
end end
def internal_commands def internal_commands
(HOMEBREW_LIBRARY_PATH/"cmd").children.select(&:file?).map { |f| f.basename(".rb").to_s } find_internal_commands HOMEBREW_LIBRARY_PATH/"cmd"
end end
def internal_development_commands def internal_development_commands
(HOMEBREW_LIBRARY_PATH/"dev-cmd").children.select(&:file?).map { |f| f.basename(".rb").to_s } find_internal_commands HOMEBREW_LIBRARY_PATH/"dev-cmd"
end end
def external_commands def external_commands
paths.flat_map { |p| Dir["#{p}/brew-*"] }. paths.reduce([]) do |cmds, path|
select { |f| File.executable?(f) }. Dir["#{path}/brew-*"].each do |file|
map { |f| File.basename(f, ".rb")[5..-1] }. next unless File.executable?(file)
reject { |f| f =~ /\./ }. cmd = File.basename(file, ".rb")[5..-1]
sort cmds << cmd unless cmd.include?(".")
end
cmds
end.sort
end
private
def find_internal_commands(directory)
directory.children.reduce([]) do |cmds, f|
cmds << f.basename.to_s.sub(/\.(?:rb|sh)$/, "") if f.file?
cmds
end
end end
end end

View File

@ -0,0 +1,62 @@
require "testing_env"
require "cmd/commands"
require "fileutils"
class CommandsCommandTests < Homebrew::TestCase
def setup
@cmds = [
# internal commands
HOMEBREW_LIBRARY_PATH/"cmd/rbcmd.rb",
HOMEBREW_LIBRARY_PATH/"cmd/shcmd.sh",
# internal development commands
HOMEBREW_LIBRARY_PATH/"dev-cmd/rbdevcmd.rb",
HOMEBREW_LIBRARY_PATH/"dev-cmd/shdevcmd.sh",
]
@cmds.each { |f| FileUtils.touch f }
end
def teardown
@cmds.each { |f| f.unlink }
end
def test_internal_commands
cmds = Homebrew.internal_commands
assert cmds.include?("rbcmd"), "Ruby commands files should be recognized"
assert cmds.include?("shcmd"), "Shell commands files should be recognized"
refute cmds.include?("rbdevcmd"), "Dev commands shouldn't be included"
end
def test_internal_development_commands
cmds = Homebrew.internal_development_commands
assert cmds.include?("rbdevcmd"), "Ruby commands files should be recognized"
assert cmds.include?("shdevcmd"), "Shell commands files should be recognized"
refute cmds.include?("rbcmd"), "Non-dev commands shouldn't be included"
end
def test_external_commands
env = ENV.to_hash
mktmpdir do |dir|
%w[brew-t1 brew-t2.rb brew-t3.py].each do |file|
path = "#{dir}/#{file}"
FileUtils.touch path
FileUtils.chmod 0744, path
end
FileUtils.touch "#{dir}/t4"
ENV["PATH"] = "#{ENV["PATH"]}#{File::PATH_SEPARATOR}#{dir}"
cmds = Homebrew.external_commands
assert cmds.include?("t1"), "Executable files should be included"
assert cmds.include?("t2"), "Executable Ruby files should be included"
refute cmds.include?("t3"),
"Executable files with a non Ruby extension shoudn't be included"
refute cmds.include?("t4"), "Non-executable files shouldn't be included"
end
ensure
ENV.replace(env)
end
end