1package git2go 2 3import ( 4 "bytes" 5 "context" 6 "encoding/gob" 7 "fmt" 8 9 "gitlab.com/gitlab-org/gitaly/v14/internal/git/conflict" 10 "gitlab.com/gitlab-org/gitaly/v14/internal/git/repository" 11) 12 13// ResolveCommand contains arguments to perform a merge commit and resolve any 14// conflicts produced from that merge commit 15type ResolveCommand struct { 16 MergeCommand 17 Resolutions []conflict.Resolution 18} 19 20// ResolveResult returns information about the successful merge and resolution 21type ResolveResult struct { 22 MergeResult 23} 24 25// Resolve will attempt merging and resolving conflicts for the provided request 26func (b Executor) Resolve(ctx context.Context, repo repository.GitRepo, r ResolveCommand) (ResolveResult, error) { 27 if err := r.verify(); err != nil { 28 return ResolveResult{}, fmt.Errorf("resolve: %w: %s", ErrInvalidArgument, err.Error()) 29 } 30 31 input := &bytes.Buffer{} 32 if err := gob.NewEncoder(input).Encode(r); err != nil { 33 return ResolveResult{}, fmt.Errorf("resolve: %w", err) 34 } 35 36 stdout, err := b.run(ctx, repo, input, "resolve") 37 if err != nil { 38 return ResolveResult{}, err 39 } 40 41 var response ResolveResult 42 if err := gob.NewDecoder(stdout).Decode(&response); err != nil { 43 return ResolveResult{}, fmt.Errorf("resolve: %w", err) 44 } 45 46 return response, nil 47} 48