summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2016-10-21 11:07:04 +0000
committerYorick Peterse <yorickpeterse@gmail.com>2016-10-21 11:07:04 +0000
commit60adbef4afb864bf5a19ce6e39dd8fe02ac99c0a (patch)
tree2d202dc58d13a6b65952ca20f1abfffb344c65c4
parente647af363706d181557e7652cacc19cd7c54dd59 (diff)
parent493367108eef14c8517c6d023ec46267c1e706cf (diff)
downloadgitlab-ce-60adbef4afb864bf5a19ce6e39dd8fe02ac99c0a.tar.gz
Merge branch '14192-issues-closed-by-merge-requests-using-metrics-data' into 'master'
Use MergeRequestsClosingIssues cache data on Issue#closed_by_merge_requests method See merge request !6996
-rw-r--r--CHANGELOG.md2
-rw-r--r--app/models/issue.rb8
-rw-r--r--spec/models/issue_spec.rb8
3 files changed, 16 insertions, 2 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 10446e02d1c..1c5c96c4528 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,8 @@ Please view this file on the master branch, on stable branches it's out of date.
- Simpler arguments passed to named_route on toggle_award_url helper method
- Fix: Backup restore doesn't clear cache
+ - Use MergeRequestsClosingIssues cache data on Issue#closed_by_merge_requests method
+
## 8.13.0 (2016-10-22)
- Fix save button on project pipeline settings page. (!6955)
diff --git a/app/models/issue.rb b/app/models/issue.rb
index 133a5993815..89158a50353 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -211,7 +211,13 @@ class Issue < ActiveRecord::Base
note.all_references(current_user, extractor: ext)
end
- ext.merge_requests.select { |mr| mr.open? && mr.closes_issue?(self) }
+ merge_requests = ext.merge_requests.select(&:open?)
+ if merge_requests.any?
+ ids = MergeRequestsClosingIssues.where(merge_request_id: merge_requests.map(&:id), issue_id: id).pluck(:merge_request_id)
+ merge_requests.select { |mr| mr.id.in?(ids) }
+ else
+ []
+ end
end
def moved?
diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb
index 3b8b743af2d..60d30eb7418 100644
--- a/spec/models/issue_spec.rb
+++ b/spec/models/issue_spec.rb
@@ -100,11 +100,17 @@ describe Issue, models: true do
end
it 'returns the merge request to close this issue' do
- allow(mr).to receive(:closes_issue?).with(issue).and_return(true)
+ mr
expect(issue.closed_by_merge_requests).to eq([mr])
end
+ it "returns an empty array when the merge request is closed already" do
+ closed_mr
+
+ expect(issue.closed_by_merge_requests).to eq([])
+ end
+
it "returns an empty array when the current issue is closed already" do
expect(closed_issue.closed_by_merge_requests).to eq([])
end