summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShinya Maeda <shinya@gitlab.com>2018-12-31 10:28:55 +0900
committerShinya Maeda <shinya@gitlab.com>2018-12-31 10:28:55 +0900
commite5259c6f9129055fd91324351e258d3a3cf0117e (patch)
tree8e2f79cf231a369171aeff75ef0824ff0bc5645e
parentbd268a1e0924ce912ef8bf13373820640b5b53c0 (diff)
downloadgitlab-ce-poc-runner-checkout-merge-ref.tar.gz
Poc runner checkout merge refpoc-runner-checkout-merge-ref
-rw-r--r--app/models/merge_request.rb13
-rw-r--r--app/models/repository.rb8
-rw-r--r--lib/api/entities.rb11
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