60 lines
1.4 KiB
Ruby
60 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module Ci
|
|
module Reports
|
|
class CodequalityReportsComparer < ReportsComparer
|
|
def initialize(base_report, head_report)
|
|
@base_report = base_report
|
|
@head_report = head_report
|
|
|
|
unless not_found?
|
|
@base_report.sort_degradations!
|
|
@head_report.sort_degradations!
|
|
end
|
|
end
|
|
|
|
def success?
|
|
head_report.degradations_count == 0
|
|
end
|
|
|
|
def existing_errors
|
|
strong_memoize(:existing_errors) do
|
|
next [] if not_found?
|
|
|
|
base_report.all_degradations & head_report.all_degradations
|
|
end
|
|
end
|
|
|
|
def new_errors
|
|
strong_memoize(:new_errors) do
|
|
next [] if not_found?
|
|
|
|
fingerprints = head_report.degradations.keys - base_report.degradations.keys
|
|
head_report.degradations.fetch_values(*fingerprints)
|
|
end
|
|
end
|
|
|
|
def resolved_errors
|
|
strong_memoize(:resolved_errors) do
|
|
next [] if not_found?
|
|
|
|
fingerprints = base_report.degradations.keys - head_report.degradations.keys
|
|
base_report.degradations.fetch_values(*fingerprints)
|
|
end
|
|
end
|
|
|
|
def resolved_count
|
|
resolved_errors.size
|
|
end
|
|
|
|
def total_count
|
|
head_report.degradations_count
|
|
end
|
|
|
|
alias_method :errors_count, :total_count
|
|
end
|
|
end
|
|
end
|
|
end
|