diff --git a/app/mailers/emails/projects.rb b/app/mailers/emails/projects.rb index 63eb4eb8fd83ff2e6c58ab7a54b98466c7d4b410..a8c14c8c91edda8a9a9c500ef2151dfa3e765086 100644 --- a/app/mailers/emails/projects.rb +++ b/app/mailers/emails/projects.rb @@ -48,6 +48,25 @@ def repository_cleanup_failure_email(project, user, error) mail_with_locale(to: user.notification_email_for(project.group), subject: subject("Project cleanup failure")) end + def repository_rewrite_history_success_email(project, user) + @project = project + + email_with_layout( + to: user.notification_email_for(project.group), + subject: subject("Project history rewrite has completed") + ) + end + + def repository_rewrite_history_failure_email(project, user, error) + @project = project + @error = error + + email_with_layout( + to: user.notification_email_for(project.group), + subject: subject("Project history rewrite failure") + ) + end + def repository_push_email(project_id, opts = {}) @message = Gitlab::Email::Message::RepositoryPush.new(self, project_id, opts) diff --git a/app/mailers/previews/notify_preview.rb b/app/mailers/previews/notify_preview.rb index 73ed87a5c255a208b49f55e08db0f9030614bbe9..091daaff1a73e2d02d88635932b08c8fac6c9af8 100644 --- a/app/mailers/previews/notify_preview.rb +++ b/app/mailers/previews/notify_preview.rb @@ -379,6 +379,14 @@ def import_source_user_rejected Notify.import_source_user_rejected(source_user.id) end + def repository_rewrite_history_success_email + Notify.repository_rewrite_history_success_email(project, user) + end + + def repository_rewrite_history_failure_email + Notify.repository_rewrite_history_failure_email(project, user, 'Error message') + end + private def project diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb index 4d3bf1efedca6f0adde6e5a06e5a2079ad0040f3..0155d009722e9be0977c56e3cd21f3728da78aab 100644 --- a/app/services/notification_service.rb +++ b/app/services/notification_service.rb @@ -700,6 +700,18 @@ def repository_cleanup_failure(project, user, error) mailer.send(:repository_cleanup_failure_email, project, user, error).deliver_later end + def repository_rewrite_history_success(project, user) + return if project.emails_disabled? + + mailer.repository_rewrite_history_success_email(project, user).deliver_later + end + + def repository_rewrite_history_failure(project, user, error) + return if project.emails_disabled? + + mailer.repository_rewrite_history_failure_email(project, user, error).deliver_later + end + def remote_mirror_update_failed(remote_mirror) recipients = project_maintainers_recipients(remote_mirror, action: 'update_failed') diff --git a/app/views/notify/repository_rewrite_history_failure_email.html.haml b/app/views/notify/repository_rewrite_history_failure_email.html.haml new file mode 100644 index 0000000000000000000000000000000000000000..323c0038e39bc76c59c8aabff22f439edbec7c9c --- /dev/null +++ b/app/views/notify/repository_rewrite_history_failure_email.html.haml @@ -0,0 +1,4 @@ +%p + = s_('Notify|Repository history rewrite failed on %{project_url}.') % { project_url: @project.web_url } +%p + = @error diff --git a/app/views/notify/repository_rewrite_history_failure_email.text.erb b/app/views/notify/repository_rewrite_history_failure_email.text.erb new file mode 100644 index 0000000000000000000000000000000000000000..7a35e29a3a9af46b5534a15dc03b329e37c24268 --- /dev/null +++ b/app/views/notify/repository_rewrite_history_failure_email.text.erb @@ -0,0 +1,3 @@ +Repository history rewrite failed on <%= @project.web_url %> + +<%= @error %> diff --git a/app/views/notify/repository_rewrite_history_success_email.html.haml b/app/views/notify/repository_rewrite_history_success_email.html.haml new file mode 100644 index 0000000000000000000000000000000000000000..c982f5ff1995759cd2424af15f298a812c9ae708 --- /dev/null +++ b/app/views/notify/repository_rewrite_history_success_email.html.haml @@ -0,0 +1,4 @@ +%p + = s_('Notify|Repository history rewrite succeeded on %{project_url}.') % { project_url: @project.web_url } +%p + = s_('Notify|Repository size is now %{repository_size} MiB.') % { repository_size: "%.1f" % (@project.repository.size || 0) } diff --git a/app/views/notify/repository_rewrite_history_success_email.text.erb b/app/views/notify/repository_rewrite_history_success_email.text.erb new file mode 100644 index 0000000000000000000000000000000000000000..2ee613b5cc47dae13f26d6dfdda5414f566c36ac --- /dev/null +++ b/app/views/notify/repository_rewrite_history_success_email.text.erb @@ -0,0 +1,3 @@ +Repository history rewrite succeeded on <%= @project.web_url %> + +Repository size is now <%= "%.1f" % (@project.repository.size || 0) %> MiB diff --git a/locale/gitlab.pot b/locale/gitlab.pot index d7aecf8d85f0fc4b127c232deddccaec66b84a4a..5fc129c2f899ed335bc2e79c94f3fdddb00f1764 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -36905,6 +36905,15 @@ msgstr "" msgid "Notify|Remote mirror" msgstr "" +msgid "Notify|Repository history rewrite failed on %{project_url}." +msgstr "" + +msgid "Notify|Repository history rewrite succeeded on %{project_url}." +msgstr "" + +msgid "Notify|Repository size is now %{repository_size} MiB." +msgstr "" + msgid "Notify|Review changes" msgstr "" diff --git a/spec/mailers/emails/projects_spec.rb b/spec/mailers/emails/projects_spec.rb index 94ef98dafe2b21f74b69c2d12792ca11b6e7459e..8062a4914041653c0570ccce481416c324ebed43 100644 --- a/spec/mailers/emails/projects_spec.rb +++ b/spec/mailers/emails/projects_spec.rb @@ -140,6 +140,46 @@ end end + describe '#repository_rewrite_history_success_email' do + let(:recipient) { user } + + subject { Notify.repository_rewrite_history_success_email(project, user) } + + it_behaves_like 'an email sent to a user' + it_behaves_like 'an email sent from GitLab' + it_behaves_like 'it should not have Gmail Actions links' + it_behaves_like 'a user cannot unsubscribe through footer link' + it_behaves_like 'appearance header and footer enabled' + it_behaves_like 'appearance header and footer not enabled' + + it 'has the correct subject and body' do + is_expected.to have_subject("#{project.name} | Project history rewrite has completed") + is_expected.to have_body_text(project.full_path) + is_expected.to have_body_text("Repository history rewrite succeeded on") + end + end + + describe '#repository_rewrite_history_failure_email' do + let(:recipient) { user } + let(:error) { 'Some error' } + + subject { Notify.repository_rewrite_history_failure_email(project, user, error) } + + it_behaves_like 'an email sent to a user' + it_behaves_like 'an email sent from GitLab' + it_behaves_like 'it should not have Gmail Actions links' + it_behaves_like 'a user cannot unsubscribe through footer link' + it_behaves_like 'appearance header and footer enabled' + it_behaves_like 'appearance header and footer not enabled' + + it 'has the correct subject and body' do + is_expected.to have_subject("#{project.name} | Project history rewrite failure") + is_expected.to have_body_text(project.full_path) + is_expected.to have_body_text("Repository history rewrite failed on") + is_expected.to have_body_text(error) + end + end + describe '.inactive_project_deletion_warning_email' do let(:recipient) { user } let(:deletion_date) { "2022-01-10" } diff --git a/spec/services/notification_service_spec.rb b/spec/services/notification_service_spec.rb index e1a77582aba65c3be57d97b772a78cef46d83200..1b47c73e9d3da54ff250afec00260fdfcfdede33 100644 --- a/spec/services/notification_service_spec.rb +++ b/spec/services/notification_service_spec.rb @@ -4105,6 +4105,36 @@ def create_pipeline(user, status) end end + describe 'Repository rewrite history', :deliver_mails_inline do + let(:user) { create(:user) } + + describe '#repository_rewrite_history_success' do + it 'emails the specified user only' do + notification.repository_rewrite_history_success(project, user) + + should_email(user) + end + + it_behaves_like 'project emails are disabled' do + let(:notification_target) { project } + let(:notification_trigger) { notification.repository_rewrite_history_success(project, user) } + end + end + + describe '#repository_rewrite_history_failure' do + it 'emails the specified user only' do + notification.repository_rewrite_history_failure(project, user, 'Some error') + + should_email(user) + end + + it_behaves_like 'project emails are disabled' do + let(:notification_target) { project } + let(:notification_trigger) { notification.repository_rewrite_history_failure(project, user, 'Some error') } + end + end + end + describe 'Repository cleanup', :deliver_mails_inline do let(:user) { create(:user) }