summaryrefslogtreecommitdiff
path: root/lib/gitlab/git_access_project.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/git_access_project.rb')
-rw-r--r--lib/gitlab/git_access_project.rb38
1 files changed, 29 insertions, 9 deletions
diff --git a/lib/gitlab/git_access_project.rb b/lib/gitlab/git_access_project.rb
index c79a61c263e..cdefcc84f7d 100644
--- a/lib/gitlab/git_access_project.rb
+++ b/lib/gitlab/git_access_project.rb
@@ -6,21 +6,41 @@ module Gitlab
CreationError = Class.new(StandardError)
+ ERROR_MESSAGES = {
+ namespace_not_found: 'The namespace you were looking for could not be found.'
+ }.freeze
+
+ override :download_ability
+ def download_ability
+ :download_code
+ end
+
+ override :push_ability
+ def push_ability
+ :push_code
+ end
+
private
- override :check_project!
- def check_project!(cmd)
- ensure_project_on_push!(cmd)
+ override :check_container!
+ def check_container!
+ check_namespace!
+ ensure_project_on_push!
super
end
- def ensure_project_on_push!(cmd)
- return if project || deploy_key?
- return unless receive_pack?(cmd) && changes == ANY && authentication_abilities.include?(:push_code)
+ def check_namespace!
+ raise NotFoundError, ERROR_MESSAGES[:namespace_not_found] unless namespace_path.present?
+ end
- namespace = Namespace.find_by_full_path(namespace_path)
+ def namespace
+ @namespace ||= Namespace.find_by_full_path(namespace_path)
+ end
+ def ensure_project_on_push!
+ return if project || deploy_key?
+ return unless receive_pack? && changes == ANY && authentication_abilities.include?(:push_code)
return unless user&.can?(:create_projects, namespace)
project_params = {
@@ -35,8 +55,8 @@ module Gitlab
raise CreationError, "Could not create project: #{project.errors.full_messages.join(', ')}"
end
- @project = project
- user_access.project = @project
+ self.container = project
+ user_access.container = project
Checks::ProjectCreated.new(repository, user, protocol).add_message
end