summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShinya Maeda <shinya@gitlab.com>2019-02-19 14:50:11 +0900
committerShinya Maeda <shinya@gitlab.com>2019-02-19 15:58:07 +0900
commitf6e0c69f6e9919ed5fad237340089758c9be76cb (patch)
tree2411a0c18c0a415dd415eb5ea442848b760c5cbb
parentcc311c6e61e502acac0b6f278a04418269f63d26 (diff)
downloadgitlab-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.rb21
-rw-r--r--app/models/concerns/has_ref.rb21
-rw-r--r--db/migrate/20190219142830_add_refspecs_to_ci_builds_metadata.rb11
-rw-r--r--lib/api/entities.rb4
-rw-r--r--lib/gitlab/ci/pipeline/chain/command.rb19
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)