Read about our upcoming Code of Conduct on this issue

Commit 31cc2570 authored by Andrew McCallum's avatar Andrew McCallum Committed by Sean McGivern
Browse files

Resolve "Incorrect merge request title when Jira activated and multiple commits on branch"

parent 48ad207b251d
module MergeRequests
class BuildService < MergeRequests::BaseService
include Gitlab::Utils::StrongMemoize
def execute
@issue_iid = params.delete(:issue_iid)
@params_issue_iid = params.delete(:issue_iid)
self.merge_request = MergeRequest.new(params)
merge_request.compare_commits = []
......@@ -123,7 +125,7 @@ def target_branch_exists?
#
def assign_title_and_description
assign_title_and_description_from_single_commit
assign_title_from_issue
assign_title_from_issue if target_project.issues_enabled? || target_project.external_issue_tracker
merge_request.title ||= source_branch.titleize.humanize
merge_request.title = wip_title if compare_commits.empty?
......@@ -132,9 +134,9 @@ def assign_title_and_description
end
def append_closes_description
return unless issue_iid
return unless issue
closes_issue = "Closes ##{issue_iid}"
closes_issue = "Closes #{issue.to_reference}"
if description.present?
merge_request.description += closes_issue.prepend("\n\n")
......@@ -154,13 +156,27 @@ def assign_title_and_description_from_single_commit
end
def assign_title_from_issue
return unless issue && issue.is_a?(Issue)
return unless issue
merge_request.title = "Resolve \"#{issue.title}\"" if issue.is_a?(Issue)
merge_request.title = "Resolve \"#{issue.title}\""
unless merge_request.title
branch_title = source_branch.downcase.remove(issue_iid.downcase).titleize.humanize
merge_request.title = "Resolve #{issue_iid}"
merge_request.title += " \"#{branch_title}\"" unless branch_title.empty?
end
end
def issue_iid
@issue_iid ||= source_branch.match(/\A(\d+)-/).try(:[], 1)
strong_memoize(:issue_iid) do
@params_issue_iid || begin
id = if target_project.external_issue_tracker
source_branch.match(target_project.external_issue_reference_pattern).try(:[], 0)
end
id || source_branch.match(/\A(\d+)-/).try(:[], 1)
end
end
end
def issue
......
---
title: Prevent JIRA issue identifier from being humanized.
merge_request: 16491
author: Andrew McCallum
type: fixed
......@@ -172,11 +172,32 @@ def stub_compare
end
end
context 'branch starts with external issue IID followed by a hyphen' do
context 'branch starts with numeric characters followed by a hyphen with no issue tracker' do
let(:source_branch) { '12345-fix-issue' }
before do
allow(project).to receive(:external_issue_tracker).and_return(false)
allow(project).to receive(:issues_enabled?).and_return(false)
end
it 'uses the title of the commit as the title of the merge request' do
expect(merge_request.title).to eq(commit_1.safe_message.split("\n").first)
end
it 'uses the description of the commit as the description of the merge request' do
commit_description = commit_1.safe_message.split(/\n+/, 2).last
expect(merge_request.description).to eq("#{commit_description}")
end
end
context 'branch starts with JIRA-formatted external issue IID followed by a hyphen' do
let(:source_branch) { 'EXMPL-12345-fix-issue' }
before do
allow(project).to receive(:external_issue_tracker).and_return(true)
allow(project).to receive(:issues_enabled?).and_return(false)
allow(project).to receive(:external_issue_reference_pattern).and_return(IssueTrackerService.reference_pattern)
end
it 'uses the title of the commit as the title of the merge request' do
......@@ -186,7 +207,7 @@ def stub_compare
it 'uses the description of the commit as the description of the merge request and appends the closes text' do
commit_description = commit_1.safe_message.split(/\n+/, 2).last
expect(merge_request.description).to eq("#{commit_description}\n\nCloses #12345")
expect(merge_request.description).to eq("#{commit_description}\n\nCloses EXMPL-12345")
end
end
end
......@@ -252,19 +273,46 @@ def stub_compare
end
end
context 'branch starts with external issue IID followed by a hyphen' do
context 'branch starts with numeric characters followed by a hyphen with no issue tracker' do
let(:source_branch) { '12345-fix-issue' }
before do
allow(project).to receive(:external_issue_tracker).and_return(true)
allow(project).to receive(:external_issue_tracker).and_return(false)
allow(project).to receive(:issues_enabled?).and_return(false)
end
it 'sets the title to the humanized branch title' do
expect(merge_request.title).to eq('12345 fix issue')
end
end
context 'branch starts with JIRA-formatted external issue IID' do
let(:source_branch) { 'EXMPL-12345' }
before do
allow(project).to receive(:external_issue_tracker).and_return(true)
allow(project).to receive(:issues_enabled?).and_return(false)
allow(project).to receive(:external_issue_reference_pattern).and_return(IssueTrackerService.reference_pattern)
end
it 'sets the title to the humanized branch title' do
expect(merge_request.title).to eq('Resolve EXMPL-12345')
end
it 'appends the closes text' do
expect(merge_request.description).to eq('Closes #12345')
expect(merge_request.description).to eq('Closes EXMPL-12345')
end
context 'followed by hyphenated text' do
let(:source_branch) { 'EXMPL-12345-fix-issue' }
it 'sets the title to the humanized branch title' do
expect(merge_request.title).to eq('Resolve EXMPL-12345 "Fix issue"')
end
it 'appends the closes text' do
expect(merge_request.description).to eq('Closes EXMPL-12345')
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