Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-06-04 21:10:08 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-06-04 21:10:08 +0300
commitf9ddf689da1edc68c81444a25b3b0d3841382c56 (patch)
treeecab18b41b8cbca55acfc09b19478e1d7af6160a /lib/gitlab/ci/variables
parentd4194db620cc5b736bb5737ed5e4eab979ccd7ab (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/ci/variables')
-rw-r--r--lib/gitlab/ci/variables/collection.rb16
-rw-r--r--lib/gitlab/ci/variables/collection/item.rb13
2 files changed, 23 insertions, 6 deletions
diff --git a/lib/gitlab/ci/variables/collection.rb b/lib/gitlab/ci/variables/collection.rb
index c7829b12557..ef9ba1b73c7 100644
--- a/lib/gitlab/ci/variables/collection.rb
+++ b/lib/gitlab/ci/variables/collection.rb
@@ -68,11 +68,19 @@ module Gitlab
end
def expand_value(value, keep_undefined: false)
- value.gsub(ExpandVariables::VARIABLES_REGEXP) do
+ value.gsub(Item::VARIABLES_REGEXP) do
match = Regexp.last_match
- result = @variables_by_key[match[1] || match[2]]&.value
- result ||= match[0] if keep_undefined
- result
+ if match[:key]
+ # we matched variable
+ if variable = @variables_by_key[match[:key]]
+ variable.value
+ elsif keep_undefined
+ match[0]
+ end
+ else
+ # we escape sequence
+ match[0]
+ end
end
end
diff --git a/lib/gitlab/ci/variables/collection/item.rb b/lib/gitlab/ci/variables/collection/item.rb
index 77da2c4cb91..0217e6129ca 100644
--- a/lib/gitlab/ci/variables/collection/item.rb
+++ b/lib/gitlab/ci/variables/collection/item.rb
@@ -7,6 +7,9 @@ module Gitlab
class Item
include Gitlab::Utils::StrongMemoize
+ VARIABLES_REGEXP = /\$\$|%%|\$(?<key>[a-zA-Z_][a-zA-Z0-9_]*)|\${\g<key>?}|%\g<key>%/.freeze.freeze
+ VARIABLE_REF_CHARS = %w[$ %].freeze
+
def initialize(key:, value:, public: true, file: false, masked: false, raw: false)
raise ArgumentError, "`#{key}` must be of type String or nil value, while it was: #{value.class}" unless
value.is_a?(String) || value.nil?
@@ -34,9 +37,9 @@ module Gitlab
strong_memoize(:depends_on) do
next if raw
- next unless ExpandVariables.possible_var_reference?(value)
+ next unless self.class.possible_var_reference?(value)
- value.scan(ExpandVariables::VARIABLES_REGEXP).map(&:first)
+ value.scan(VARIABLES_REGEXP).filter_map(&:last)
end
end
@@ -64,6 +67,12 @@ module Gitlab
end
end
+ def self.possible_var_reference?(value)
+ return unless value
+
+ VARIABLE_REF_CHARS.any? { |symbol| value.include?(symbol) }
+ end
+
def to_s
return to_runner_variable.to_s unless depends_on