diff options
-rw-r--r-- | app/models/project.rb | 16 | ||||
-rw-r--r-- | spec/models/project_spec.rb | 6 |
2 files changed, 13 insertions, 9 deletions
diff --git a/app/models/project.rb b/app/models/project.rb index ea6c1b87d6d..abcaa2cb182 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1116,12 +1116,16 @@ class Project < ActiveRecord::Base forked_project_links end - hierarchy = Gitlab::Database::Hierarchy.new(related_links, - source_column: :forked_to_project_id, - descendant_column: :forked_from_project_id, - recursion: 2) - all_forked_project_links = hierarchy.all - @fork_network = self.class.where(id: all_forked_project_links.select(:forked_to_project_id)) + if Gitlab::Database.postgresql? + hierarchy = Gitlab::Database::Hierarchy + .new(related_links, + source_column: :forked_to_project_id, + descendant_column: :forked_from_project_id, + recursion: 3) + related_links = hierarchy.all + end + + @fork_network = self.class.where(id: related_links.select(:forked_to_project_id)) .where.not(id: self) end diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 322196d0dc6..399f72ef071 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -1818,11 +1818,11 @@ describe Project do let(:project) { create(:project) } let!(:fork) { create(:forked_project_link, forked_from_project: project).forked_to_project } - it 'includes a fork of th eproject' do + it 'includes a fork of the project' do expect(project.fork_network).to include(fork) end - it 'includes a fork of a fork' do + it 'includes a fork of a fork', :postgresql do other_fork = create(:forked_project_link, forked_from_project: fork).forked_to_project expect(project.fork_network).to include(other_fork) @@ -1851,7 +1851,7 @@ describe Project do expect(fork.in_fork_network_of?(project)).to be_truthy end - it 'is true for a fork of a fork' do + it 'is true for a fork of a fork', :postgresql do other_fork = create(:forked_project_link, forked_from_project: fork).forked_to_project expect(other_fork.in_fork_network_of?(project)).to be_truthy |