Commit 610155e0 authored by Douwe Maan's avatar Douwe Maan

Merge branch 'fix-old-mr-diffs' into 'master'

Fix old MR diffs

Closes #36516

See merge request !13744
parents 43238a40 e8525e10
---
title: Show un-highlighted text diffs when we do not have references to the correct
blobs
merge_request:
author:
type: fixed
...@@ -186,7 +186,10 @@ module Gitlab ...@@ -186,7 +186,10 @@ module Gitlab
end end
def content_changed? def content_changed?
old_blob && new_blob && old_blob.id != new_blob.id return blobs_changed? if diff_refs
return false if new_file? || deleted_file? || renamed_file?
text? && diff_lines.any?
end end
def different_type? def different_type?
...@@ -225,6 +228,10 @@ module Gitlab ...@@ -225,6 +228,10 @@ module Gitlab
private private
def blobs_changed?
old_blob && new_blob && old_blob.id != new_blob.id
end
def simple_viewer_class def simple_viewer_class
return DiffViewer::NotDiffable unless diffable? return DiffViewer::NotDiffable unless diffable?
...@@ -250,6 +257,8 @@ module Gitlab ...@@ -250,6 +257,8 @@ module Gitlab
DiffViewer::Renamed DiffViewer::Renamed
elsif mode_changed? elsif mode_changed?
DiffViewer::ModeChanged DiffViewer::ModeChanged
else
DiffViewer::NoPreview
end end
end end
......
...@@ -15,6 +15,17 @@ describe Gitlab::Diff::File do ...@@ -15,6 +15,17 @@ describe Gitlab::Diff::File do
it { expect(diff_lines.first).to be_kind_of(Gitlab::Diff::Line) } it { expect(diff_lines.first).to be_kind_of(Gitlab::Diff::Line) }
end end
describe '#highlighted_diff_lines' do
it 'highlights the diff and memoises the result' do
expect(Gitlab::Diff::Highlight).to receive(:new)
.with(diff_file, repository: project.repository)
.once
.and_call_original
diff_file.highlighted_diff_lines
end
end
describe '#mode_changed?' do describe '#mode_changed?' do
it { expect(diff_file.mode_changed?).to be_falsey } it { expect(diff_file.mode_changed?).to be_falsey }
end end
...@@ -122,8 +133,20 @@ describe Gitlab::Diff::File do ...@@ -122,8 +133,20 @@ describe Gitlab::Diff::File do
let(:commit) { project.commit('2f63565e7aac07bcdadb654e253078b727143ec4') } let(:commit) { project.commit('2f63565e7aac07bcdadb654e253078b727143ec4') }
let(:diff_file) { commit.diffs.diff_file_with_new_path('files/images/6049019_460s.jpg') } let(:diff_file) { commit.diffs.diff_file_with_new_path('files/images/6049019_460s.jpg') }
it 'returns true' do context 'when the blobs are different' do
expect(diff_file.content_changed?).to be_truthy it 'returns true' do
expect(diff_file.content_changed?).to be_truthy
end
end
context 'when there are no diff refs' do
before do
allow(diff_file).to receive(:diff_refs).and_return(nil)
end
it 'returns false' do
expect(diff_file.content_changed?).to be_falsey
end
end end
end end
...@@ -131,8 +154,20 @@ describe Gitlab::Diff::File do ...@@ -131,8 +154,20 @@ describe Gitlab::Diff::File do
let(:commit) { project.commit('570e7b2abdd848b95f2f578043fc23bd6f6fd24d') } let(:commit) { project.commit('570e7b2abdd848b95f2f578043fc23bd6f6fd24d') }
let(:diff_file) { commit.diffs.diff_file_with_new_path('files/ruby/popen.rb') } let(:diff_file) { commit.diffs.diff_file_with_new_path('files/ruby/popen.rb') }
it 'returns true' do context 'when the blobs are different' do
expect(diff_file.content_changed?).to be_truthy it 'returns true' do
expect(diff_file.content_changed?).to be_truthy
end
end
context 'when there are no diff refs' do
before do
allow(diff_file).to receive(:diff_refs).and_return(nil)
end
it 'returns true' do
expect(diff_file.content_changed?).to be_truthy
end
end end
end end
end end
...@@ -270,6 +305,21 @@ describe Gitlab::Diff::File do ...@@ -270,6 +305,21 @@ describe Gitlab::Diff::File do
expect(diff_file.simple_viewer).to be_a(DiffViewer::ModeChanged) expect(diff_file.simple_viewer).to be_a(DiffViewer::ModeChanged)
end end
end end
context 'when no other conditions apply' do
before do
allow(diff_file).to receive(:content_changed?).and_return(false)
allow(diff_file).to receive(:new_file?).and_return(false)
allow(diff_file).to receive(:deleted_file?).and_return(false)
allow(diff_file).to receive(:renamed_file?).and_return(false)
allow(diff_file).to receive(:mode_changed?).and_return(false)
allow(diff_file).to receive(:raw_text?).and_return(false)
end
it 'returns a No Preview viewer' do
expect(diff_file.simple_viewer).to be_a(DiffViewer::NoPreview)
end
end
end end
describe '#rich_viewer' do describe '#rich_viewer' do
......
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