execute

in lib/gdk/shellout.rb [30:64]


    def execute(display_output: true, display_error: true, retry_attempts: DEFAULT_EXECUTE_RETRY_ATTEMPTS, retry_delay_secs: DEFAULT_EXECUTE_RETRY_DELAY_SECS)
      retried ||= false
      GDK::Output.debug("command=[#{command}], opts=[#{opts}], display_output=[#{display_output}], retry_attempts=[#{retry_attempts}]")

      duration = Benchmark.realtime do
        display_output ? stream : try_run
      end

      GDK::Output.debug("result: success?=[#{success?}], stdout=[#{read_stdout}], stderr=[#{read_stderr}], duration=[#{duration.round(2)} seconds]")

      raise ExecuteCommandFailedError, command unless success?

      if retried
        retry_success_message = "'#{command}' succeeded after retry."
        GDK::Output.success(retry_success_message)
      end

      self
    rescue StreamCommandFailedError, ExecuteCommandFailedError => e
      error_message = "'#{command}' failed."

      if (retry_attempts -= 1).negative?
        GDK::Output.error(error_message, e) if display_error

        self
      else
        retried = true
        error_message += " Retrying in #{retry_delay_secs} secs.."
        GDK::Output.error(error_message, e) if display_error

        sleep(retry_delay_secs)
        retry
      end
    end