summaryrefslogtreecommitdiff
path: root/app/services/projects/destroy_service.rb
diff options
context:
space:
mode:
authorFilipa Lacerda <filipa@gitlab.com>2018-05-04 14:58:47 +0100
committerFilipa Lacerda <filipa@gitlab.com>2018-05-04 14:58:47 +0100
commit1983356d647290fe38ca21bbbca43fe2d6292913 (patch)
treed07fba5693e239993dfc6d1f724b2103f90a3fa6 /app/services/projects/destroy_service.rb
parent703f45632292e7fc45359d0144cd616725bf9b0d (diff)
parent4bf47cd76fd69a26b7b2b4ac029f088ec5493712 (diff)
downloadgitlab-ce-1983356d647290fe38ca21bbbca43fe2d6292913.tar.gz
Merge branch 'master' into 44427-state-management-with-vuext
* master: (1063 commits) Replace commits spinach tests with RSpec analog Update repository.rb Add note about rebase/squash duplication in Gitaly Resolve "Reconcile project templates with Auto DevOps" Move import project pane to a separate partial Inform the user when there are no project import options available Clarify location of Vue templates Make add_index_to_namespaces_runners_token migration reversible Fix lambda arguments in Grape entities Update grape-entity 0.6.0 -> 0.7.1 Fix constants in backfill_runner_type_for_ci_runners_post_migrate.rb Use limited_counter_with_delimiter in the admin user list tabs Remove a warning from spec/features/admin/admin_users_spec.rb Use smallint for runner_type since its an enum Dont remove duplicates in Runner.owned_or_shared since its not necessary Change the docs license to CC BY-SA Remove unnecessary disable transaction in add_ci_runner_namespaces Split migration to add and index namespaces.runners_token Output some useful information when running the rails console Revert "Use factory in specs for ProjectCiCdSettings" ...
Diffstat (limited to 'app/services/projects/destroy_service.rb')
-rw-r--r--app/services/projects/destroy_service.rb32
1 files changed, 26 insertions, 6 deletions
diff --git a/app/services/projects/destroy_service.rb b/app/services/projects/destroy_service.rb
index 4b8f955ae69..71c93660b4b 100644
--- a/app/services/projects/destroy_service.rb
+++ b/app/services/projects/destroy_service.rb
@@ -34,6 +34,8 @@ module Projects
system_hook_service.execute_hooks_for(project, :destroy)
log_info("Project \"#{project.full_path}\" was removed")
+ current_user.invalidate_personal_projects_count
+
true
rescue => error
attempt_rollback(project, error.message)
@@ -44,6 +46,20 @@ module Projects
raise
end
+ def attempt_repositories_rollback
+ return unless @project
+
+ flush_caches(@project)
+
+ unless mv_repository(removal_path(repo_path), repo_path)
+ raise_error('Failed to restore project repository. Please contact the administrator.')
+ end
+
+ unless mv_repository(removal_path(wiki_path), wiki_path)
+ raise_error('Failed to restore wiki repository. Please contact the administrator.')
+ end
+ end
+
private
def repo_path
@@ -68,23 +84,27 @@ module Projects
# Skip repository removal. We use this flag when remove user or group
return true if params[:skip_repo] == true
- # There is a possibility project does not have repository or wiki
- return true unless gitlab_shell.exists?(project.repository_storage_path, path + '.git')
-
new_path = removal_path(path)
- if gitlab_shell.mv_repository(project.repository_storage_path, path, new_path)
+ if mv_repository(path, new_path)
log_info("Repository \"#{path}\" moved to \"#{new_path}\"")
project.run_after_commit do
# self is now project
- GitlabShellWorker.perform_in(5.minutes, :remove_repository, self.repository_storage_path, new_path)
+ GitlabShellWorker.perform_in(5.minutes, :remove_repository, self.repository_storage, new_path)
end
else
false
end
end
+ def mv_repository(from_path, to_path)
+ # There is a possibility project does not have repository or wiki
+ return true unless gitlab_shell.exists?(project.repository_storage, from_path + '.git')
+
+ gitlab_shell.mv_repository(project.repository_storage, from_path, to_path)
+ end
+
def attempt_rollback(project, message)
return unless project
@@ -117,7 +137,7 @@ module Projects
return true unless Gitlab.config.registry.enabled
ContainerRepository.build_root_repository(project).tap do |repository|
- return repository.has_tags? ? repository.delete_tags! : true
+ break repository.has_tags? ? repository.delete_tags! : true
end
end