Skip to content
Snippets Groups Projects
Commit d02ee542 authored by Nick Thomas's avatar Nick Thomas
Browse files

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
parents 6d437bc7 ce46b402
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -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
Loading
Loading
---
title: Fix encoding error in MR diffs when using external diffs
merge_request: 32862
author: Hiroyuki Sato
type: fixed
Loading
Loading
@@ -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
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
 
it 'unpacks from base 64' do
expect(subject.diff).to eq(unpacked)
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 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 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
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment