diff options
author | Bob Van Landuyt <bob@vanlanduyt.co> | 2017-09-18 11:50:54 +0200 |
---|---|---|
committer | Bob Van Landuyt <bob@vanlanduyt.co> | 2017-09-18 14:28:34 +0200 |
commit | 4e9fdd4f6dd10b4e394eba6a601016ed55ab3096 (patch) | |
tree | 01534830059a94f38b7b502307140445bab7d23a | |
parent | b0b0a5aa250694bf0076ce9975a23e8ab6426cd0 (diff) | |
download | gitlab-ce-bvl-fork-network.tar.gz |
Make sure we have basic support for MySQLbvl-fork-network
-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 |