lib/command.rb in dev_commands-0.0.41 vs lib/command.rb in dev_commands-0.0.42
- old
+ new
@@ -1,13 +1,30 @@
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
+#
+# - :input The input of the commands.
+# - :timeout The timeout in seconds.
+# a value of zero is to infinite timeout.
+# defaults to zero
+# - :directory The working directory for the command.
+# defaults to the current directory
+# - :exit_code The exit code of the command
+# - :output The output contains the stdout output of the command
+# - :error The error contains stderr output of the command
+# - :machine The name of the machine the command executed on
+# - :user The user name
+# - :start_time
+# - :end_time
+#
class Command < Hash
def initialize command
self[:input] = ''
self[:timeout] = 0
@@ -29,27 +46,16 @@
self[k.to_sym]=v
}
end
end
- 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
+ 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
@@ -65,31 +71,14 @@
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[:input], self[:timeout], 1)
- self[:output]=result[0]
- self[:exit_code]=result[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
+ 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
@@ -97,13 +86,16 @@
end
Dir.chdir(pwd) if pwd != Dir.pwd
if(self[:exit_code] != 0)
- if(!quiet?)
+ if(!self.has_key?(:quiet) || !self[:quiet])
+ puts ' '
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