diff options
author | Kim Carlbäcker <kim.carlbacker@gmail.com> | 2018-03-23 19:45:00 +0300 |
---|---|---|
committer | Kim Carlbäcker <kim.carlbacker@gmail.com> | 2018-03-23 19:45:00 +0300 |
commit | 9e8f2afabf3af0a039c994f803373a634d68ead8 (patch) | |
tree | 5d3889e04ce90b93a27a7d629803511e3a07b3af | |
parent | 1fb1a41ea32de954868f30361298aa130a18d99e (diff) | |
parent | 50f469635e4933ce575be09f7754dfcd754c417f (diff) |
Merge branch 'fix/encoding-error-in-list-conflict-files' into 'master'
Fix encoding error in ListConflictFiles
Closes #1107
See merge request gitlab-org/gitaly!639
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | internal/service/conflicts/list_conflict_files_test.go | 59 | ||||
-rw-r--r-- | ruby/lib/gitaly_server/conflicts_service.rb | 4 |
3 files changed, 46 insertions, 19 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e6d2ff0a..897e05e55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ UNRELEASED +- Fix encoding error in ListConflictFiles + https://gitlab.com/gitlab-org/gitaly/merge_requests/639 - Add catfile convenience methods https://gitlab.com/gitlab-org/gitaly/merge_requests/638 - Server implementation FindRemoteRepository diff --git a/internal/service/conflicts/list_conflict_files_test.go b/internal/service/conflicts/list_conflict_files_test.go index 184cc3312..e9013f7cf 100644 --- a/internal/service/conflicts/list_conflict_files_test.go +++ b/internal/service/conflicts/list_conflict_files_test.go @@ -27,9 +27,16 @@ func TestSuccessfulListConflictFilesRequest(t *testing.T) { testRepo, _, cleanupFn := testhelper.NewTestRepo(t) defer cleanupFn() - ourCommitOid := "0b4bc9a49b562e85de7cc9e834518ea6828729b9" - theirCommitOid := "bb5206fee213d983da88c47f9cf4cc6caf9c66dc" - conflictContent := `<<<<<<< files/ruby/feature.rb + ourCommitOid := "1a35b5a77cf6af7edf6703f88e82f6aff613666f" + theirCommitOid := "8309e68585b28d61eb85b7e2834849dda6bf1733" + + conflictContent1 := `<<<<<<< encoding/codagé +Content is not important, file name is +======= +Content can be important, but here, file name is of utmost importance +>>>>>>> encoding/codagé +` + conflictContent2 := `<<<<<<< files/ruby/feature.rb class Feature def foo puts 'bar' @@ -56,15 +63,31 @@ end t.Fatal(err) } - files := getConflictFiles(t, c) - require.Len(t, files, 1) + expectedFiles := []*conflictFile{ + { + header: &pb.ConflictFileHeader{ + Repository: testRepo, + CommitOid: ourCommitOid, + OurMode: int32(0100644), + OurPath: []byte("encoding/codagé"), + TheirPath: []byte("encoding/codagé"), + }, + content: []byte(conflictContent1), + }, + { + header: &pb.ConflictFileHeader{ + Repository: testRepo, + CommitOid: ourCommitOid, + OurMode: int32(0100644), + OurPath: []byte("files/ruby/feature.rb"), + TheirPath: []byte("files/ruby/feature.rb"), + }, + content: []byte(conflictContent2), + }, + } - file := files[0] - require.Equal(t, ourCommitOid, file.header.CommitOid) - require.Equal(t, int32(0100644), file.header.OurMode) - require.Equal(t, "files/ruby/feature.rb", string(file.header.OurPath)) - require.Equal(t, "files/ruby/feature.rb", string(file.header.TheirPath)) - require.Equal(t, conflictContent, string(file.content)) + receivedFiles := getConflictFiles(t, c) + require.Equal(t, expectedFiles, receivedFiles) } func TestFailedListConflictFilesRequestDueToConflictSideMissing(t *testing.T) { @@ -151,9 +174,10 @@ func TestFailedListConflictFilesRequestDueToValidation(t *testing.T) { } } -func getConflictFiles(t *testing.T, c pb.ConflictsService_ListConflictFilesClient) []conflictFile { - files := []conflictFile{} - currentFile := conflictFile{} +func getConflictFiles(t *testing.T, c pb.ConflictsService_ListConflictFilesClient) []*conflictFile { + files := []*conflictFile{} + var currentFile *conflictFile + for { r, err := c.Recv() if err == io.EOF { @@ -161,21 +185,22 @@ func getConflictFiles(t *testing.T, c pb.ConflictsService_ListConflictFilesClien } else if err != nil { t.Fatal(err) } + for _, file := range r.GetFiles() { // If there's a header this is the beginning of a new file if header := file.GetHeader(); header != nil { - // Save previous file, except on the first iteration - if len(files) > 0 { + if currentFile != nil { files = append(files, currentFile) } - currentFile = conflictFile{header: header} + currentFile = &conflictFile{header: header} } else { // Append to current file's content currentFile.content = append(currentFile.content, file.GetContent()...) } } } + // Append leftover file files = append(files, currentFile) diff --git a/ruby/lib/gitaly_server/conflicts_service.rb b/ruby/lib/gitaly_server/conflicts_service.rb index 2a7f95880..0105c5e32 100644 --- a/ruby/lib/gitaly_server/conflicts_service.rb +++ b/ruby/lib/gitaly_server/conflicts_service.rb @@ -83,8 +83,8 @@ module GitalyServer Gitaly::ConflictFileHeader.new( repository: file.repository.gitaly_repository, commit_oid: file.commit_oid, - their_path: file.their_path, - our_path: file.our_path, + their_path: file.their_path.b, + our_path: file.our_path.b, our_mode: file.our_mode ) end |