Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/models/project.rb10
-rw-r--r--app/services/projects/create_service.rb5
2 files changed, 12 insertions, 3 deletions
diff --git a/app/models/project.rb b/app/models/project.rb
index 7c10ab35431..3352959a53d 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -969,8 +969,9 @@ class Project < ActiveRecord::Base
end
def visibility_level_allowed?(level = self.visibility_level)
- allowed_by_forks = if forked?
- Gitlab::VisibilityLevel.allowed_fork_levels(forked_from_project.visibility_level).include?(level)
+ allowed_by_forks = if forked? && forked_project_link.forked_from_project_id.present?
+ from_project = eager_load_forked_from_project
+ Gitlab::VisibilityLevel.allowed_fork_levels(from_project.visibility_level).include?(level)
else
true
end
@@ -980,6 +981,11 @@ class Project < ActiveRecord::Base
allowed_by_forks && allowed_by_groups
end
+ #Necessary to retrieve many-to-many associations on new forks before validating visibility level
+ def eager_load_forked_from_project
+ Project.find(forked_project_link.forked_from_project_id)
+ end
+
def runners_token
ensure_runners_token!
end
diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb
index cebfc432002..c4b8420f9f2 100644
--- a/app/services/projects/create_service.rb
+++ b/app/services/projects/create_service.rb
@@ -10,7 +10,10 @@ module Projects
@project = Project.new(params)
# Make sure that the user is allowed to use the specified visibility level
- return @project unless visibility_level_allowed?
+ unless visibility_level_allowed?
+ deny_visibility_level(@project)
+ return @project
+ end
# Set project name from path
if @project.name.present? && @project.path.present?