mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-13 14:46:05 +10:00
Merge branch 'ci/recursive-artifacts-entries' into 'master'
Add method to calculate total size of artifacts in subpath See merge request !2500
This commit is contained in:
@@ -346,17 +346,17 @@ module Ci
|
||||
end
|
||||
|
||||
def artifacts_browse_url
|
||||
if artifacts_browser_supported?
|
||||
if artifacts_metadata?
|
||||
browse_namespace_project_build_artifacts_path(project.namespace, project, self)
|
||||
end
|
||||
end
|
||||
|
||||
def artifacts_browser_supported?
|
||||
def artifacts_metadata?
|
||||
artifacts? && artifacts_metadata.exists?
|
||||
end
|
||||
|
||||
def artifacts_metadata_entry(path)
|
||||
Gitlab::Ci::Build::Artifacts::Metadata.new(artifacts_metadata.path, path).to_entry
|
||||
def artifacts_metadata_entry(path, **options)
|
||||
Gitlab::Ci::Build::Artifacts::Metadata.new(artifacts_metadata.path, path, **options).to_entry
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
.center
|
||||
.btn-group{ role: :group }
|
||||
= link_to "Download", @build.artifacts_download_url, class: 'btn btn-sm btn-primary'
|
||||
- if @build.artifacts_browser_supported?
|
||||
- if @build.artifacts_metadata?
|
||||
= link_to "Browse", @build.artifacts_browse_url, class: 'btn btn-sm btn-primary'
|
||||
|
||||
.build-widget
|
||||
|
||||
@@ -13,8 +13,8 @@ module Gitlab
|
||||
|
||||
attr_reader :file, :path, :full_version
|
||||
|
||||
def initialize(file, path)
|
||||
@file, @path = file, path
|
||||
def initialize(file, path, **opts)
|
||||
@file, @path, @opts = file, path, opts
|
||||
@full_version = read_version
|
||||
end
|
||||
|
||||
@@ -52,7 +52,9 @@ module Gitlab
|
||||
|
||||
def match_entries(gz)
|
||||
entries = {}
|
||||
match_pattern = %r{^#{Regexp.escape(@path)}[^/]*/?$}
|
||||
|
||||
child_pattern = '[^/]*/?$' unless @opts[:recursive]
|
||||
match_pattern = /^#{Regexp.escape(@path)}#{child_pattern}/
|
||||
|
||||
until gz.eof? do
|
||||
begin
|
||||
|
||||
@@ -95,6 +95,13 @@ module Gitlab
|
||||
children.empty?
|
||||
end
|
||||
|
||||
def total_size
|
||||
descendant_pattern = %r{^#{Regexp.escape(@path)}}
|
||||
entries.sum do |path, entry|
|
||||
(entry[:size] if path =~ descendant_pattern).to_i
|
||||
end
|
||||
end
|
||||
|
||||
def to_s
|
||||
@path
|
||||
end
|
||||
|
||||
@@ -4,13 +4,13 @@ describe Gitlab::Ci::Build::Artifacts::Metadata::Entry do
|
||||
let(:entries) do
|
||||
{ 'path/' => {},
|
||||
'path/dir_1/' => {},
|
||||
'path/dir_1/file_1' => {},
|
||||
'path/dir_1/file_b' => {},
|
||||
'path/dir_1/file_1' => { size: 10 },
|
||||
'path/dir_1/file_b' => { size: 10 },
|
||||
'path/dir_1/subdir/' => {},
|
||||
'path/dir_1/subdir/subfile' => {},
|
||||
'path/dir_1/subdir/subfile' => { size: 10 },
|
||||
'path/second_dir' => {},
|
||||
'path/second_dir/dir_3/file_2' => {},
|
||||
'path/second_dir/dir_3/file_3'=> {},
|
||||
'path/second_dir/dir_3/file_2' => { size: 10 },
|
||||
'path/second_dir/dir_3/file_3'=> { size: 10 },
|
||||
'another_directory/'=> {},
|
||||
'another_file' => {},
|
||||
'/file/with/absolute_path' => {} }
|
||||
@@ -112,6 +112,11 @@ describe Gitlab::Ci::Build::Artifacts::Metadata::Entry do
|
||||
subject { |example| path(example).empty? }
|
||||
it { is_expected.to be false }
|
||||
end
|
||||
|
||||
describe '#total_size' do
|
||||
subject { |example| path(example).total_size }
|
||||
it { is_expected.to eq(30) }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe Gitlab::Ci::Build::Artifacts::Metadata do
|
||||
def metadata(path = '')
|
||||
described_class.new(metadata_file_path, path)
|
||||
def metadata(path = '', **opts)
|
||||
described_class.new(metadata_file_path, path, **opts)
|
||||
end
|
||||
|
||||
let(:metadata_file_path) do
|
||||
@@ -51,6 +51,19 @@ describe Gitlab::Ci::Build::Artifacts::Metadata do
|
||||
end
|
||||
end
|
||||
|
||||
describe '#find_entries! recursively for other_artifacts_0.1.2/' do
|
||||
subject { metadata('other_artifacts_0.1.2/', recursive: true).find_entries! }
|
||||
|
||||
it 'matches correct paths' do
|
||||
expect(subject.keys).
|
||||
to contain_exactly 'other_artifacts_0.1.2/',
|
||||
'other_artifacts_0.1.2/doc_sample.txt',
|
||||
'other_artifacts_0.1.2/another-subdirectory/',
|
||||
'other_artifacts_0.1.2/another-subdirectory/empty_directory/',
|
||||
'other_artifacts_0.1.2/another-subdirectory/banana_sample.gif'
|
||||
end
|
||||
end
|
||||
|
||||
describe '#to_entry' do
|
||||
subject { metadata('').to_entry }
|
||||
it { is_expected.to be_an_instance_of(Gitlab::Ci::Build::Artifacts::Metadata::Entry) }
|
||||
|
||||
@@ -362,12 +362,12 @@ describe Ci::Build, models: true do
|
||||
subject { build.artifacts_browse_url }
|
||||
|
||||
it "should be nil if artifacts browser is unsupported" do
|
||||
allow(build).to receive(:artifacts_browser_supported?).and_return(false)
|
||||
allow(build).to receive(:artifacts_metadata?).and_return(false)
|
||||
is_expected.to be_nil
|
||||
end
|
||||
|
||||
it 'should not be nil if artifacts browser is supported' do
|
||||
allow(build).to receive(:artifacts_browser_supported?).and_return(true)
|
||||
allow(build).to receive(:artifacts_metadata?).and_return(true)
|
||||
is_expected.to_not be_nil
|
||||
end
|
||||
end
|
||||
@@ -391,8 +391,8 @@ describe Ci::Build, models: true do
|
||||
end
|
||||
|
||||
|
||||
describe :artifacts_browser_supported? do
|
||||
subject { build.artifacts_browser_supported? }
|
||||
describe :artifacts_metadata? do
|
||||
subject { build.artifacts_metadata? }
|
||||
context 'artifacts metadata does not exist' do
|
||||
it { is_expected.to be_falsy }
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user