diff options
author | Kim Carlbäcker <kim.carlbacker@gmail.com> | 2018-06-07 13:55:27 +0300 |
---|---|---|
committer | Kim Carlbäcker <kim.carlbacker@gmail.com> | 2018-06-07 13:55:27 +0300 |
commit | edebf1a1a8e65c4c41f149a9e5b0239970417699 (patch) | |
tree | eb7a294265c7ff7fbd8beef988aa0dd822006d38 | |
parent | ec6f155bfba06b2f1d9029ba0766dad231bb6ef3 (diff) | |
parent | 726d07cb415e82953a67fe713ce719ee49168166 (diff) |
Merge branch 'zj-unsupported-encoding' into 'master'
Reraise UnsupportedEncodingError as FailedPrecondition
See merge request gitlab-org/gitaly!718
-rw-r--r-- | changelogs/unreleased/zj-unsupported-encoding.yml | 5 | ||||
-rw-r--r-- | internal/service/conflicts/list_conflict_files_test.go | 33 | ||||
-rw-r--r-- | ruby/lib/gitaly_server/conflicts_service.rb | 10 |
3 files changed, 46 insertions, 2 deletions
diff --git a/changelogs/unreleased/zj-unsupported-encoding.yml b/changelogs/unreleased/zj-unsupported-encoding.yml new file mode 100644 index 000000000..a0aadb1ae --- /dev/null +++ b/changelogs/unreleased/zj-unsupported-encoding.yml @@ -0,0 +1,5 @@ +--- +title: Reraise UnsupportedEncodingError as FailedPrecondition +merge_request: 718 +author: +type: fixed diff --git a/internal/service/conflicts/list_conflict_files_test.go b/internal/service/conflicts/list_conflict_files_test.go index 993b49426..3454f9de7 100644 --- a/internal/service/conflicts/list_conflict_files_test.go +++ b/internal/service/conflicts/list_conflict_files_test.go @@ -112,7 +112,38 @@ func TestFailedListConflictFilesRequestDueToConflictSideMissing(t *testing.T) { TheirCommitOid: theirCommitOid, } - c, _ := client.ListConflictFiles(ctx, request) + c, err := client.ListConflictFiles(ctx, request) + require.NoError(t, err) + testhelper.RequireGrpcError(t, drainListConflictFilesResponse(c), codes.FailedPrecondition) +} + +func TestFailedListConflictFilesFailedPrecondition(t *testing.T) { + server, serverSocketPath := runConflictsServer(t) + defer server.Stop() + + client, conn := NewConflictsClient(t, serverSocketPath) + defer conn.Close() + + testRepo, _, cleanupFn := testhelper.NewTestRepo(t) + defer cleanupFn() + + // These commits have a conflict on the 'VERSION' file in the test repo. + // The conflict is expected to raise an encoding error. + ourCommitOid := "bd493d44ae3c4dd84ce89cb75be78c4708cbd548" + theirCommitOid := "7df99c9ad5b8c9bfc5ae4fb7a91cc87adcce02ef" + + ctx, cancel := testhelper.Context() + defer cancel() + + request := &pb.ListConflictFilesRequest{ + Repository: testRepo, + OurCommitOid: ourCommitOid, + TheirCommitOid: theirCommitOid, + } + + c, err := client.ListConflictFiles(ctx, request) + require.NoError(t, err) + testhelper.RequireGrpcError(t, drainListConflictFilesResponse(c), codes.FailedPrecondition) } diff --git a/ruby/lib/gitaly_server/conflicts_service.rb b/ruby/lib/gitaly_server/conflicts_service.rb index 0105c5e32..e44a7c7d8 100644 --- a/ruby/lib/gitaly_server/conflicts_service.rb +++ b/ruby/lib/gitaly_server/conflicts_service.rb @@ -14,7 +14,7 @@ module GitalyServer msg_size = 0 Enumerator.new do |y| - conflicts.each do |file| + enumerate_conflicts(conflicts) do |file| files << Gitaly::ConflictFile.new(header: conflict_file_header(file)) strio = StringIO.new(file.content) @@ -88,5 +88,13 @@ module GitalyServer our_mode: file.our_mode ) end + + def enumerate_conflicts(conflicts) + conflicts.each do |file| + yield file + end + rescue Gitlab::Git::Conflict::File::UnsupportedEncoding => e + raise GRPC::FailedPrecondition.new(e.message) + end end end |