From e672ed849484d5ff830ebfe4e3c32b984a6902f2 Mon Sep 17 00:00:00 2001 From: Zeger-Jan van de Weg Date: Tue, 8 Jan 2019 11:54:18 +0100 Subject: [PATCH] Nullify pool_repository when a project leaves Previously the nullification wasn't done, as the only caller would later destroy the model all together. In https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/9070 this change was made. This commit is basically a backport before that MR is merged. --- app/models/pool_repository.rb | 6 +++++- app/models/project.rb | 2 +- spec/models/project_spec.rb | 11 +++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/app/models/pool_repository.rb b/app/models/pool_repository.rb index ad6a008dee8..34220c1b450 100644 --- a/app/models/pool_repository.rb +++ b/app/models/pool_repository.rb @@ -85,7 +85,11 @@ class PoolRepository < ActiveRecord::Base def unlink_repository(repository) object_pool.unlink_repository(repository.raw) - mark_obsolete unless member_projects.where.not(id: repository.project.id).exists? + if member_projects.where.not(id: repository.project.id).exists? + true + else + mark_obsolete + end end def object_pool diff --git a/app/models/project.rb b/app/models/project.rb index cab173503ce..8f78bf86f76 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -2040,7 +2040,7 @@ class Project < ActiveRecord::Base end def leave_pool_repository - pool_repository&.unlink_repository(repository) + pool_repository&.unlink_repository(repository) && update_column(:pool_repository_id, nil) end private diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index d1ab0bdba29..b48a9048a42 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -4387,6 +4387,17 @@ describe Project do end end + describe '#leave_pool_repository' do + let(:pool) { create(:pool_repository) } + let(:project) { create(:project, :repository, pool_repository: pool) } + + it 'removes the membership' do + project.leave_pool_repository + + expect(pool.member_projects.reload).not_to include(project) + end + end + def rugged_config rugged_repo(project.repository).config end