summaryrefslogtreecommitdiff
path: root/lib/gitlab/ci
diff options
context:
space:
mode:
authorMatija Čupić <matteeyah@gmail.com>2018-09-07 21:18:26 +0200
committerMatija Čupić <matteeyah@gmail.com>2018-09-07 21:18:26 +0200
commit95b296f8ac8578e142efd6a60a582be4da5b09be (patch)
tree9014eb0ae9730ec8fb32d1f76e277e92b8785631 /lib/gitlab/ci
parentcd72189fc0127e9993eebaba9569f912394cc5c9 (diff)
downloadgitlab-ce-95b296f8ac8578e142efd6a60a582be4da5b09be.tar.gz
Change ExternalFile to retrieve local file from repository instead of GitLab project
CE mirror of 03c6094997023d9c8875ced421a6c9ef39a4af44
Diffstat (limited to 'lib/gitlab/ci')
-rw-r--r--lib/gitlab/ci/config.rb2
-rw-r--r--lib/gitlab/ci/external_files/external_file.rb21
-rw-r--r--lib/gitlab/ci/external_files/mapper.rb16
-rw-r--r--lib/gitlab/ci/external_files/processor.rb4
-rw-r--r--lib/gitlab/ci/yaml_processor.rb6
5 files changed, 29 insertions, 20 deletions
diff --git a/lib/gitlab/ci/config.rb b/lib/gitlab/ci/config.rb
index f665ace7c74..caa3a7c3c86 100644
--- a/lib/gitlab/ci/config.rb
+++ b/lib/gitlab/ci/config.rb
@@ -12,7 +12,7 @@ module Gitlab
.to_hash
if project.present?
- processor = ::Gitlab::Ci::ExternalFiles::Processor.new(initial_config)
+ processor = ::Gitlab::Ci::ExternalFiles::Processor.new(initial_config, project)
@config = processor.perform
else
@config = initial_config
diff --git a/lib/gitlab/ci/external_files/external_file.rb b/lib/gitlab/ci/external_files/external_file.rb
index 47d6d1c0fdc..45c6ca3fbfe 100644
--- a/lib/gitlab/ci/external_files/external_file.rb
+++ b/lib/gitlab/ci/external_files/external_file.rb
@@ -4,33 +4,38 @@ module Gitlab
module Ci
module ExternalFiles
class ExternalFile
- def initialize(value)
+ def initialize(value, project)
@value = value
+ @project = project
end
def content
if remote_url?
open(value).read
else
- File.read(base_path)
+ local_file_content
end
end
def valid?
- remote_url? || File.exist?(base_path)
+ remote_url? || local_file_content
end
private
- attr_reader :value
-
- def base_path
- "#{Rails.root}/#{value}"
- end
+ attr_reader :value, :project
def remote_url?
::Gitlab::UrlSanitizer.valid?(value)
end
+
+ def local_file_content
+ project.repository.fetch_file_for(sha, value)
+ end
+
+ def sha
+ @sha ||= project.repository.commit.sha
+ end
end
end
end
diff --git a/lib/gitlab/ci/external_files/mapper.rb b/lib/gitlab/ci/external_files/mapper.rb
index 4b5d2ddd6a1..2d40e296546 100644
--- a/lib/gitlab/ci/external_files/mapper.rb
+++ b/lib/gitlab/ci/external_files/mapper.rb
@@ -2,12 +2,12 @@ module Gitlab
module Ci
module ExternalFiles
class Mapper
- def self.fetch_paths(values)
- paths = values.fetch(:includes, [])
- normalize_paths(paths)
+ def initialize(values, project)
+ @paths = values.fetch(:includes, [])
+ @project = project
end
- def self.normalize_paths(paths)
+ def process
if paths.is_a?(String)
[build_external_file(paths)]
else
@@ -15,8 +15,12 @@ module Gitlab
end
end
- def self.build_external_file(path)
- ::Gitlab::Ci::ExternalFiles::ExternalFile.new(path)
+ private
+
+ attr_reaer :paths, :project
+
+ def build_external_file(path)
+ ::Gitlab::Ci::ExternalFiles::ExternalFile.new(path, project)
end
end
end
diff --git a/lib/gitlab/ci/external_files/processor.rb b/lib/gitlab/ci/external_files/processor.rb
index 221b6f58b98..ac51db05d8e 100644
--- a/lib/gitlab/ci/external_files/processor.rb
+++ b/lib/gitlab/ci/external_files/processor.rb
@@ -4,9 +4,9 @@ module Gitlab
class Processor
ExternalFileError = Class.new(StandardError)
- def initialize(values)
+ def initialize(values, project)
@values = values
- @external_files = ::Gitlab::Ci::ExternalFiles::Mapper.fetch_paths(values)
+ @external_files = ::Gitlab::Ci::ExternalFiles::Mapper.fetch_paths(values, project).process
end
def perform
diff --git a/lib/gitlab/ci/yaml_processor.rb b/lib/gitlab/ci/yaml_processor.rb
index 702bcd3802d..0f79fbede9f 100644
--- a/lib/gitlab/ci/yaml_processor.rb
+++ b/lib/gitlab/ci/yaml_processor.rb
@@ -73,13 +73,13 @@ module Gitlab
end
end
- def self.validation_message(content, opts = {})
+ def self.validation_message(content, project = nil, opts = {})
return 'Please provide content of .gitlab-ci.yml' if content.blank?
begin
- Gitlab::Ci::YamlProcessor.new(content, opts)
+ Gitlab::Ci::YamlProcessor.new(content, project, opts)
nil
- rescue ValidationError => e
+ rescue ValidationError, ::Gitlab::Ci::ExternalFiles::Processor::ExternalFileError => e
e.message
end
end