diff options
author | Matija Čupić <matteeyah@gmail.com> | 2018-09-07 21:18:26 +0200 |
---|---|---|
committer | Matija Čupić <matteeyah@gmail.com> | 2018-09-07 21:18:26 +0200 |
commit | 95b296f8ac8578e142efd6a60a582be4da5b09be (patch) | |
tree | 9014eb0ae9730ec8fb32d1f76e277e92b8785631 /lib/gitlab/ci | |
parent | cd72189fc0127e9993eebaba9569f912394cc5c9 (diff) | |
download | gitlab-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.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/ci/external_files/external_file.rb | 21 | ||||
-rw-r--r-- | lib/gitlab/ci/external_files/mapper.rb | 16 | ||||
-rw-r--r-- | lib/gitlab/ci/external_files/processor.rb | 4 | ||||
-rw-r--r-- | lib/gitlab/ci/yaml_processor.rb | 6 |
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 |