Fix LFS uploads not working with git-lfs 2.5.0
git-lfs 2.5.0 now sets the Content-Type header instead of hard-coding it to application/octet-stream: https://github.com/git-lfs/git-lfs/pull/3137 To avoid this issue, we explicitly tell the client to use application/octet-stream. Closes #49752
This commit is contained in:
parent
e9d04585f8
commit
c5645a6739
3 changed files with 14 additions and 4 deletions
|
@ -1,6 +1,8 @@
|
|||
class Projects::LfsApiController < Projects::GitHttpClientController
|
||||
include LfsRequest
|
||||
|
||||
LFS_TRANSFER_CONTENT_TYPE = 'application/octet-stream'.freeze
|
||||
|
||||
skip_before_action :lfs_check_access!, only: [:deprecated]
|
||||
before_action :lfs_check_batch_operation!, only: [:batch]
|
||||
|
||||
|
@ -86,7 +88,10 @@ class Projects::LfsApiController < Projects::GitHttpClientController
|
|||
upload: {
|
||||
href: "#{project.http_url_to_repo}/gitlab-lfs/objects/#{object[:oid]}/#{object[:size]}",
|
||||
header: {
|
||||
Authorization: request.headers['Authorization']
|
||||
Authorization: request.headers['Authorization'],
|
||||
# git-lfs v2.5.0 sets the Content-Type based on the uploaded file. This
|
||||
# ensures that Workhorse can intercept the request.
|
||||
'Content-Type': LFS_TRANSFER_CONTENT_TYPE
|
||||
}.compact
|
||||
}
|
||||
}
|
||||
|
|
5
changelogs/unreleased/sh-lfs-fix-content-type.yml
Normal file
5
changelogs/unreleased/sh-lfs-fix-content-type.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Fix LFS uploads not working with git-lfs 2.5.0
|
||||
merge_request: 20923
|
||||
author:
|
||||
type: fixed
|
|
@ -732,7 +732,7 @@ describe 'Git LFS API and storage' do
|
|||
expect(json_response['objects'].first['oid']).to eq(sample_oid)
|
||||
expect(json_response['objects'].first['size']).to eq(sample_size)
|
||||
expect(json_response['objects'].first['actions']['upload']['href']).to eq("#{Gitlab.config.gitlab.url}/#{project.full_path}.git/gitlab-lfs/objects/#{sample_oid}/#{sample_size}")
|
||||
expect(json_response['objects'].first['actions']['upload']['header']).to eq('Authorization' => authorization)
|
||||
expect(json_response['objects'].first['actions']['upload']['header']).to eq({ 'Authorization' => authorization, 'Content-Type' => 'application/octet-stream' })
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -761,7 +761,7 @@ describe 'Git LFS API and storage' do
|
|||
expect(lfs_object.projects.pluck(:id)).not_to include(project.id)
|
||||
expect(lfs_object.projects.pluck(:id)).to include(other_project.id)
|
||||
expect(json_response['objects'].first['actions']['upload']['href']).to eq("#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}/#{sample_size}")
|
||||
expect(json_response['objects'].first['actions']['upload']['header']).to eq('Authorization' => authorization)
|
||||
expect(json_response['objects'].first['actions']['upload']['header']).to eq({ 'Authorization' => authorization, 'Content-Type' => 'application/octet-stream' })
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -796,7 +796,7 @@ describe 'Git LFS API and storage' do
|
|||
expect(json_response['objects'].first['oid']).to eq("91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897")
|
||||
expect(json_response['objects'].first['size']).to eq(1575078)
|
||||
expect(json_response['objects'].first['actions']['upload']['href']).to eq("#{project.http_url_to_repo}/gitlab-lfs/objects/91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897/1575078")
|
||||
expect(json_response['objects'].first['actions']['upload']['header']).to eq("Authorization" => authorization)
|
||||
expect(json_response['objects'].first['actions']['upload']['header']).to eq({ 'Authorization' => authorization, 'Content-Type' => 'application/octet-stream' })
|
||||
|
||||
expect(json_response['objects'].last['oid']).to eq(sample_oid)
|
||||
expect(json_response['objects'].last['size']).to eq(sample_size)
|
||||
|
|
Loading…
Reference in a new issue