summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/merge_request.rb6
-rw-r--r--lib/gitlab/diff/diff_refs.rb6
2 files changed, 11 insertions, 1 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 1b6e898a7fd..95e41106b49 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -368,7 +368,11 @@ class MergeRequest < ActiveRecord::Base
end
def merge_request_diff_for(diff_refs)
- merge_request_diffs.viewable.select_without_diff.with_diff_refs(diff_refs).take
+ @merge_request_diffs_by_diff_refs ||= Hash.new do |h, diff_refs|
+ h[diff_refs] = merge_request_diffs.viewable.select_without_diff.with_diff_refs(diff_refs).take
+ end
+
+ @merge_request_diffs_by_diff_refs[diff_refs]
end
def reload_diff_if_branch_changed
diff --git a/lib/gitlab/diff/diff_refs.rb b/lib/gitlab/diff/diff_refs.rb
index 8406ca4269c..7948782aecc 100644
--- a/lib/gitlab/diff/diff_refs.rb
+++ b/lib/gitlab/diff/diff_refs.rb
@@ -18,6 +18,12 @@ module Gitlab
head_sha == other.head_sha
end
+ alias_method :eql?, :==
+
+ def hash
+ [base_sha, start_sha, head_sha].hash
+ end
+
# There is only one case in which we will have `start_sha` and `head_sha`,
# but not `base_sha`, which is when a diff is generated between an
# orphaned branch and another branch, which means there _is_ no base, but