Fix UTF-8 conversion issues when resolving conflicts
Similar to https://gitlab.com/gitlab-org/gitlab-ce/issues/63030, when the commit message in the /resolve_conflicts endpoint contains a UTF-8 character, the conversion to the Gitaly ASCII-8BIT value may flag an error. To fix this, we run `force_encoding` on the commit message. Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/63062
This commit is contained in:
parent
3017d2a52a
commit
1edf1807c5
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Fix UTF-8 conversion issues when resolving conflicts
|
||||||
|
merge_request: 29453
|
||||||
|
author:
|
||||||
|
type: fixed
|
|
@ -67,7 +67,7 @@ module Gitlab
|
||||||
their_commit_oid: @their_commit_oid,
|
their_commit_oid: @their_commit_oid,
|
||||||
source_branch: source_branch,
|
source_branch: source_branch,
|
||||||
target_branch: target_branch,
|
target_branch: target_branch,
|
||||||
commit_message: resolution.commit_message,
|
commit_message: encode_binary(resolution.commit_message),
|
||||||
user: Gitlab::Git::User.from_gitlab(resolution.user).to_gitaly
|
user: Gitlab::Git::User.from_gitlab(resolution.user).to_gitaly
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
|
@ -35,7 +35,7 @@ describe Gitlab::GitalyClient::ConflictsService do
|
||||||
end
|
end
|
||||||
let(:source_branch) { 'master' }
|
let(:source_branch) { 'master' }
|
||||||
let(:target_branch) { 'feature' }
|
let(:target_branch) { 'feature' }
|
||||||
let(:commit_message) { 'Solving conflicts' }
|
let(:commit_message) { 'Solving conflicts\n\nTést' }
|
||||||
let(:resolution) do
|
let(:resolution) do
|
||||||
Gitlab::Git::Conflict::Resolution.new(user, files, commit_message)
|
Gitlab::Git::Conflict::Resolution.new(user, files, commit_message)
|
||||||
end
|
end
|
||||||
|
@ -51,6 +51,18 @@ describe Gitlab::GitalyClient::ConflictsService do
|
||||||
subject
|
subject
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'handles commit messages with UTF-8 characters' do
|
||||||
|
allow(::Gitlab::GitalyClient).to receive(:call).and_call_original
|
||||||
|
expect(::Gitlab::GitalyClient).to receive(:call).with(anything, :conflicts_service, :resolve_conflicts, any_args) do |*args|
|
||||||
|
# Force the generation of request messages by iterating through the enumerator
|
||||||
|
args[3].to_a
|
||||||
|
|
||||||
|
double(resolution_error: nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
subject
|
||||||
|
end
|
||||||
|
|
||||||
it 'raises a relevant exception if resolution_error is present' do
|
it 'raises a relevant exception if resolution_error is present' do
|
||||||
expect_any_instance_of(Gitaly::ConflictsService::Stub).to receive(:resolve_conflicts)
|
expect_any_instance_of(Gitaly::ConflictsService::Stub).to receive(:resolve_conflicts)
|
||||||
.with(kind_of(Enumerator), kind_of(Hash)).and_return(double(resolution_error: "something happened"))
|
.with(kind_of(Enumerator), kind_of(Hash)).and_return(double(resolution_error: "something happened"))
|
||||||
|
|
Loading…
Reference in New Issue