Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Steinhardt <psteinhardt@gitlab.com>2023-01-26 13:21:18 +0300
committerPatrick Steinhardt <psteinhardt@gitlab.com>2023-01-26 13:21:18 +0300
commit6d228addeac5e159eaf89ce54aa523f71e336a29 (patch)
treecb188a538022ff5fa0df38e42a60b6c88c8a16de
parent0c13491e1ad7330e5d6151c043e3ca7967f212b6 (diff)
parent98b0027d4791b4e9d3c87f36e80436dc65245de9 (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.go2
-rw-r--r--internal/gitaly/service/conflicts/resolve_conflicts_test.go29
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)
+ }
})
}
}