diff options
Diffstat (limited to 'app/services/projects')
-rw-r--r-- | app/services/projects/destroy_service.rb | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/app/services/projects/destroy_service.rb b/app/services/projects/destroy_service.rb index 066d1f1ca72..fd1366d2c4a 100644 --- a/app/services/projects/destroy_service.rb +++ b/app/services/projects/destroy_service.rb @@ -47,7 +47,7 @@ module Projects private - def trash_repositories! + def trash_project_repositories! unless remove_repository(project.repository) raise_error(s_('DeleteProject|Failed to remove project repository. Please try again or contact administrator.')) end @@ -57,6 +57,18 @@ module Projects end end + def trash_relation_repositories! + unless remove_snippets + raise_error(s_('DeleteProject|Failed to remove project snippets. Please try again or contact administrator.')) + end + end + + def remove_snippets + response = Snippets::BulkDestroyService.new(current_user, project.snippets).execute + + response.success? + end + def remove_repository(repository) return true unless repository @@ -95,7 +107,8 @@ module Projects Project.transaction do log_destroy_event - trash_repositories! + trash_relation_repositories! + trash_project_repositories! # Rails attempts to load all related records into memory before # destroying: https://github.com/rails/rails/issues/22510 @@ -103,7 +116,7 @@ module Projects # # Exclude container repositories because its before_destroy would be # called multiple times, and it doesn't destroy any database records. - project.destroy_dependent_associations_in_batches(exclude: [:container_repositories]) + project.destroy_dependent_associations_in_batches(exclude: [:container_repositories, :snippets]) project.destroy! end end |