lib/ormdev/source/util/sh_util.rb in ormdev-0.0.2 vs lib/ormdev/source/util/sh_util.rb in ormdev-0.0.3

- old
+ new

@@ -1,80 +1,16 @@ -require 'fastlane' +require_relative 'log_util' -require_relative '../util/log_util' - -module Ormdev +module OrmDev class SHUtil - # 工具方法 def self.run_command(command, message = '', abort = true) result = system(command) if command.is_a?(String) - ORM::LogUtil.print_command message + OrmDev::LogUtil.print_command message unless result then - ORM::LogUtil.print_error "操作内容:#{message}\n操作命令:#{command}" + OrmDev::LogUtil.print_error "操作内容:#{message}\n操作命令:#{command}" abort(message) if abort end result end - - # Execute a shell command - # This method will output the string and execute it - # Just an alias for sh_no_action - # When running this in tests, it will return the actual command instead of executing it - # @param log [Boolean] should fastlane print out the executed command - # @param error_callback [Block] a callback invoked with the command output if there is a non-zero exit status - def self.sh(command, log: true, error_callback: nil) - sh_control_output(command, print_command: log, print_command_output: log, error_callback: error_callback) - end - - def self.sh_no_action(command, log: true, error_callback: nil) - sh_control_output(command, print_command: log, print_command_output: log, error_callback: error_callback) - end - - # @param command [String] The command to be executed - # @param print_command [Boolean] Should we print the command that's being executed - # @param print_command_output [Boolean] Should we print the command output during execution - # @param error_callback [Block] A block that's called if the command exits with a non-zero status - def self.sh_control_output(command, print_command: true, print_command_output: true, error_callback: nil) - print_command = print_command_output = true if $troubleshoot - # Set the encoding first, the user might have set it wrong - previous_encoding = [Encoding.default_external, Encoding.default_internal] - Encoding.default_external = Encoding::UTF_8 - Encoding.default_internal = Encoding::UTF_8 - - command = command.join(' ') if command.kind_of?(Array) # since it's an array of one element when running from the Fastfile - FastlaneCore::UI.command(command) if print_command - - result = '' - - exit_status = nil - IO.popen(command, err: [:child, :out]) do |io| - io.sync = true - io.each do |line| - FastlaneCore::UI.command_output(line.strip) if print_command_output - result << line - end - io.close - exit_status = $?.exitstatus - end - - if exit_status != 0 - message = if print_command - "Exit status of command '#{command}' was #{exit_status} instead of 0." - else - "Shell command exited with exit status #{exit_status} instead of 0." - end - message += "\n#{result}" if print_command_output - - error_callback.call(result) if error_callback - FastlaneCore::UI.shell_error!(message) - end - - result - rescue => ex - raise ex - ensure - Encoding.default_external = previous_encoding.first - Encoding.default_internal = previous_encoding.last - end end -end \ No newline at end of file +end