summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/projects/artifacts_controller.rb2
-rw-r--r--lib/gitlab/string_path.rb4
-rw-r--r--spec/lib/gitlab/string_path_spec.rb13
3 files changed, 18 insertions, 1 deletions
diff --git a/app/controllers/projects/artifacts_controller.rb b/app/controllers/projects/artifacts_controller.rb
index d11ae5bd52d..647bcc31de5 100644
--- a/app/controllers/projects/artifacts_controller.rb
+++ b/app/controllers/projects/artifacts_controller.rb
@@ -17,7 +17,7 @@ class Projects::ArtifactsController < Projects::ApplicationController
def browse
return render_404 unless build.artifacts?
@path = build.artifacts_metadata_string_path(params[:path] || './')
- return render_404 if @path.universe.empty?
+ return render_404 unless @path.exists?
end
private
diff --git a/lib/gitlab/string_path.rb b/lib/gitlab/string_path.rb
index 4d024b3ff73..a6234d34e7d 100644
--- a/lib/gitlab/string_path.rb
+++ b/lib/gitlab/string_path.rb
@@ -19,6 +19,10 @@ module Gitlab
@path
end
+ def exists?
+ @path == './' || @universe.include?(@path)
+ end
+
def absolute?
@path.start_with?('/')
end
diff --git a/spec/lib/gitlab/string_path_spec.rb b/spec/lib/gitlab/string_path_spec.rb
index a54bf109c80..861eb951236 100644
--- a/spec/lib/gitlab/string_path_spec.rb
+++ b/spec/lib/gitlab/string_path_spec.rb
@@ -32,6 +32,7 @@ describe Gitlab::StringPath do
it { is_expected.to be_file }
it { is_expected.to have_parent }
it { is_expected.to_not have_descendants }
+ it { is_expected.to exist }
describe '#basename' do
subject { |example| path(example).basename }
@@ -170,4 +171,16 @@ describe Gitlab::StringPath do
it { is_expected.to eq '/path/file1' }
end
+
+ describe '#exists?', path: 'another_file' do
+ subject { |example| path(example).exists? }
+ it { is_expected.to be true }
+ end
+
+ describe '#exists?', path: './non_existent/' do
+ let(:universe) { ['./something'] }
+ subject { |example| path(example).exists? }
+
+ it { is_expected.to be false }
+ end
end