diff options
author | Patrick Steinhardt <psteinhardt@gitlab.com> | 2023-01-26 13:21:18 +0300 |
---|---|---|
committer | Patrick Steinhardt <psteinhardt@gitlab.com> | 2023-01-26 13:21:18 +0300 |
commit | 6d228addeac5e159eaf89ce54aa523f71e336a29 (patch) | |
tree | cb188a538022ff5fa0df38e42a60b6c88c8a16de | |
parent | 0c13491e1ad7330e5d6151c043e3ca7967f212b6 (diff) | |
parent | 98b0027d4791b4e9d3c87f36e80436dc65245de9 (diff) |
Merge branch 'sh-fix-resolve-conflicts-git2go-segfault' into 'master'
conflicts: Fix nil pointer access when conflict has no ancestor
See merge request https://gitlab.com/gitlab-org/gitaly/-/merge_requests/5283
Merged-by: Patrick Steinhardt <psteinhardt@gitlab.com>
Approved-by: Patrick Steinhardt <psteinhardt@gitlab.com>
Reviewed-by: Patrick Steinhardt <psteinhardt@gitlab.com>
Co-authored-by: Stan Hu <stanhu@gmail.com>
-rw-r--r-- | cmd/gitaly-git2go/resolve_conflicts.go | 2 | ||||
-rw-r--r-- | internal/gitaly/service/conflicts/resolve_conflicts_test.go | 29 |
2 files changed, 26 insertions, 5 deletions
diff --git a/cmd/gitaly-git2go/resolve_conflicts.go b/cmd/gitaly-git2go/resolve_conflicts.go index d8002e31b..56a35bd9d 100644 --- a/cmd/gitaly-git2go/resolve_conflicts.go +++ b/cmd/gitaly-git2go/resolve_conflicts.go @@ -128,7 +128,7 @@ func (cmd resolveSubcommand) Run(_ context.Context, decoder *gob.Decoder, encode their, ) if err != nil { - return fmt.Errorf("parse conflict for %q: %w", c.Ancestor.Path, err) + return fmt.Errorf("parse conflict for %q: %w", c.Our.Path, err) } resolvedBlob, err := conflictFile.Resolve(r) diff --git a/internal/gitaly/service/conflicts/resolve_conflicts_test.go b/internal/gitaly/service/conflicts/resolve_conflicts_test.go index f4a89660c..5efe7f6b9 100644 --- a/internal/gitaly/service/conflicts/resolve_conflicts_test.go +++ b/internal/gitaly/service/conflicts/resolve_conflicts_test.go @@ -283,6 +283,7 @@ func TestResolveConflictsLineEndings(t *testing.T) { theirContent string resolutions []map[string]interface{} expectedContents string + expectedError string }{ { desc: "only newline", @@ -336,6 +337,21 @@ func TestResolveConflictsLineEndings(t *testing.T) { }, expectedContents: "A\nB", }, + { + desc: "conflict with existing conflict markers", + ourContent: "<<<<<<< HEAD\nA\nB\n=======", + theirContent: "X\nB", + resolutions: []map[string]interface{}{ + { + "old_path": "file.txt", + "new_path": "file.txt", + "sections": map[string]string{ + "5436437fa01a7d3e41d46741da54b451446774ca_1_1": "head", + }, + }, + }, + expectedError: `resolve: parse conflict for "file.txt": unexpected conflict delimiter`, + }, } { t.Run(tc.desc, func(t *testing.T) { ourOID := gittest.WriteBlob(t, cfg, repoPath, []byte(tc.ourContent)) @@ -381,11 +397,16 @@ func TestResolveConflictsLineEndings(t *testing.T) { })) response, err := stream.CloseAndRecv() - require.NoError(t, err) - require.Empty(t, response.GetResolutionError()) - oursFile := gittest.Exec(t, cfg, "-C", repoPath, "cat-file", "-p", "refs/heads/ours:file.txt") - require.Equal(t, []byte(tc.expectedContents), oursFile) + if tc.expectedError == "" { + require.NoError(t, err) + require.Empty(t, response.GetResolutionError()) + + oursFile := gittest.Exec(t, cfg, "-C", repoPath, "cat-file", "-p", "refs/heads/ours:file.txt") + require.Equal(t, []byte(tc.expectedContents), oursFile) + } else { + require.Equal(t, status.Error(codes.Internal, tc.expectedError), err) + } }) } } |