Ensure archive download is only one directory deep
This commit is contained in:
		
							parent
							
								
									7733f285ac
								
							
						
					
					
						commit
						3ac54d22b9
					
				|  | @ -0,0 +1,4 @@ | |||
| --- | ||||
| title: Ensure archive download is only one directory deep | ||||
| merge_request: 9616 | ||||
| author: | ||||
|  | @ -199,13 +199,17 @@ module Gitlab | |||
|         nil | ||||
|       end | ||||
| 
 | ||||
|       def archive_prefix(ref, sha) | ||||
|         project_name = self.name.chomp('.git') | ||||
|         "#{project_name}-#{ref.parameterize}-#{sha}" | ||||
|       end | ||||
| 
 | ||||
|       def archive_metadata(ref, storage_path, format = "tar.gz") | ||||
|         ref ||= root_ref | ||||
|         commit = Gitlab::Git::Commit.find(self, ref) | ||||
|         return {} if commit.nil? | ||||
| 
 | ||||
|         project_name = self.name.chomp('.git') | ||||
|         prefix = "#{project_name}-#{ref}-#{commit.id}" | ||||
|         prefix = archive_prefix(ref, commit.id) | ||||
| 
 | ||||
|         { | ||||
|           'RepoPath' => path, | ||||
|  |  | |||
|  | @ -47,7 +47,7 @@ describe Gitlab::Git::Repository, seed_helper: true do | |||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe :branch_names do | ||||
|   describe '#branch_names' do | ||||
|     subject { repository.branch_names } | ||||
| 
 | ||||
|     it 'has SeedRepo::Repo::BRANCHES.size elements' do | ||||
|  | @ -57,7 +57,7 @@ describe Gitlab::Git::Repository, seed_helper: true do | |||
|     it { is_expected.not_to include("branch-from-space") } | ||||
|   end | ||||
| 
 | ||||
|   describe :tag_names do | ||||
|   describe '#tag_names' do | ||||
|     subject { repository.tag_names } | ||||
| 
 | ||||
|     it { is_expected.to be_kind_of Array } | ||||
|  | @ -78,49 +78,63 @@ describe Gitlab::Git::Repository, seed_helper: true do | |||
|     it { expect(metadata['ArchivePath']).to end_with extenstion } | ||||
|   end | ||||
| 
 | ||||
|   describe :archive do | ||||
|   describe '#archive_prefix' do | ||||
|     let(:project_name) { 'project-name'} | ||||
| 
 | ||||
|     before do | ||||
|       expect(repository).to receive(:name).once.and_return(project_name) | ||||
|     end | ||||
| 
 | ||||
|     it 'returns parameterised string for a ref containing slashes' do | ||||
|       prefix = repository.archive_prefix('test/branch', 'SHA') | ||||
| 
 | ||||
|       expect(prefix).to eq("#{project_name}-test-branch-SHA") | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe '#archive' do | ||||
|     let(:metadata) { repository.archive_metadata('master', '/tmp') } | ||||
| 
 | ||||
|     it_should_behave_like 'archive check', '.tar.gz' | ||||
|   end | ||||
| 
 | ||||
|   describe :archive_zip do | ||||
|   describe '#archive_zip' do | ||||
|     let(:metadata) { repository.archive_metadata('master', '/tmp', 'zip') } | ||||
| 
 | ||||
|     it_should_behave_like 'archive check', '.zip' | ||||
|   end | ||||
| 
 | ||||
|   describe :archive_bz2 do | ||||
|   describe '#archive_bz2' do | ||||
|     let(:metadata) { repository.archive_metadata('master', '/tmp', 'tbz2') } | ||||
| 
 | ||||
|     it_should_behave_like 'archive check', '.tar.bz2' | ||||
|   end | ||||
| 
 | ||||
|   describe :archive_fallback do | ||||
|   describe '#archive_fallback' do | ||||
|     let(:metadata) { repository.archive_metadata('master', '/tmp', 'madeup') } | ||||
| 
 | ||||
|     it_should_behave_like 'archive check', '.tar.gz' | ||||
|   end | ||||
| 
 | ||||
|   describe :size do | ||||
|   describe '#size' do | ||||
|     subject { repository.size } | ||||
| 
 | ||||
|     it { is_expected.to be < 2 } | ||||
|   end | ||||
| 
 | ||||
|   describe :has_commits? do | ||||
|   describe '#has_commits?' do | ||||
|     it { expect(repository.has_commits?).to be_truthy } | ||||
|   end | ||||
| 
 | ||||
|   describe :empty? do | ||||
|   describe '#empty?' do | ||||
|     it { expect(repository.empty?).to be_falsey } | ||||
|   end | ||||
| 
 | ||||
|   describe :bare? do | ||||
|   describe '#bare?' do | ||||
|     it { expect(repository.bare?).to be_truthy } | ||||
|   end | ||||
| 
 | ||||
|   describe :heads do | ||||
|   describe '#heads' do | ||||
|     let(:heads) { repository.heads } | ||||
|     subject { heads } | ||||
| 
 | ||||
|  | @ -147,7 +161,7 @@ describe Gitlab::Git::Repository, seed_helper: true do | |||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe :ref_names do | ||||
|   describe '#ref_names' do | ||||
|     let(:ref_names) { repository.ref_names } | ||||
|     subject { ref_names } | ||||
| 
 | ||||
|  | @ -164,7 +178,7 @@ describe Gitlab::Git::Repository, seed_helper: true do | |||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe :search_files do | ||||
|   describe '#search_files' do | ||||
|     let(:results) { repository.search_files('rails', 'master') } | ||||
|     subject { results } | ||||
| 
 | ||||
|  | @ -200,7 +214,7 @@ describe Gitlab::Git::Repository, seed_helper: true do | |||
|     end | ||||
|   end | ||||
| 
 | ||||
|   context :submodules do | ||||
|   context '#submodules' do | ||||
|     let(:repository) { Gitlab::Git::Repository.new(TEST_REPO_PATH) } | ||||
| 
 | ||||
|     context 'where repo has submodules' do | ||||
|  | @ -264,7 +278,7 @@ describe Gitlab::Git::Repository, seed_helper: true do | |||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe :commit_count do | ||||
|   describe '#commit_count' do | ||||
|     it { expect(repository.commit_count("master")).to eq(25) } | ||||
|     it { expect(repository.commit_count("feature")).to eq(9) } | ||||
|   end | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue