module Autobuild::Reporting
The reporting module provides the framework # to run commands in
autobuild and report errors # to the user
It does not use a logging framework like Log4r, but it should ;-)
Public Class Methods
<<(reporter)
click to toggle source
Add a new reporter
# File lib/autobuild/reporting.rb, line 194 def self.<<(reporter) @reporters << reporter end
clear_reporters()
click to toggle source
# File lib/autobuild/reporting.rb, line 202 def self.clear_reporters @reporters.clear end
default_report_on_package_failures()
click to toggle source
@api private
Helper that returns the default for on_package_failures
The result depends on the value for Autobuild.debug. It is either :exit if debug is false, or :raise if it is true
# File lib/autobuild/reporting.rb, line 131 def self.default_report_on_package_failures if Autobuild.debug then :raise else :exit end end
each_log(&block)
click to toggle source
Iterate on all log files
# File lib/autobuild/reporting.rb, line 211 def self.each_log(&block) Autobuild.logfiles.each(&block) end
each_reporter(&iter)
click to toggle source
# File lib/autobuild/reporting.rb, line 206 def self.each_reporter(&iter) @reporters.each(&iter) end
error(error)
click to toggle source
Reports that the build failed to the user
# File lib/autobuild/reporting.rb, line 189 def self.error(error) each_reporter { |rep| rep.error(error) } end
remove(reporter)
click to toggle source
# File lib/autobuild/reporting.rb, line 198 def self.remove(reporter) @reporters.delete(reporter) end
report(on_package_failures: default_report_on_package_failures) { || ... }
click to toggle source
Run a block and report known exception
If an exception is fatal, the program is terminated using exit()
# File lib/autobuild/reporting.rb, line 102 def self.report(on_package_failures: default_report_on_package_failures) begin yield rescue Interrupt => e interrupted = e rescue Autobuild::Exception => e return report_finish_on_error([e], on_package_failures: on_package_failures, interrupted_by: interrupted) end # If ignore_erorrs is true, check if some packages have failed # on the way. If so, raise an exception to inform the user about # it errors = [] Autobuild::Package.each do |_name, pkg| errors.concat(pkg.failures) end report_finish_on_error(errors, on_package_failures: on_package_failures, interrupted_by: interrupted) end
report_finish_on_error(errors, on_package_failures: default_report_on_package_failures, interrupted_by: nil)
click to toggle source
@api private
Handle how Reporting.report
is meant to finish in case of error(s)
@param [Symbol] on_package_failures how does the reporting should behave.
# File lib/autobuild/reporting.rb, line 143 def self.report_finish_on_error(errors, on_package_failures: default_report_on_package_failures, interrupted_by: nil) if (not_package_error = errors.find { |e| !e.respond_to?(:fatal?) }) raise not_package_error end unless %i[raise report_silent exit_silent].include?(on_package_failures) errors.each { |e| error(e) } end fatal = errors.any?(&:fatal?) unless fatal if interrupted_by raise interrupted_by else return errors end end if on_package_failures == :raise raise interrupted_by if interrupted_by e = if errors.size == 1 then errors.first else CompositeException.new(errors) end raise e elsif %i[report_silent report].include?(on_package_failures) if interrupted_by raise interrupted_by else errors end elsif %i[exit exit_silent].include?(on_package_failures) exit 1 else raise ArgumentError, "unexpected value for on_package_failures: "\ "#{on_package_failures}" end end
success()
click to toggle source
Reports a successful build to the user
# File lib/autobuild/reporting.rb, line 184 def self.success each_reporter(&:success) end