Commit 202c100d authored by Douwe Maan's avatar Douwe Maan

Merge branch 'osw-use-cached-highlighted-content-for-discussions' into 'master'

Use persisted diff data instead fetching Git on discussions

Closes #44052

See merge request gitlab-org/gitlab-ce!18657
parents 1134f540 be8a320b
...@@ -54,7 +54,20 @@ class DiffNote < Note ...@@ -54,7 +54,20 @@ class DiffNote < Note
end end
def diff_file def diff_file
@diff_file ||= self.original_position.diff_file(self.project.repository) @diff_file ||=
begin
if created_at_diff?(noteable.diff_refs)
# We're able to use the already persisted diffs (Postgres) if we're
# presenting a "current version" of the MR discussion diff.
# So no need to make an extra Gitaly diff request for it.
# As an extra benefit, the returned `diff_file` already
# has `highlighted_diff_lines` data set from Redis on
# `Diff::FileCollection::MergeRequestDiff`.
noteable.diffs(paths: original_position.paths, expanded: true).diff_files.first
else
original_position.diff_file(self.project.repository)
end
end
end end
def diff_line def diff_line
......
---
title: Use persisted diff data instead fetching Git on discussions
merge_request:
author:
type: performance
...@@ -36,6 +36,8 @@ module Gitlab ...@@ -36,6 +36,8 @@ module Gitlab
private private
def decorate_diff!(diff) def decorate_diff!(diff)
return diff if diff.is_a?(File)
Gitlab::Diff::File.new(diff, repository: project.repository, diff_refs: diff_refs, fallback_diff_refs: fallback_diff_refs) Gitlab::Diff::File.new(diff, repository: project.repository, diff_refs: diff_refs, fallback_diff_refs: fallback_diff_refs)
end end
end end
......
...@@ -85,7 +85,8 @@ describe DiffNote do ...@@ -85,7 +85,8 @@ describe DiffNote do
end end
describe "#diff_file" do describe "#diff_file" do
it "returns the correct diff file" do context 'when the discussion was created in the diff' do
it 'returns correct diff file' do
diff_file = subject.diff_file diff_file = subject.diff_file
expect(diff_file.old_path).to eq(position.old_path) expect(diff_file.old_path).to eq(position.old_path)
...@@ -94,6 +95,28 @@ describe DiffNote do ...@@ -94,6 +95,28 @@ describe DiffNote do
end end
end end
context 'when discussion is outdated or not created in the diff' do
let(:diff_refs) { project.commit(sample_commit.id).diff_refs }
let(:position) do
Gitlab::Diff::Position.new(
old_path: "files/ruby/popen.rb",
new_path: "files/ruby/popen.rb",
old_line: nil,
new_line: 14,
diff_refs: diff_refs
)
end
it 'returns the correct diff file' do
diff_file = subject.diff_file
expect(diff_file.old_path).to eq(position.old_path)
expect(diff_file.new_path).to eq(position.new_path)
expect(diff_file.diff_refs).to eq(position.diff_refs)
end
end
end
describe "#diff_line" do describe "#diff_line" do
it "returns the correct diff line" do it "returns the correct diff line" do
diff_line = subject.diff_line diff_line = subject.diff_line
......
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