diff options
author | Shinya Maeda <shinya@gitlab.com> | 2018-12-31 10:28:55 +0900 |
---|---|---|
committer | Shinya Maeda <shinya@gitlab.com> | 2018-12-31 10:28:55 +0900 |
commit | e5259c6f9129055fd91324351e258d3a3cf0117e (patch) | |
tree | 8e2f79cf231a369171aeff75ef0824ff0bc5645e | |
parent | bd268a1e0924ce912ef8bf13373820640b5b53c0 (diff) | |
download | gitlab-ce-poc-runner-checkout-merge-ref.tar.gz |
Poc runner checkout merge refpoc-runner-checkout-merge-ref
-rw-r--r-- | app/models/merge_request.rb | 13 | ||||
-rw-r--r-- | app/models/repository.rb | 8 | ||||
-rw-r--r-- | lib/api/entities.rb | 11 |
3 files changed, 30 insertions, 2 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index b937bef100b..eff4874205e 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -633,6 +633,7 @@ class MergeRequest < ActiveRecord::Base def create_merge_request_diff fetch_ref! + create_merge_commit! # n+1: https://gitlab.com/gitlab-org/gitlab-ce/issues/37435 Gitlab::GitalyClient.allow_n_plus_1_calls do @@ -1047,10 +1048,19 @@ class MergeRequest < ActiveRecord::Base target_project.repository.fetch_source_branch!(source_project.repository, source_branch, ref_path) end + def create_merge_commit! + target_project.repository.create_ref(source_branch, merge_ref_path) + target_project.repository.merge_to(user, target_branch_sha, merge_ref_path, 'aaa') + end + def ref_path "refs/#{Repository::REF_MERGE_REQUEST}/#{iid}/head" end + def merge_ref_path + "refs/#{Repository::REF_MERGE_REQUEST}/#{iid}/merge" + end + def in_locked_state begin lock_mr @@ -1112,6 +1122,9 @@ class MergeRequest < ActiveRecord::Base variables.append(key: 'CI_MERGE_REQUEST_REF_PATH', value: ref_path.to_s) + variables.append(key: 'CI_MERGE_REQUEST_MERGE_REF_PATH', + value: merge_ref_path.to_s) + variables.append(key: 'CI_MERGE_REQUEST_PROJECT_ID', value: project.id.to_s) diff --git a/app/models/repository.rb b/app/models/repository.rb index 015a179f374..0a969e8504a 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -837,6 +837,14 @@ class Repository end end + def merge_to(user, source_sha, target_branch, message) + with_cache_hooks do + raw_repository.merge(user, source_sha, target_branch, message) do |commit_id| + nil # Return value does not matter. + end + end + end + def ff_merge(user, source, target_branch, merge_request: nil) their_commit_id = commit(source)&.id raise 'Invalid merge source' if their_commit_id.nil? diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 22403664c21..2472eb72b85 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -1312,12 +1312,19 @@ module API class GitInfo < Grape::Entity expose :repo_url, :ref, :sha, :before_sha expose :ref_type do |model| - if model.tag + if model.pipeline.branch? + 'branch' + elsif model.pipeline.merge_request? + 'merge-requests' + elsif model.pipeline.tag? 'tag' else - 'branch' + raise ArgumentError, 'Invalid ref type!' end end + expose :merge_request_iid, if: ->(job, _) { job.pipeline.merge_request? } do + job.pipeline.merge_request.iid + end end class RunnerInfo < Grape::Entity |