diff options
author | Rémy Coutable <remy@rymai.me> | 2017-02-20 13:15:38 +0000 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2017-02-20 13:15:38 +0000 |
commit | 10f5f3f18f2317df0be454c90d2f9650d1e2d11a (patch) | |
tree | 8e1f44321f311a951e13313f9c8121ef4013bd9f | |
parent | c89449e6110c2bdf6e1410bae3e7b7d807c5e305 (diff) | |
parent | 45f94ea78cf85a58e71e9a8ae62adc7e3f86bc99 (diff) | |
download | gitlab-ce-10f5f3f18f2317df0be454c90d2f9650d1e2d11a.tar.gz |
Merge branch 'sh-fix-project-team-truncation-in-destroy' into 'master'
Prevent project team from being truncated too early during project destruction
See merge request !9361
-rw-r--r-- | app/services/projects/destroy_service.rb | 3 | ||||
-rw-r--r-- | spec/services/projects/destroy_service_spec.rb | 19 |
2 files changed, 20 insertions, 2 deletions
diff --git a/app/services/projects/destroy_service.rb b/app/services/projects/destroy_service.rb index a08c6fcd94b..9716a1780a9 100644 --- a/app/services/projects/destroy_service.rb +++ b/app/services/projects/destroy_service.rb @@ -17,8 +17,6 @@ module Projects def execute return false unless can?(current_user, :remove_project, project) - project.team.truncate - repo_path = project.path_with_namespace wiki_path = repo_path + '.wiki' @@ -30,6 +28,7 @@ module Projects Projects::UnlinkForkService.new(project, current_user).execute Project.transaction do + project.team.truncate project.destroy! unless remove_registry_tags diff --git a/spec/services/projects/destroy_service_spec.rb b/spec/services/projects/destroy_service_spec.rb index 3faa88c00a1..74bfba44dfd 100644 --- a/spec/services/projects/destroy_service_spec.rb +++ b/spec/services/projects/destroy_service_spec.rb @@ -50,6 +50,25 @@ describe Projects::DestroyService, services: true do it { expect(Dir.exist?(remove_path)).to be_truthy } end + context 'when flushing caches fail' do + before do + new_user = create(:user) + project.team.add_user(new_user, Gitlab::Access::DEVELOPER) + allow_any_instance_of(Projects::DestroyService).to receive(:flush_caches).and_raise(Redis::CannotConnectError) + end + + it 'keeps project team intact upon an error' do + Sidekiq::Testing.inline! do + begin + destroy_project(project, user, {}) + rescue Redis::CannotConnectError + end + end + + expect(project.team.members.count).to eq 1 + end + end + context 'with async_execute' do let(:async) { true } |