Merge branch '61841-fix-encoding-error-in-mr-diffs' into 'master'
Fix encoding error in MR diffs Closes #61841 See merge request gitlab-org/gitlab-ce!32862
This commit is contained in:
commit
d02ee542b4
|
@ -17,7 +17,7 @@ class MergeRequestDiffFile < ApplicationRecord
|
|||
if merge_request_diff&.stored_externally?
|
||||
merge_request_diff.opening_external_diff do |file|
|
||||
file.seek(external_diff_offset)
|
||||
file.read(external_diff_size)
|
||||
force_encode_utf8(file.read(external_diff_size))
|
||||
end
|
||||
else
|
||||
super
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Fix encoding error in MR diffs when using external diffs
|
||||
merge_request: 32862
|
||||
author: Hiroyuki Sato
|
||||
type: fixed
|
|
@ -4,26 +4,59 @@ require 'spec_helper'
|
|||
|
||||
describe MergeRequestDiffFile do
|
||||
describe '#diff' do
|
||||
let(:unpacked) { 'unpacked' }
|
||||
let(:packed) { [unpacked].pack('m0') }
|
||||
context 'when diff is not stored' do
|
||||
let(:unpacked) { 'unpacked' }
|
||||
let(:packed) { [unpacked].pack('m0') }
|
||||
|
||||
before do
|
||||
subject.diff = packed
|
||||
end
|
||||
|
||||
context 'when the diff is marked as binary' do
|
||||
before do
|
||||
subject.binary = true
|
||||
subject.diff = packed
|
||||
end
|
||||
|
||||
it 'unpacks from base 64' do
|
||||
expect(subject.diff).to eq(unpacked)
|
||||
context 'when the diff is marked as binary' do
|
||||
before do
|
||||
subject.binary = true
|
||||
end
|
||||
|
||||
it 'unpacks from base 64' do
|
||||
expect(subject.diff).to eq(unpacked)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the diff is not marked as binary' do
|
||||
it 'returns the raw diff' do
|
||||
expect(subject.diff).to eq(packed)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the diff is not marked as binary' do
|
||||
it 'returns the raw diff' do
|
||||
expect(subject.diff).to eq(packed)
|
||||
context 'when diff is stored in DB' do
|
||||
let(:file) { create(:merge_request).merge_request_diff.merge_request_diff_files.first }
|
||||
|
||||
it 'returns UTF-8 string' do
|
||||
expect(file.diff.encoding).to eq Encoding::UTF_8
|
||||
end
|
||||
end
|
||||
|
||||
context 'when diff is stored in external storage' do
|
||||
let(:file) { create(:merge_request).merge_request_diff.merge_request_diff_files.first }
|
||||
let(:test_dir) { 'tmp/tests/external-diffs' }
|
||||
|
||||
around do |example|
|
||||
FileUtils.mkdir_p(test_dir)
|
||||
|
||||
begin
|
||||
example.run
|
||||
ensure
|
||||
FileUtils.rm_rf(test_dir)
|
||||
end
|
||||
end
|
||||
|
||||
before do
|
||||
stub_external_diffs_setting(enabled: true, storage_path: test_dir)
|
||||
end
|
||||
|
||||
it 'returns UTF-8 string' do
|
||||
expect(file.diff.encoding).to eq Encoding::UTF_8
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue