diff options
Diffstat (limited to 'app/controllers/repositories')
-rw-r--r-- | app/controllers/repositories/git_http_client_controller.rb | 8 | ||||
-rw-r--r-- | app/controllers/repositories/lfs_api_controller.rb | 5 | ||||
-rw-r--r-- | app/controllers/repositories/lfs_storage_controller.rb | 20 |
3 files changed, 27 insertions, 6 deletions
diff --git a/app/controllers/repositories/git_http_client_controller.rb b/app/controllers/repositories/git_http_client_controller.rb index de452aa69b7..ec854bd0dde 100644 --- a/app/controllers/repositories/git_http_client_controller.rb +++ b/app/controllers/repositories/git_http_client_controller.rb @@ -6,7 +6,7 @@ module Repositories include KerberosSpnegoHelper include Gitlab::Utils::StrongMemoize - attr_reader :authentication_result, :redirected_path, :container + attr_reader :authentication_result, :redirected_path delegate :actor, :authentication_abilities, to: :authentication_result, allow_nil: true delegate :type, to: :authentication_result, allow_nil: true, prefix: :auth_result @@ -75,6 +75,12 @@ module Repositories headers['Www-Authenticate'] = challenges.join("\n") if challenges.any? end + def container + parse_repo_path unless defined?(@container) + + @container + end + def project parse_repo_path unless defined?(@project) diff --git a/app/controllers/repositories/lfs_api_controller.rb b/app/controllers/repositories/lfs_api_controller.rb index 35751a2578f..96185608c09 100644 --- a/app/controllers/repositories/lfs_api_controller.rb +++ b/app/controllers/repositories/lfs_api_controller.rb @@ -17,9 +17,9 @@ module Repositories end if download_request? - render json: { objects: download_objects! } + render json: { objects: download_objects! }, content_type: LfsRequest::CONTENT_TYPE elsif upload_request? - render json: { objects: upload_objects! } + render json: { objects: upload_objects! }, content_type: LfsRequest::CONTENT_TYPE else raise "Never reached" end @@ -31,6 +31,7 @@ module Repositories message: _('Server supports batch API only, please update your Git LFS client to version 1.0.1 and up.'), documentation_url: "#{Gitlab.config.gitlab.url}/help" }, + content_type: LfsRequest::CONTENT_TYPE, status: :not_implemented ) end diff --git a/app/controllers/repositories/lfs_storage_controller.rb b/app/controllers/repositories/lfs_storage_controller.rb index 0436b740979..48784842d48 100644 --- a/app/controllers/repositories/lfs_storage_controller.rb +++ b/app/controllers/repositories/lfs_storage_controller.rb @@ -29,7 +29,7 @@ module Repositories def upload_finalize if store_file!(oid, size) - head 200 + head 200, content_type: LfsRequest::CONTENT_TYPE else render plain: 'Unprocessable entity', status: :unprocessable_entity end @@ -59,10 +59,17 @@ module Repositories params[:size].to_i end + def uploaded_file + params[:file] + end + # rubocop: disable CodeReuse/ActiveRecord def store_file!(oid, size) object = LfsObject.find_by(oid: oid, size: size) - unless object&.file&.exists? + + if object + replace_file!(object) unless object.file&.exists? + else object = create_file!(oid, size) end @@ -73,12 +80,19 @@ module Repositories # rubocop: enable CodeReuse/ActiveRecord def create_file!(oid, size) - uploaded_file = params[:file] return unless uploaded_file.is_a?(UploadedFile) LfsObject.create!(oid: oid, size: size, file: uploaded_file) end + def replace_file!(lfs_object) + raise UploadedFile::InvalidPathError unless uploaded_file.is_a?(UploadedFile) + + Gitlab::AppJsonLogger.info(message: "LFS file replaced because it did not exist", oid: oid, size: size) + lfs_object.file = uploaded_file + lfs_object.save! + end + def link_to_project!(object) return unless object |