Commit f8e0216f authored by Sean McGivern's avatar Sean McGivern Committed by Ruben Davila

Merge branch 'issue_28051_2' into 'master'

Create compare object with default branch when target branch is missing

Closes #28051

See merge request !9263
parent 4f0cdfca
...@@ -2,18 +2,14 @@ module MergeRequests ...@@ -2,18 +2,14 @@ module MergeRequests
class BuildService < MergeRequests::BaseService class BuildService < MergeRequests::BaseService
def execute def execute
self.merge_request = MergeRequest.new(params) self.merge_request = MergeRequest.new(params)
merge_request.can_be_created = true
merge_request.compare_commits = [] merge_request.compare_commits = []
merge_request.source_project = find_source_project merge_request.source_project = find_source_project
merge_request.target_project = find_target_project merge_request.target_project = find_target_project
merge_request.target_branch = find_target_branch merge_request.target_branch = find_target_branch
merge_request.can_be_created = branches_valid? && source_branch_specified? && target_branch_specified?
if branches_specified? && branches_valid? compare_branches if branches_present?
compare_branches assign_title_and_description if merge_request.can_be_created
assign_title_and_description
else
merge_request.can_be_created = false
end
merge_request merge_request
end end
...@@ -37,11 +33,17 @@ module MergeRequests ...@@ -37,11 +33,17 @@ module MergeRequests
target_branch || target_project.default_branch target_branch || target_project.default_branch
end end
def branches_specified? def source_branch_specified?
params[:source_branch] && params[:target_branch] params[:source_branch].present?
end
def target_branch_specified?
params[:target_branch].present?
end end
def branches_valid? def branches_valid?
return false unless source_branch_specified? || target_branch_specified?
validate_branches validate_branches
errors.blank? errors.blank?
end end
...@@ -55,9 +57,11 @@ module MergeRequests ...@@ -55,9 +57,11 @@ module MergeRequests
target_branch target_branch
) )
if compare
merge_request.compare_commits = compare.commits merge_request.compare_commits = compare.commits
merge_request.compare = compare merge_request.compare = compare
end end
end
def validate_branches def validate_branches
add_error('You must select source and target branch') unless branches_present? add_error('You must select source and target branch') unless branches_present?
......
---
title: Use default branch as target_branch when parameter is missing
merge_request:
author:
...@@ -44,15 +44,14 @@ describe MergeRequests::BuildService, services: true do ...@@ -44,15 +44,14 @@ describe MergeRequests::BuildService, services: true do
end end
end end
context 'missing target branch' do context 'when target branch is missing' do
let(:target_branch) { '' } let(:target_branch) { nil }
let(:commits) { Commit.decorate([commit_1], project) }
it 'forbids the merge request from being created' do it 'creates compare object with target branch as default branch' do
expect(merge_request.can_be_created).to eq(false) expect(merge_request.can_be_created).to eq(false)
end expect(merge_request.compare).to be_present
expect(merge_request.target_branch).to eq(project.default_branch)
it 'adds an error message to the merge request' do
expect(merge_request.errors).to contain_exactly('You must select source and target branch')
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment