#!/usr/bin/env ruby require 'rbbt-util' require 'rbbt/util/simpleopt' $0 = "rbbt #{$previous_commands*" "} #{ File.basename(__FILE__) }" if $previous_commands options = SOPT.setup <<EOF Run a workflow command $ rbbt workflow cmd <workflow> <command> [<subcommands>] [<options>] [<arg> ...] EOF workflow = ARGV.shift if workflow == '-h' if defined? rbbt_usage rbbt_usage else puts SOPT.doc end exit 0 end raise ParameterException, "No workflow specified" if workflow.nil? require 'rbbt/workflow' wf = Workflow.require_workflow workflow dir = $command_dir = wf.libdir.share.rbbt_commands.find def prev_dir(prev) rbbt_command_dir = $command_dir prev.each do |previous_command| rbbt_command_dir = rbbt_command_dir[previous_command] end rbbt_command_dir end def commands(prev) rbbt_command_dir = prev_dir(prev) command_file_dirs = rbbt_command_dir.find_all command_files = command_file_dirs.collect{|d| d.glob('*') }.flatten command_files.collect{|p| File.basename(p) }.uniq.reject{|p| p =~ /\.desc$/}.sort end prev = [] $previous_commands << 'cmd' $previous_commands << workflow begin while ARGV.any? command = ARGV.shift case when File.directory?(dir[command].find) prev << command $previous_commands << command dir = dir[command] when File.directory?(dir[command].find) prev << command dir = dir[command] when dir[command].exists? load dir[command].find exit 0 else if command == 'bootstrap' Log.info "No bootstrap for #{ workflow }, running examples instead" puts `rbbt workflow example #{ workflow }` exit 0 end puts "Error: Command not understood" puts break end end end puts SOPT.doc puts puts Log.color :magenta, "## COMMANDS" puts puts Log.color :magenta, "Command:" puts puts " rbbt #{$previous_commands * " "} " puts puts Log.color :magenta, "Subcommands:" puts commands(prev).each do |command| directory = File.directory? dir[command].find if directory puts " " << Log.color(:blue, command) else puts " " << command end end