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:
Diffstat (limited to 'internal/gitaly/service/operations/cherry_pick.go')
-rw-r--r--internal/gitaly/service/operations/cherry_pick.go149
1 files changed, 59 insertions, 90 deletions
diff --git a/internal/gitaly/service/operations/cherry_pick.go b/internal/gitaly/service/operations/cherry_pick.go
index 23b0566fd..8732f84cb 100644
--- a/internal/gitaly/service/operations/cherry_pick.go
+++ b/internal/gitaly/service/operations/cherry_pick.go
@@ -11,7 +11,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v15/internal/git/updateref"
"gitlab.com/gitlab-org/gitaly/v15/internal/git2go"
"gitlab.com/gitlab-org/gitaly/v15/internal/helper"
- "gitlab.com/gitlab-org/gitaly/v15/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/v15/proto/go/gitalypb"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
@@ -64,62 +63,43 @@ func (s *Server) UserCherryPick(ctx context.Context, req *gitalypb.UserCherryPic
Mainline: mainline,
})
if err != nil {
- if featureflag.CherryPickStructuredErrors.IsEnabled(ctx) {
- var conflictErr git2go.ConflictingFilesError
- var emptyErr git2go.EmptyError
-
- switch {
- case errors.As(err, &conflictErr):
- conflictingFiles := make([][]byte, 0, len(conflictErr.ConflictingFiles))
- for _, conflictingFile := range conflictErr.ConflictingFiles {
- conflictingFiles = append(conflictingFiles, []byte(conflictingFile))
- }
-
- detailedErr, errGeneratingDetailedErr := helper.ErrWithDetails(
- helper.ErrFailedPreconditionf("cherry pick: %w", err),
- &gitalypb.UserCherryPickError{
- Error: &gitalypb.UserCherryPickError_CherryPickConflict{
- CherryPickConflict: &gitalypb.MergeConflictError{
- ConflictingFiles: conflictingFiles,
- },
+ var conflictErr git2go.ConflictingFilesError
+ var emptyErr git2go.EmptyError
+
+ switch {
+ case errors.As(err, &conflictErr):
+ conflictingFiles := make([][]byte, 0, len(conflictErr.ConflictingFiles))
+ for _, conflictingFile := range conflictErr.ConflictingFiles {
+ conflictingFiles = append(conflictingFiles, []byte(conflictingFile))
+ }
+
+ detailedErr, errGeneratingDetailedErr := helper.ErrWithDetails(
+ helper.ErrFailedPreconditionf("cherry pick: %w", err),
+ &gitalypb.UserCherryPickError{
+ Error: &gitalypb.UserCherryPickError_CherryPickConflict{
+ CherryPickConflict: &gitalypb.MergeConflictError{
+ ConflictingFiles: conflictingFiles,
},
},
- )
- if errGeneratingDetailedErr != nil {
- return nil, helper.ErrInternalf("error details: %w", err)
- }
-
- return nil, detailedErr
- case errors.As(err, &emptyErr):
- detailedErr, errGeneratingDetailedErr := helper.ErrWithDetails(
- helper.ErrFailedPrecondition(err),
- &gitalypb.UserCherryPickError{
- Error: &gitalypb.UserCherryPickError_ChangesAlreadyApplied{},
- },
- )
- if errGeneratingDetailedErr != nil {
- return nil, helper.ErrInternalf("error details: %w", err)
- }
-
- return nil, detailedErr
- case errors.Is(err, git2go.ErrInvalidArgument):
- return nil, helper.ErrInvalidArgument(err)
- default:
- return nil, helper.ErrInternalf("cherry-pick command: %w", err)
+ },
+ )
+ if errGeneratingDetailedErr != nil {
+ return nil, helper.ErrInternalf("error details: %w", err)
}
- }
- switch {
- case errors.As(err, &git2go.HasConflictsError{}) || errors.As(err, &git2go.ConflictingFilesError{}):
- return &gitalypb.UserCherryPickResponse{
- CreateTreeError: err.Error(),
- CreateTreeErrorCode: gitalypb.UserCherryPickResponse_CONFLICT,
- }, nil
- case errors.As(err, &git2go.EmptyError{}):
- return &gitalypb.UserCherryPickResponse{
- CreateTreeError: err.Error(),
- CreateTreeErrorCode: gitalypb.UserCherryPickResponse_EMPTY,
- }, nil
+ return nil, detailedErr
+ case errors.As(err, &emptyErr):
+ detailedErr, errGeneratingDetailedErr := helper.ErrWithDetails(
+ helper.ErrFailedPrecondition(err),
+ &gitalypb.UserCherryPickError{
+ Error: &gitalypb.UserCherryPickError_ChangesAlreadyApplied{},
+ },
+ )
+ if errGeneratingDetailedErr != nil {
+ return nil, helper.ErrInternalf("error details: %w", err)
+ }
+
+ return nil, detailedErr
case errors.Is(err, git2go.ErrInvalidArgument):
return nil, helper.ErrInvalidArgument(err)
default:
@@ -148,57 +128,46 @@ func (s *Server) UserCherryPick(ctx context.Context, req *gitalypb.UserCherryPic
return nil, err
}
if !ancestor {
- if featureflag.CherryPickStructuredErrors.IsEnabled(ctx) {
- detailedErr, errGeneratingDetailedErr := helper.ErrWithDetails(
- helper.ErrFailedPrecondition(errors.New("cherry-pick: branch diverged")),
- &gitalypb.UserCherryPickError{
- Error: &gitalypb.UserCherryPickError_TargetBranchDiverged{
- TargetBranchDiverged: &gitalypb.NotAncestorError{
- ParentRevision: []byte(oldrev.Revision()),
- ChildRevision: []byte(newrev),
- },
+ detailedErr, errGeneratingDetailedErr := helper.ErrWithDetails(
+ helper.ErrFailedPrecondition(errors.New("cherry-pick: branch diverged")),
+ &gitalypb.UserCherryPickError{
+ Error: &gitalypb.UserCherryPickError_TargetBranchDiverged{
+ TargetBranchDiverged: &gitalypb.NotAncestorError{
+ ParentRevision: []byte(oldrev.Revision()),
+ ChildRevision: []byte(newrev),
},
- })
-
- if errGeneratingDetailedErr != nil {
- return nil, helper.ErrInternalf("error details: %w", err)
- }
+ },
+ })
- return nil, detailedErr
+ if errGeneratingDetailedErr != nil {
+ return nil, helper.ErrInternalf("error details: %w", err)
}
- return &gitalypb.UserCherryPickResponse{
- CommitError: "Branch diverged",
- }, nil
+ return nil, detailedErr
}
}
if err := s.updateReferenceWithHooks(ctx, req.GetRepository(), req.User, quarantineDir, referenceName, newrev, oldrev); err != nil {
- if featureflag.CherryPickStructuredErrors.IsEnabled(ctx) {
- var customHookErr updateref.CustomHookError
-
- if errors.As(err, &customHookErr) {
- detailedErr, errGeneratingDetailedErr := helper.ErrWithDetails(
- helper.ErrFailedPrecondition(errors.New("access check failed")),
- &gitalypb.UserCherryPickError{
- Error: &gitalypb.UserCherryPickError_AccessCheck{
- AccessCheck: &gitalypb.AccessCheckError{
- ErrorMessage: strings.TrimSuffix(customHookErr.Error(), "\n"),
- },
- },
- })
+ var customHookErr updateref.CustomHookError
- if errGeneratingDetailedErr != nil {
- return nil, helper.ErrInternalf("error details: %w", err)
- }
+ if errors.As(err, &customHookErr) {
+ detailedErr, errGeneratingDetailedErr := helper.ErrWithDetails(
+ helper.ErrFailedPrecondition(errors.New("access check failed")),
+ &gitalypb.UserCherryPickError{
+ Error: &gitalypb.UserCherryPickError_AccessCheck{
+ AccessCheck: &gitalypb.AccessCheckError{
+ ErrorMessage: strings.TrimSuffix(customHookErr.Error(), "\n"),
+ },
+ },
+ })
- return nil, detailedErr
+ if errGeneratingDetailedErr != nil {
+ return nil, helper.ErrInternalf("error details: %w", err)
}
- return nil, fmt.Errorf("update reference with hooks: %w", err)
+ return nil, detailedErr
}
- var customHookErr updateref.CustomHookError
if errors.As(err, &customHookErr) {
return &gitalypb.UserCherryPickResponse{
PreReceiveError: customHookErr.Error(),