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