summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Van Landuyt <bob@vanlanduyt.co>2017-09-18 11:50:54 +0200
committerBob Van Landuyt <bob@vanlanduyt.co>2017-09-18 14:28:34 +0200
commit4e9fdd4f6dd10b4e394eba6a601016ed55ab3096 (patch)
tree01534830059a94f38b7b502307140445bab7d23a
parentb0b0a5aa250694bf0076ce9975a23e8ab6426cd0 (diff)
downloadgitlab-ce-bvl-fork-network.tar.gz
Make sure we have basic support for MySQLbvl-fork-network
-rw-r--r--app/models/project.rb16
-rw-r--r--spec/models/project_spec.rb6
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