lib/command.rb in dev_commands-0.0.46 vs lib/command.rb in dev_commands-0.0.47

- old
+ new

@@ -1,10 +1,12 @@ require 'open3' require_relative('./array.rb') require_relative('./hash.rb') require_relative('./timer.rb') +BUFFER_SIZE=1024 if(!defined?(BUFFER_SIZE)) + # = Command # # execution of system commands # # = Keys @@ -46,63 +48,91 @@ self[k.to_sym]=v } end end - def execute - + def quiet? + (self.has_key?(:quiet) && self[:quiet]) + end + + def execute value=nil + + if(!value.nil? && value.is_a?(Hash)) + value.each{|k,v|self[k]=v} + end + pwd=Dir.pwd - Dir.chdir(self[:directory]) if(self.has_key?(:directory) && File.exists?(self[:directory])) - self[:directory] = pwd if(self[:directory].length==0) - - puts "#{self[:input]} (#{self[:directory]})" if(!self.has_key?(:quiet) || !self[:quiet]) + self[:directory] = pwd if(!self.has_key?(:directory) || self[:directory].length==0) + if(self[:timeout] > 0) + puts "#{self[:input]} (#{self[:directory]}) timeout #{self[:timeout].to_s}" if(!quiet?) + else + puts "#{self[:input]} (#{self[:directory]})" if(!quiet?) + end + self[:machine] = Command.machine self[:user] = Command.user self[:start_time]=Time.now timer=Timer.new - if self[:input].include?('<%') && self[:input].include?('%>') - ruby = self[:input].gsub("<%","").gsub("%>","") - begin - self[:output]=eval(ruby) - rescue - self[:exit_code]=1 - self[:error]="unable to eval(#{ruby})" - end + Dir.chdir(self[:directory]) do + if self[:input].include?('<%') && self[:input].include?('%>') + ruby = self[:input].gsub("<%","").gsub("%>","") - self[:elapsed] = timer.elapsed_str - self[:end_time] = Time.now - else - begin - self[:output],self[:error],status= Open3.capture3(self[:input]) - self[:exit_code]=status.to_i - self[:elapsed] = timer.elapsed_str - self[:end_time] = Time.now - rescue Exception => e - self[:elapsed] = timer.elapsed_str - self[:end_time] = Time.now - self[:error] = "Exception: " + e.to_s - self[:exit_code]=1 - end - end + begin + self[:output]=eval(ruby) + rescue + self[:exit_code]=1 + self[:error]="unable to eval(#{ruby})" + end - Dir.chdir(pwd) if pwd != Dir.pwd + self[:elapsed] = timer.elapsed_str + self[:end_time] = Time.now + else + begin + if(self[:timeout] <= 0) + self[:output],self[:error],status= Open3.capture3(self[:input]) + self[:exit_code]=status.to_i + self[:elapsed] = timer.elapsed_str + self[:end_time] = Time.now + else + require_relative 'timeout.rb' + #puts run_with_timeout(self[:input], self[:timeout], 1).to_s + #self[:output] = run_with_timeout(self[:input], self[:timeout], 1) + result=run_with_timeout(self[:directory],self[:input], self[:timeout], 1) + self[:output]=result[0] + self[:exit_code]=result[1] - if(self[:exit_code] != 0) - if(!self.has_key?(:quiet) || !self[:quiet]) - puts ' ' - puts "exit_code=#{self[:exit_code]}" - puts ' ' - puts self[:output] - puts self[:error] - puts ' ' + self[:elapsed] = timer.elapsed_str + self[:end_time] = Time.now + + if(timer.elapsed >= self[:timeout]) + self[:exit_code]=1 + self[:error] = self[:error] + "timed out" + end end - if(!self.has_key?(:ignore_failure) || !self[:ignore_failure]) - raise "#{self[:input]} failed" - end #unless (self.has_key?(:ignore_failure) && self[:ignore_failure]==true) - end + rescue Exception => e + self[:elapsed] = timer.elapsed_str + self[:end_time] = Time.now + self[:error] = "Exception: " + e.to_s + self[:exit_code]=1 + end + end + end + + + if(self[:exit_code] != 0) + if(!quiet?) + puts "exit_code=#{self[:exit_code]}" + puts self[:output] + puts self[:error] + end + if(!self.has_key?(:ignore_failure) || !self[:ignore_failure]) + raise "#{self[:input]} failed" + end #unless (self.has_key?(:ignore_failure) && self[:ignore_failure]==true) + end + end def self.machine if !ENV['COMPUTERNAME'].nil? return ENV['COMPUTERNAME'] \ No newline at end of file