diff options
author | Shinya Maeda <shinya@gitlab.com> | 2019-02-19 14:50:11 +0900 |
---|---|---|
committer | Shinya Maeda <shinya@gitlab.com> | 2019-02-19 15:58:07 +0900 |
commit | f6e0c69f6e9919ed5fad237340089758c9be76cb (patch) | |
tree | 2411a0c18c0a415dd415eb5ea442848b760c5cbb | |
parent | cc311c6e61e502acac0b6f278a04418269f63d26 (diff) | |
download | gitlab-ce-persist-full-ref-path-in-ci-pipelines.tar.gz |
Persist refspecs in ci_pipeline_refspecspersist-full-ref-path-in-ci-pipelines
Commit
Fix
-rw-r--r-- | app/models/concerns/ci/metadatable.rb | 21 | ||||
-rw-r--r-- | app/models/concerns/has_ref.rb | 21 | ||||
-rw-r--r-- | db/migrate/20190219142830_add_refspecs_to_ci_builds_metadata.rb | 11 | ||||
-rw-r--r-- | lib/api/entities.rb | 4 | ||||
-rw-r--r-- | lib/gitlab/ci/pipeline/chain/command.rb | 19 |
5 files changed, 56 insertions, 20 deletions
diff --git a/app/models/concerns/ci/metadatable.rb b/app/models/concerns/ci/metadatable.rb index 9eed9492b37..a6f29d393b1 100644 --- a/app/models/concerns/ci/metadatable.rb +++ b/app/models/concerns/ci/metadatable.rb @@ -15,7 +15,9 @@ module Ci autosave: true delegate :timeout, to: :metadata, prefix: true, allow_nil: true + delegate :refspecs, to: :metadata, allow_nil: true before_create :ensure_metadata + before_create :set_refspecs end def ensure_metadata @@ -49,6 +51,25 @@ module Ci write_metadata_attribute(:yaml_variables, :config_variables, value) end + def set_refspecs + specs = [] + + if git_depth > 0 + if branch? || merge_request? + specs << "+#{git_branch_ref}:refs/remotes/origin/#{ref}" + elsif tag? + specs << "+#{git_tag_ref}:#{git_tag_ref}" + end + else + if branch? || merge_request? || tag? + specs << '+refs/heads/*:refs/remotes/origin/*' + specs << '+refs/tags/*:refs/tags/*' + end + end + + self.refspecs = specs.join(HasRef::REFSPEC_DELIMITER) + end + private def read_metadata_attribute(legacy_key, metadata_key, default_value = nil) diff --git a/app/models/concerns/has_ref.rb b/app/models/concerns/has_ref.rb index a80e4a508aa..b64724af355 100644 --- a/app/models/concerns/has_ref.rb +++ b/app/models/concerns/has_ref.rb @@ -3,6 +3,8 @@ module HasRef extend ActiveSupport::Concern + REFSPEC_DELIMITER = ' '.freeze + def branch? !tag? && !merge_request? end @@ -33,25 +35,6 @@ module HasRef end end - def refspecs - spec = [] - - if git_depth > 0 - if branch? || merge_request? - spec << "+#{git_branch_ref}:refs/remotes/origin/#{ref}" - elsif tag? - spec << "+#{git_tag_ref}:#{git_tag_ref}" - end - else - if branch? || merge_request? || tag? - spec << '+refs/heads/*:refs/remotes/origin/*' - spec << '+refs/tags/*:refs/tags/*' - end - end - - spec - end - private def git_branch_ref diff --git a/db/migrate/20190219142830_add_refspecs_to_ci_builds_metadata.rb b/db/migrate/20190219142830_add_refspecs_to_ci_builds_metadata.rb new file mode 100644 index 00000000000..daa3c9e3f73 --- /dev/null +++ b/db/migrate/20190219142830_add_refspecs_to_ci_builds_metadata.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class AddRefspecsToCiBuildsMetadata < ActiveRecord::Migration[5.0] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def change + add_column(:ci_builds_metadata, :refspecs, :text) + end +end diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 8f337ea2a90..329f8504441 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -1377,7 +1377,9 @@ module API class GitInfo < Grape::Entity expose :repo_url, :ref, :sha, :before_sha expose :ref_type - expose :refspecs + expose :refspecs do |job| + job.refspecs.split(REFSPEC_DELIMITER) + end expose :git_depth, as: :depth end diff --git a/lib/gitlab/ci/pipeline/chain/command.rb b/lib/gitlab/ci/pipeline/chain/command.rb index e62d547d862..6bec6036cd3 100644 --- a/lib/gitlab/ci/pipeline/chain/command.rb +++ b/lib/gitlab/ci/pipeline/chain/command.rb @@ -38,6 +38,25 @@ module Gitlab end end + def refspecs + specs = [] + + if git_depth > 0 + if branch? || merge_request? + specs << "+#{git_branch_ref}:refs/remotes/origin/#{ref}" + elsif tag? + specs << "+#{git_tag_ref}:#{git_tag_ref}" + end + else + if branch? || merge_request? || tag? + specs << '+refs/heads/*:refs/remotes/origin/*' + specs << '+refs/tags/*:refs/tags/*' + end + end + + specs.join(HasRef::REFSPEC_DELIMITER) + end + def sha strong_memoize(:sha) do project.commit(origin_sha || origin_ref).try(:id) |