Merge branch 'issue_22446' into 'master'
Fix bug when trying to cache closed issues from external issue trackers fixes #22446 See merge request !6619
This commit is contained in:
commit
796f531f2b
|
@ -48,6 +48,7 @@ v 8.13.0 (unreleased)
|
||||||
- Add Container Registry on/off status to Admin Area !6638 (the-undefined)
|
- Add Container Registry on/off status to Admin Area !6638 (the-undefined)
|
||||||
|
|
||||||
v 8.12.4 (unreleased)
|
v 8.12.4 (unreleased)
|
||||||
|
- Fix type mismatch bug when closing Jira issue
|
||||||
- Fix issues importing services via Import/Export
|
- Fix issues importing services via Import/Export
|
||||||
- Fix "Copy to clipboard" tooltip to say "Copied!" when clipboard button is clicked. (lukehowell)
|
- Fix "Copy to clipboard" tooltip to say "Copied!" when clipboard button is clicked. (lukehowell)
|
||||||
|
|
||||||
|
|
|
@ -523,9 +523,13 @@ class MergeRequest < ActiveRecord::Base
|
||||||
# `MergeRequestsClosingIssues` model. This is a performance optimization.
|
# `MergeRequestsClosingIssues` model. This is a performance optimization.
|
||||||
# Calculating this information for a number of merge requests requires
|
# Calculating this information for a number of merge requests requires
|
||||||
# running `ReferenceExtractor` on each of them separately.
|
# running `ReferenceExtractor` on each of them separately.
|
||||||
|
# This optimization does not apply to issues from external sources.
|
||||||
def cache_merge_request_closes_issues!(current_user = self.author)
|
def cache_merge_request_closes_issues!(current_user = self.author)
|
||||||
|
return if project.has_external_issue_tracker?
|
||||||
|
|
||||||
transaction do
|
transaction do
|
||||||
self.merge_requests_closing_issues.delete_all
|
self.merge_requests_closing_issues.delete_all
|
||||||
|
|
||||||
closes_issues(current_user).each do |issue|
|
closes_issues(current_user).each do |issue|
|
||||||
self.merge_requests_closing_issues.create!(issue: issue)
|
self.merge_requests_closing_issues.create!(issue: issue)
|
||||||
end
|
end
|
||||||
|
|
|
@ -86,6 +86,30 @@ describe MergeRequest, models: true do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#cache_merge_request_closes_issues!' do
|
||||||
|
before do
|
||||||
|
subject.project.team << [subject.author, :developer]
|
||||||
|
subject.target_branch = subject.project.default_branch
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'caches closed issues' do
|
||||||
|
issue = create :issue, project: subject.project
|
||||||
|
commit = double('commit1', safe_message: "Fixes #{issue.to_reference}")
|
||||||
|
allow(subject).to receive(:commits).and_return([commit])
|
||||||
|
|
||||||
|
expect { subject.cache_merge_request_closes_issues! }.to change(subject.merge_requests_closing_issues, :count).by(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not cache issues from external trackers' do
|
||||||
|
subject.project.update_attribute(:has_external_issue_tracker, true)
|
||||||
|
issue = ExternalIssue.new('JIRA-123', subject.project)
|
||||||
|
commit = double('commit1', safe_message: "Fixes #{issue.to_reference}")
|
||||||
|
allow(subject).to receive(:commits).and_return([commit])
|
||||||
|
|
||||||
|
expect { subject.cache_merge_request_closes_issues! }.not_to change(subject.merge_requests_closing_issues, :count)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '#source_branch_sha' do
|
describe '#source_branch_sha' do
|
||||||
let(:last_branch_commit) { subject.source_project.repository.commit(subject.source_branch) }
|
let(:last_branch_commit) { subject.source_project.repository.commit(subject.source_branch) }
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,42 @@ describe MergeRequests::MergeService, services: true do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'closes related issues' do
|
||||||
|
let(:service) { described_class.new(project, user, commit_message: 'Awesome message') }
|
||||||
|
|
||||||
|
before do
|
||||||
|
allow(project).to receive(:default_branch).and_return(merge_request.target_branch)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'closes GitLab issue tracker issues' do
|
||||||
|
issue = create :issue, project: project
|
||||||
|
commit = double('commit', safe_message: "Fixes #{issue.to_reference}")
|
||||||
|
allow(merge_request).to receive(:commits).and_return([commit])
|
||||||
|
|
||||||
|
service.execute(merge_request)
|
||||||
|
|
||||||
|
expect(issue.reload.closed?).to be_truthy
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with JIRA integration' do
|
||||||
|
include JiraServiceHelper
|
||||||
|
|
||||||
|
let(:jira_tracker) { project.create_jira_service }
|
||||||
|
|
||||||
|
before { jira_service_settings }
|
||||||
|
|
||||||
|
it 'closes issues on JIRA issue tracker' do
|
||||||
|
jira_issue = ExternalIssue.new('JIRA-123', project)
|
||||||
|
commit = double('commit', safe_message: "Fixes #{jira_issue.to_reference}")
|
||||||
|
allow(merge_request).to receive(:commits).and_return([commit])
|
||||||
|
|
||||||
|
expect_any_instance_of(JiraService).to receive(:close_issue).with(merge_request, jira_issue).once
|
||||||
|
|
||||||
|
service.execute(merge_request)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'closes related todos' do
|
context 'closes related todos' do
|
||||||
let(:merge_request) { create(:merge_request, assignee: user, author: user) }
|
let(:merge_request) { create(:merge_request, assignee: user, author: user) }
|
||||||
let(:project) { merge_request.project }
|
let(:project) { merge_request.project }
|
||||||
|
|
Loading…
Reference in New Issue