lib/command.rb in dev_commands-0.0.38 vs lib/command.rb in dev_commands-0.0.39

- old
+ new

@@ -1,14 +1,17 @@ require 'open3' require_relative('./array.rb') require_relative('./hash.rb') require_relative('./timer.rb') +BUFFER_SIZE=1024 if(!defined?(BUFFER_SIZE)) + + class Command < Hash def initialize command - self[:input] = '' + self[:input] = '' self[:timeout] = 0 self[:directory] = '' self[:exit_code] = 0 self[:output] = '' self[:error] = '' @@ -26,16 +29,23 @@ self[k.to_sym]=v } end end + def quiet? + (self.has_key?(:quiet) && self[:quiet]) + end + def execute - puts "#{self[:input]}" if(!self.has_key?(:quiet) || !self[:quiet]) pwd=Dir.pwd Dir.chdir(self[:directory]) if(self.has_key?(:directory) && File.exists?(self[:directory])) self[:directory] = pwd if(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 @@ -51,14 +61,27 @@ 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 + 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' + self[:output] = run_with_timeout(self[:input], self[:timeout], 1) + + 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 rescue Exception => e self[:elapsed] = timer.elapsed_str self[:end_time] = Time.now self[:error] = "Exception: " + e.to_s self[:exit_code]=1 @@ -66,16 +89,13 @@ end Dir.chdir(pwd) if pwd != Dir.pwd if(self[:exit_code] != 0) - if(!self.has_key?(:quiet) || !self[:quiet]) - puts ' ' + if(!quiet?) puts "exit_code=#{self[:exit_code]}" - puts ' ' puts self[:output] puts self[:error] - puts ' ' 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 \ No newline at end of file