Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG1
-rw-r--r--app/services/git_push_service.rb26
-rw-r--r--app/services/issues/close_service.rb2
-rw-r--r--spec/services/git_push_service_spec.rb9
-rw-r--r--spec/services/issues/close_service_spec.rb10
5 files changed, 37 insertions, 11 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 4f8b23f2553..e5a171144f1 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -13,6 +13,7 @@ v 7.13.0 (unreleased)
v 7.12.0 (unreleased)
- Fix Error 500 when one user attempts to access a personal, internal snippet (Stan Hu)
- Disable changing of target branch in new merge request page when a branch has already been specified (Stan Hu)
+ - 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 browser gem to version 0.8.0 for IE11 support (Stan Hu)
- Fix timeout when rendering file with thousands of lines.
diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb
index cde65349d5c..68d3b915fc9 100644
--- a/app/services/git_push_service.rb
+++ b/app/services/git_push_service.rb
@@ -88,18 +88,24 @@ class GitPushService
end
end
- # 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) }
+ if project.default_issues_tracker?
+ create_cross_reference_notes(commit, issues_to_close)
+ end
+ end
+ end
- if refs.present?
- author ||= commit_user(commit)
+ def create_cross_reference_notes(commit, issues_to_close)
+ # 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|
- Note.create_cross_reference_note(r, commit, author)
- end
+ if refs.present?
+ author ||= commit_user(commit)
+
+ refs.each do |r|
+ Note.create_cross_reference_note(r, commit, author)
end
end
end
diff --git a/app/services/issues/close_service.rb b/app/services/issues/close_service.rb
index 138465859ce..3d85f97b7e5 100644
--- a/app/services/issues/close_service.rb
+++ b/app/services/issues/close_service.rb
@@ -1,7 +1,7 @@
module Issues
class CloseService < Issues::BaseService
def execute(issue, commit = nil)
- if issue.close
+ if project.default_issues_tracker? && issue.close
event_service.close_issue(issue, current_user)
create_note(issue, commit)
notification_service.close_issue(issue, current_user)
diff --git a/spec/services/git_push_service_spec.rb b/spec/services/git_push_service_spec.rb
index e7558f28768..d0941fa2e07 100644
--- a/spec/services/git_push_service_spec.rb
+++ b/spec/services/git_push_service_spec.rb
@@ -233,6 +233,15 @@ describe GitPushService do
expect(Issue.find(issue.id)).to be_opened
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
describe "empty project" do
diff --git a/spec/services/issues/close_service_spec.rb b/spec/services/issues/close_service_spec.rb
index 0e5ae724bf7..db547ce0d50 100644
--- a/spec/services/issues/close_service_spec.rb
+++ b/spec/services/issues/close_service_spec.rb
@@ -31,5 +31,15 @@ describe Issues::CloseService do
expect(note.note).to include "Status changed to closed"
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