Commit a96f3e18 authored by Stan Hu's avatar Stan Hu

Fix post-receive errors on a push when an external issue tracker is configured

Closes #1700
Closes #1720
parent d5cbdcc7
Please view this file on the master branch, on stable branches it's out of date. Please view this file on the master branch, on stable branches it's out of date.
v 7.12.0 (unreleased) v 7.12.0 (unreleased)
- Fix post-receive errors on a push when an external issue tracker is configured (Stan Hu)
- Update oauth button logos for Twitter and Google to recommended assets - Update oauth button logos for Twitter and Google to recommended assets
- Update browser gem to version 0.8.0 for IE11 support (Stan Hu) - Update browser gem to version 0.8.0 for IE11 support (Stan Hu)
- Fix timeout when rendering file with thousands of lines. - Fix timeout when rendering file with thousands of lines.
......
...@@ -88,18 +88,24 @@ class GitPushService ...@@ -88,18 +88,24 @@ class GitPushService
end end
end end
# Create cross-reference notes for any other references. Omit any issues that were referenced in an if project.default_issues_tracker?
# issue-closing phrase, or have already been mentioned from this commit (probably from this commit create_cross_reference_notes(commit, issues_to_close)
# being pushed to a different branch). end
refs = commit.references(project, user) - issues_to_close end
refs.reject! { |r| commit.has_mentioned?(r) } end
if refs.present? def create_cross_reference_notes(commit, issues_to_close)
author ||= commit_user(commit) # Create cross-reference notes for any other references. Omit any issues that were referenced in an
# issue-closing phrase, or have already been mentioned from this commit (probably from this commit
# being pushed to a different branch).
refs = commit.references(project, user) - issues_to_close
refs.reject! { |r| commit.has_mentioned?(r) }
refs.each do |r| if refs.present?
Note.create_cross_reference_note(r, commit, author) author ||= commit_user(commit)
end
refs.each do |r|
Note.create_cross_reference_note(r, commit, author)
end end
end end
end end
......
module Issues module Issues
class CloseService < Issues::BaseService class CloseService < Issues::BaseService
def execute(issue, commit = nil) def execute(issue, commit = nil)
if issue.close if project.default_issues_tracker? && issue.close
event_service.close_issue(issue, current_user) event_service.close_issue(issue, current_user)
create_note(issue, commit) create_note(issue, commit)
notification_service.close_issue(issue, current_user) notification_service.close_issue(issue, current_user)
......
...@@ -233,6 +233,15 @@ describe GitPushService do ...@@ -233,6 +233,15 @@ describe GitPushService do
expect(Issue.find(issue.id)).to be_opened expect(Issue.find(issue.id)).to be_opened
end end
it "doesn't close issues when external issue tracker is in use" do
allow(project).to receive(:default_issues_tracker?).and_return(false)
# The push still shouldn't create cross-reference notes.
expect {
service.execute(project, user, @oldrev, @newrev, 'refs/heads/hurf')
}.not_to change { Note.where(project_id: project.id, system: true).count }
end
end end
describe "empty project" do describe "empty project" do
......
...@@ -31,5 +31,15 @@ describe Issues::CloseService do ...@@ -31,5 +31,15 @@ describe Issues::CloseService do
expect(note.note).to include "Status changed to closed" expect(note.note).to include "Status changed to closed"
end end
end end
context "external issue tracker" do
before do
allow(project).to receive(:default_issues_tracker?).and_return(false)
@issue = Issues::CloseService.new(project, user, {}).execute(issue)
end
it { expect(@issue).to be_valid }
it { expect(@issue).to be_opened }
end
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