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 196
def self.<<(reporter)
    @reporters << reporter
end
clear_reporters() click to toggle source
# File lib/autobuild/reporting.rb, line 204
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 213
def self.each_log(&block)
    Autobuild.logfiles.each(&block)
end
each_reporter(&iter) click to toggle source
# File lib/autobuild/reporting.rb, line 208
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 191
def self.error(error)
    each_reporter { |rep| rep.error(error) }
end
remove(reporter) click to toggle source
# File lib/autobuild/reporting.rb, line 200
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 144
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 186
def self.success
    each_reporter(&:success)
end