From f90b27da7777b0c72782d2a930f770e2f27757e2 Mon Sep 17 00:00:00 2001 From: Bob Van Landuyt Date: Tue, 3 Oct 2017 17:06:09 +0200 Subject: Find forks within users/namespaces using fork memberships --- app/models/fork_network.rb | 4 ++++ app/models/namespace.rb | 4 +++- app/models/project.rb | 5 +++++ app/models/user.rb | 10 +--------- 4 files changed, 13 insertions(+), 10 deletions(-) (limited to 'app') diff --git a/app/models/fork_network.rb b/app/models/fork_network.rb index fd2510d0a4c..218e37a5312 100644 --- a/app/models/fork_network.rb +++ b/app/models/fork_network.rb @@ -8,4 +8,8 @@ class ForkNetwork < ActiveRecord::Base def add_root_as_member projects << root_project end + + def find_forks_in(other_projects) + projects.where(id: other_projects) + end end diff --git a/app/models/namespace.rb b/app/models/namespace.rb index e279d8dd8c5..4672881e220 100644 --- a/app/models/namespace.rb +++ b/app/models/namespace.rb @@ -139,7 +139,9 @@ class Namespace < ActiveRecord::Base end def find_fork_of(project) - projects.joins(:forked_project_link).find_by('forked_project_links.forked_from_project_id = ?', project.id) + return nil unless project.fork_network + + project.fork_network.find_forks_in(projects).first end def lfs_enabled? diff --git a/app/models/project.rb b/app/models/project.rb index 4a883552a8d..ad1c339ae78 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1009,6 +1009,11 @@ class Project < ActiveRecord::Base end def forked? + return true if fork_network && fork_network.root_project != self + + # TODO: Use only the above conditional using the `fork_network` + # This is the old conditional that looks at the `forked_project_link`, we + # fall back to this while we're migrating the new models !(forked_project_link.nil? || forked_project_link.forked_from_project.nil?) end diff --git a/app/models/user.rb b/app/models/user.rb index 959738ba608..c3f115ca074 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -697,15 +697,7 @@ class User < ActiveRecord::Base end def fork_of(project) - links = ForkedProjectLink.where( - forked_from_project_id: project, - forked_to_project_id: personal_projects.unscope(:order) - ) - if links.any? - links.first.forked_to_project - else - nil - end + namespace.find_fork_of(project) end def ldap_user? -- cgit v1.2.3