Fix API
This commit is contained in:
parent
771f14b96e
commit
34a6f83d3e
|
@ -99,7 +99,7 @@ module API
|
|||
|
||||
begin
|
||||
RepositoryArchiveCacheWorker.perform_async
|
||||
header *Gitlab::Workhorse.send_git_archive(@project, params[:ref], params[:format])
|
||||
header *Gitlab::Workhorse.send_git_archive(user_project, params[:sha], params[:format])
|
||||
rescue
|
||||
not_found!('File')
|
||||
end
|
||||
|
|
|
@ -3,9 +3,9 @@ require 'json'
|
|||
|
||||
module Gitlab
|
||||
class Workhorse
|
||||
class << self
|
||||
SEND_DATA_HEADER = 'Gitlab-Workhorse-Send-Data'
|
||||
SEND_DATA_HEADER = 'Gitlab-Workhorse-Send-Data'
|
||||
|
||||
class << self
|
||||
def send_git_blob(repository, blob)
|
||||
params = {
|
||||
'RepoPath' => repository.path_to_repo,
|
||||
|
|
|
@ -4,6 +4,7 @@ require 'mime/types'
|
|||
describe API::API, api: true do
|
||||
include ApiHelpers
|
||||
include RepoHelpers
|
||||
include WorkhorseHelpers
|
||||
|
||||
let(:user) { create(:user) }
|
||||
let(:user2) { create(:user) }
|
||||
|
@ -91,21 +92,27 @@ describe API::API, api: true do
|
|||
get api("/projects/#{project.id}/repository/archive", user)
|
||||
repo_name = project.repository.name.gsub("\.git", "")
|
||||
expect(response.status).to eq(200)
|
||||
expect(json_response['ArchivePath']).to match(/#{repo_name}\-[^\.]+\.tar.gz/)
|
||||
type, params = workhorse_send_data
|
||||
expect(type).to eq('git-archive')
|
||||
expect(params['ArchivePath']).to match(/#{repo_name}\-[^\.]+\.tar.gz/)
|
||||
end
|
||||
|
||||
it "should get the archive.zip" do
|
||||
get api("/projects/#{project.id}/repository/archive.zip", user)
|
||||
repo_name = project.repository.name.gsub("\.git", "")
|
||||
expect(response.status).to eq(200)
|
||||
expect(json_response['ArchivePath']).to match(/#{repo_name}\-[^\.]+\.zip/)
|
||||
type, params = workhorse_send_data
|
||||
expect(type).to eq('git-archive')
|
||||
expect(params['ArchivePath']).to match(/#{repo_name}\-[^\.]+\.zip/)
|
||||
end
|
||||
|
||||
it "should get the archive.tar.bz2" do
|
||||
get api("/projects/#{project.id}/repository/archive.tar.bz2", user)
|
||||
repo_name = project.repository.name.gsub("\.git", "")
|
||||
expect(response.status).to eq(200)
|
||||
expect(json_response['ArchivePath']).to match(/#{repo_name}\-[^\.]+\.tar.bz2/)
|
||||
type, params = workhorse_send_data
|
||||
expect(type).to eq('git-archive')
|
||||
expect(params['ArchivePath']).to match(/#{repo_name}\-[^\.]+\.tar.bz2/)
|
||||
end
|
||||
|
||||
it "should return 404 for invalid sha" do
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
module WorkhorseHelpers
|
||||
extend self
|
||||
|
||||
def workhorse_send_data
|
||||
@_workhorse_send_data ||= begin
|
||||
header = response.headers[Gitlab::Workhorse::SEND_DATA_HEADER]
|
||||
split_header = header.split(':')
|
||||
type = split_header.shift
|
||||
header = split_header.join(':')
|
||||
[
|
||||
type,
|
||||
JSON.parse(Base64.urlsafe_decode64(header)),
|
||||
]
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue