Merge branch 'gitaly-get-archive' into 'master'

Send extra Gitaly params for `send_git_archive` if needed

See merge request gitlab-org/gitlab-ce!14605
This commit is contained in:
Douwe Maan 2017-10-03 07:40:20 +00:00
commit d14230dd6b
2 changed files with 46 additions and 1 deletions

View file

@ -89,6 +89,13 @@ module Gitlab
params = repository.archive_metadata(ref, Gitlab.config.gitlab.repository_downloads_path, format)
raise "Repository or ref not found" if params.empty?
if Gitlab::GitalyClient.feature_enabled?(:workhorse_archive)
params.merge!(
'GitalyServer' => gitaly_server_hash(repository),
'GitalyRepository' => repository.gitaly_repository.to_h
)
end
[
SEND_DATA_HEADER,
"git-archive:#{encode(params)}"

View file

@ -13,13 +13,51 @@ describe Gitlab::Workhorse do
end
describe ".send_git_archive" do
let(:ref) { 'master' }
let(:format) { 'zip' }
let(:storage_path) { Gitlab.config.gitlab.repository_downloads_path }
let(:base_params) { repository.archive_metadata(ref, storage_path, format) }
let(:gitaly_params) do
base_params.merge(
'GitalyServer' => {
'address' => Gitlab::GitalyClient.address(project.repository_storage),
'token' => Gitlab::GitalyClient.token(project.repository_storage)
},
'GitalyRepository' => repository.gitaly_repository.to_h.deep_stringify_keys
)
end
subject do
described_class.send_git_archive(repository, ref: ref, format: format)
end
context 'when Gitaly workhorse_archive feature is enabled' do
it 'sets the header correctly' do
key, command, params = decode_workhorse_header(subject)
expect(key).to eq('Gitlab-Workhorse-Send-Data')
expect(command).to eq('git-archive')
expect(params).to include(gitaly_params)
end
end
context 'when Gitaly workhorse_archive feature is disabled', skip_gitaly_mock: true do
it 'sets the header correctly' do
key, command, params = decode_workhorse_header(subject)
expect(key).to eq('Gitlab-Workhorse-Send-Data')
expect(command).to eq('git-archive')
expect(params).to eq(base_params)
end
end
context "when the repository doesn't have an archive file path" do
before do
allow(project.repository).to receive(:archive_metadata).and_return(Hash.new)
end
it "raises an error" do
expect { described_class.send_git_archive(project.repository, ref: "master", format: "zip") }.to raise_error(RuntimeError)
expect { subject }.to raise_error(RuntimeError)
end
end
end