Skip to content

Commit

Permalink
Fixes #35503 - Notify user only when new errata are added to repo
Browse files Browse the repository at this point in the history
Co-authored-by: William Bradford Clark <wclark@redhat.com>
Co-authored-by: Pavel Moravec <pmoravec@redhat.com>
  • Loading branch information
3 people committed Oct 27, 2022
1 parent ee84716 commit 7646f59
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 9 deletions.
15 changes: 9 additions & 6 deletions app/lib/actions/katello/repository/errata_mail.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,21 @@ module Actions
module Katello
module Repository
class ErrataMail < Actions::EntryAction
middleware.use Actions::Middleware::ExecuteIfContentsChanged

def plan(repo, contents_changed = nil)
last_updated = repo.repository_errata.order('updated_at ASC').last.try(:updated_at) || Time.now
plan_self(:repo => repo.id, :contents_changed => contents_changed, :last_updated => last_updated.to_s)
def plan(repo)
plan_self(:repo => repo.id, :associated_errata_before_syncing => repo.repository_errata.pluck(:erratum_id).uniq.sort.reverse, :new_associated_errata => [])
end

def run
::User.current = ::User.anonymous_admin
repo = ::Katello::Repository.find(input[:repo])
input[:new_associated_errata] = repo.repository_errata.pluck(:erratum_id).uniq.sort.reverse - input[:associated_errata_before_syncing]

users = ::User.select { |user| user.receives?(:sync_errata) && user.organization_ids.include?(repo.organization.id) && user.can?(:view_products, repo.product) }.compact
errata = ::Katello::Erratum.where(:id => repo.repository_errata.where('katello_repository_errata.updated_at > ?', input['last_updated'].to_datetime).pluck(:erratum_id))
errata = ::Katello::Erratum.where(:id => input[:new_associated_errata])

[:associated_errata_before_syncing, :new_associated_errata].each do |key|
input[key] = "Trimmed list... (#{input[key].length} #{key.to_s.gsub('_', ' ')})" if input[key].length > 3
end

begin
MailNotification[:sync_errata].deliver(:users => users, :repo => repo, :errata => errata) unless (users.blank? || errata.blank?)
Expand Down
2 changes: 1 addition & 1 deletion app/lib/actions/katello/repository/sync.rb
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ def plan(repo, options = {})
plan_action(Katello::Repository::FetchPxeFiles, :id => repo.id)
plan_action(Katello::Repository::CorrectChecksum, repo)
concurrence do
plan_action(Katello::Repository::ErrataMail, repo, output[:contents_changed])
plan_action(Katello::Repository::ErrataMail, repo)
plan_action(Actions::Katello::Applicability::Repository::Regenerate, :repo_ids => [repo.id]) if generate_applicability
end
plan_self(:id => repo.id, :sync_result => output, :skip_metadata_check => skip_metadata_check, :validate_contents => validate_contents,
Expand Down
4 changes: 2 additions & 2 deletions test/actions/katello/repository_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -794,10 +794,10 @@ class ErrataMailerTest < TestBase
it 'plans' do
action = create_action action_class
planned_action = plan_action action, repository, true
last_updated = repository.repository_errata.order("updated_at desc").first.updated_at.to_s
old_errata_ids = repository.errata.map(&:id).uniq.sort.reverse
new_errata = ::Katello::Erratum.where.not(:id => repository.repository_errata.pluck(:erratum_id)).first
repository.errata << new_errata
assert_equal planned_action.execution_plan.planned_run_steps.first.input, "repo" => repository.id, "contents_changed" => true, "last_updated" => last_updated
assert_equal planned_action.execution_plan.planned_run_steps.first.input, "repo" => repository.id, "associated_errata_before_syncing" => old_errata_ids, "new_associated_errata" => []
end
end

Expand Down

0 comments on commit 7646f59

Please sign in to comment.