Fix API
This commit is contained in:
parent
771f14b96e
commit
34a6f83d3e
|
@ -99,7 +99,7 @@ module API
|
||||||
|
|
||||||
begin
|
begin
|
||||||
RepositoryArchiveCacheWorker.perform_async
|
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
|
rescue
|
||||||
not_found!('File')
|
not_found!('File')
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,9 +3,9 @@ require 'json'
|
||||||
|
|
||||||
module Gitlab
|
module Gitlab
|
||||||
class Workhorse
|
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)
|
def send_git_blob(repository, blob)
|
||||||
params = {
|
params = {
|
||||||
'RepoPath' => repository.path_to_repo,
|
'RepoPath' => repository.path_to_repo,
|
||||||
|
|
|
@ -4,6 +4,7 @@ require 'mime/types'
|
||||||
describe API::API, api: true do
|
describe API::API, api: true do
|
||||||
include ApiHelpers
|
include ApiHelpers
|
||||||
include RepoHelpers
|
include RepoHelpers
|
||||||
|
include WorkhorseHelpers
|
||||||
|
|
||||||
let(:user) { create(:user) }
|
let(:user) { create(:user) }
|
||||||
let(:user2) { create(:user) }
|
let(:user2) { create(:user) }
|
||||||
|
@ -91,21 +92,27 @@ describe API::API, api: true do
|
||||||
get api("/projects/#{project.id}/repository/archive", user)
|
get api("/projects/#{project.id}/repository/archive", user)
|
||||||
repo_name = project.repository.name.gsub("\.git", "")
|
repo_name = project.repository.name.gsub("\.git", "")
|
||||||
expect(response.status).to eq(200)
|
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
|
end
|
||||||
|
|
||||||
it "should get the archive.zip" do
|
it "should get the archive.zip" do
|
||||||
get api("/projects/#{project.id}/repository/archive.zip", user)
|
get api("/projects/#{project.id}/repository/archive.zip", user)
|
||||||
repo_name = project.repository.name.gsub("\.git", "")
|
repo_name = project.repository.name.gsub("\.git", "")
|
||||||
expect(response.status).to eq(200)
|
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
|
end
|
||||||
|
|
||||||
it "should get the archive.tar.bz2" do
|
it "should get the archive.tar.bz2" do
|
||||||
get api("/projects/#{project.id}/repository/archive.tar.bz2", user)
|
get api("/projects/#{project.id}/repository/archive.tar.bz2", user)
|
||||||
repo_name = project.repository.name.gsub("\.git", "")
|
repo_name = project.repository.name.gsub("\.git", "")
|
||||||
expect(response.status).to eq(200)
|
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
|
end
|
||||||
|
|
||||||
it "should return 404 for invalid sha" do
|
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