diff options
author | Pavlo Strokov <pstrokov@gitlab.com> | 2022-09-27 10:57:55 +0300 |
---|---|---|
committer | Pavlo Strokov <pstrokov@gitlab.com> | 2022-10-24 09:24:30 +0300 |
commit | ac0da93073f74c7c9b304a4f4dc05e94e9aa177e (patch) | |
tree | 23e8b81a0e3aa110657ad742226b644fd89776d9 | |
parent | dc48de301efdc8f1cf0e81111ade7f750dc7c246 (diff) |
ref: Standardization of errors creation
Replace usage of status.Errorf() with helper.Err<StatusCode>f() to
make error creation more standard.
Return pre-defined ErrEmptyRepository instead of ad-hoc created
error.
Replace old %v with new %w for proper error wrapping.
Replace fmt.Errorf() with errors.New() if used without a reason.
Remove redundant prefix from error returned by RPC call.
Return Internal code in case of an unexpected operation
failure instead of Undefined by using helper.ErrInternal().
Add context to the error to make it more descriptive and standard.
Check error type to convert it to the corresponding error code.
18 files changed, 66 insertions, 71 deletions
diff --git a/internal/gitaly/service/ref/branches.go b/internal/gitaly/service/ref/branches.go index e99c62f44..d3c96f397 100644 --- a/internal/gitaly/service/ref/branches.go +++ b/internal/gitaly/service/ref/branches.go @@ -8,8 +8,6 @@ import ( "gitlab.com/gitlab-org/gitaly/v15/internal/git" "gitlab.com/gitlab-org/gitaly/v15/internal/helper" "gitlab.com/gitlab-org/gitaly/v15/proto/go/gitalypb" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" ) func (s *server) FindBranch(ctx context.Context, req *gitalypb.FindBranchRequest) (*gitalypb.FindBranchResponse, error) { @@ -17,7 +15,7 @@ func (s *server) FindBranch(ctx context.Context, req *gitalypb.FindBranchRequest return nil, helper.ErrInvalidArgument(gitalyerrors.ErrEmptyRepository) } if len(req.GetName()) == 0 { - return nil, status.Errorf(codes.InvalidArgument, "Branch name cannot be empty") + return nil, helper.ErrInvalidArgumentf("Branch name cannot be empty") } repo := s.localrepo(req.GetRepository()) @@ -37,7 +35,7 @@ func (s *server) FindBranch(ctx context.Context, req *gitalypb.FindBranchRequest branch, ok := branchName.Branch() if !ok { - return nil, status.Errorf(codes.InvalidArgument, "reference is not a branch") + return nil, helper.ErrInvalidArgumentf("reference is not a branch") } return &gitalypb.FindBranchResponse{ diff --git a/internal/gitaly/service/ref/delete_refs.go b/internal/gitaly/service/ref/delete_refs.go index 9ac06d48e..2d0a979f7 100644 --- a/internal/gitaly/service/ref/delete_refs.go +++ b/internal/gitaly/service/ref/delete_refs.go @@ -15,13 +15,11 @@ import ( "gitlab.com/gitlab-org/gitaly/v15/internal/metadata/featureflag" "gitlab.com/gitlab-org/gitaly/v15/internal/transaction/voting" "gitlab.com/gitlab-org/gitaly/v15/proto/go/gitalypb" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" ) func (s *server) DeleteRefs(ctx context.Context, in *gitalypb.DeleteRefsRequest) (*gitalypb.DeleteRefsResponse, error) { if err := validateDeleteRefRequest(in); err != nil { - return nil, status.Errorf(codes.InvalidArgument, "DeleteRefs: %v", err) + return nil, helper.ErrInvalidArgument(err) } repo := s.localrepo(in.GetRepository()) @@ -79,7 +77,7 @@ func (s *server) DeleteRefs(ctx context.Context, in *gitalypb.DeleteRefsRequest) } if _, err := voteHash.Write([]byte(ref.String() + "\n")); err != nil { - return nil, helper.ErrInternalf("could not update vote hash: %v", err) + return nil, helper.ErrInternalf("could not update vote hash: %w", err) } } @@ -114,7 +112,7 @@ func (s *server) DeleteRefs(ctx context.Context, in *gitalypb.DeleteRefsRequest) vote, err := voteHash.Vote() if err != nil { - return nil, helper.ErrInternalf("could not compute vote: %v", err) + return nil, helper.ErrInternalf("could not compute vote: %w", err) } // All deletes we're doing in this RPC are force deletions. Because we're required to filter @@ -187,22 +185,22 @@ func validateDeleteRefRequest(req *gitalypb.DeleteRefsRequest) error { } if len(req.ExceptWithPrefix) > 0 && len(req.Refs) > 0 { - return fmt.Errorf("ExceptWithPrefix and Refs are mutually exclusive") + return errors.New("ExceptWithPrefix and Refs are mutually exclusive") } if len(req.ExceptWithPrefix) == 0 && len(req.Refs) == 0 { // You can't delete all refs - return fmt.Errorf("empty ExceptWithPrefix and Refs") + return errors.New("empty ExceptWithPrefix and Refs") } for _, prefix := range req.ExceptWithPrefix { if len(prefix) == 0 { - return fmt.Errorf("empty prefix for exclusion") + return errors.New("empty prefix for exclusion") } } for _, ref := range req.Refs { if len(ref) == 0 { - return fmt.Errorf("empty ref") + return errors.New("empty ref") } } diff --git a/internal/gitaly/service/ref/delete_refs_test.go b/internal/gitaly/service/ref/delete_refs_test.go index 9541dde1b..309ce5b2c 100644 --- a/internal/gitaly/service/ref/delete_refs_test.go +++ b/internal/gitaly/service/ref/delete_refs_test.go @@ -282,7 +282,7 @@ func TestDeleteRefs_validation(t *testing.T) { desc: "no repository provided", request: &gitalypb.DeleteRefsRequest{Repository: nil}, expErr: status.Error(codes.InvalidArgument, testhelper.GitalyOrPraefect( - "DeleteRefs: empty Repository", + "empty Repository", "repo scoped: empty Repository", )), }, @@ -304,7 +304,7 @@ func TestDeleteRefs_validation(t *testing.T) { ExceptWithPrefix: [][]byte{[]byte("exclude-this")}, }, expErr: status.Error(codes.InvalidArgument, testhelper.GitalyOrPraefect( - "DeleteRefs: empty Repository", + "empty Repository", "repo scoped: empty Repository", )), }, @@ -313,7 +313,7 @@ func TestDeleteRefs_validation(t *testing.T) { request: &gitalypb.DeleteRefsRequest{ Repository: repo, }, - expErr: status.Error(codes.InvalidArgument, "DeleteRefs: empty ExceptWithPrefix and Refs"), + expErr: status.Error(codes.InvalidArgument, "empty ExceptWithPrefix and Refs"), }, { desc: "prefixes with refs", @@ -322,7 +322,7 @@ func TestDeleteRefs_validation(t *testing.T) { ExceptWithPrefix: [][]byte{[]byte("exclude-this")}, Refs: [][]byte{[]byte("delete-this")}, }, - expErr: status.Error(codes.InvalidArgument, "DeleteRefs: ExceptWithPrefix and Refs are mutually exclusive"), + expErr: status.Error(codes.InvalidArgument, "ExceptWithPrefix and Refs are mutually exclusive"), }, { desc: "Empty prefix", @@ -330,7 +330,7 @@ func TestDeleteRefs_validation(t *testing.T) { Repository: repo, ExceptWithPrefix: [][]byte{[]byte("exclude-this"), {}}, }, - expErr: status.Error(codes.InvalidArgument, "DeleteRefs: empty prefix for exclusion"), + expErr: status.Error(codes.InvalidArgument, "empty prefix for exclusion"), }, { desc: "Empty ref", @@ -338,7 +338,7 @@ func TestDeleteRefs_validation(t *testing.T) { Repository: repo, Refs: [][]byte{[]byte("delete-this"), {}}, }, - expErr: status.Error(codes.InvalidArgument, "DeleteRefs: empty ref"), + expErr: status.Error(codes.InvalidArgument, "empty ref"), }, } diff --git a/internal/gitaly/service/ref/find_all_tags.go b/internal/gitaly/service/ref/find_all_tags.go index a07d225e0..943e14674 100644 --- a/internal/gitaly/service/ref/find_all_tags.go +++ b/internal/gitaly/service/ref/find_all_tags.go @@ -43,7 +43,7 @@ func (s *server) FindAllTags(in *gitalypb.FindAllTagsRequest, stream gitalypb.Re func (s *server) findAllTags(ctx context.Context, repo *localrepo.Repo, sortField string, stream gitalypb.RefService_FindAllTagsServer, opts *paginationOpts) error { objectReader, cancel, err := s.catfileCache.ObjectReader(ctx, repo) if err != nil { - return fmt.Errorf("error creating object reader: %v", err) + return fmt.Errorf("creating object reader: %w", err) } defer cancel() @@ -57,7 +57,7 @@ func (s *server) findAllTags(ctx context.Context, repo *localrepo.Repo, sortFiel catfileObjectsIter, err := gitpipe.CatfileObject(ctx, objectReader, forEachRefIter) if err != nil { - return err + return helper.ErrInternalf("crate cat-file object iterator: %w", err) } chunker := chunk.New(&tagSender{stream: stream}) @@ -171,7 +171,7 @@ func (s *server) validateFindAllTagsRequest(request *gitalypb.FindAllTagsRequest } if _, err := s.locator.GetRepoPath(request.GetRepository()); err != nil { - return fmt.Errorf("invalid git directory: %v", err) + return fmt.Errorf("invalid git directory: %w", err) } return nil diff --git a/internal/gitaly/service/ref/find_refs_by_oid.go b/internal/gitaly/service/ref/find_refs_by_oid.go index bdadd7513..ccad4a937 100644 --- a/internal/gitaly/service/ref/find_refs_by_oid.go +++ b/internal/gitaly/service/ref/find_refs_by_oid.go @@ -43,7 +43,7 @@ func (s *server) FindRefsByOID(ctx context.Context, in *gitalypb.FindRefsByOIDRe if strings.Contains(err.Error(), "exit status 129") { return nil, helper.ErrInvalidArgument(err) } - return nil, err + return nil, helper.ErrInternal(err) } return &gitalypb.FindRefsByOIDResponse{ diff --git a/internal/gitaly/service/ref/find_tag.go b/internal/gitaly/service/ref/find_tag.go index 6c378d2df..698e10fc0 100644 --- a/internal/gitaly/service/ref/find_tag.go +++ b/internal/gitaly/service/ref/find_tag.go @@ -48,7 +48,7 @@ func parseTagLine(ctx context.Context, objectReader catfile.ObjectReader, tagLin case "tag": tag, err := catfile.GetTag(ctx, objectReader, git.Revision(tagID), refName) if err != nil { - return nil, fmt.Errorf("getting annotated tag: %v", err) + return nil, fmt.Errorf("getting annotated tag: %w", err) } catfile.TrimTagMessage(tag) @@ -56,7 +56,7 @@ func parseTagLine(ctx context.Context, objectReader catfile.ObjectReader, tagLin case "commit": commit, err := catfile.GetCommit(ctx, objectReader, git.Revision(tagID)) if err != nil { - return nil, fmt.Errorf("getting commit catfile: %v", err) + return nil, fmt.Errorf("getting commit catfile: %w", err) } tag.TargetCommit = commit return tag, nil @@ -77,12 +77,12 @@ func (s *server) findTag(ctx context.Context, repo git.RepositoryExecutor, tagNa git.WithRefTxHook(repo), ) if err != nil { - return nil, fmt.Errorf("for-each-ref error: %v", err) + return nil, fmt.Errorf("for-each-ref error: %w", err) } objectReader, cancel, err := s.catfileCache.ObjectReader(ctx, repo) if err != nil { - return nil, err + return nil, fmt.Errorf("creating object reader: %w", err) } defer cancel() @@ -92,7 +92,7 @@ func (s *server) findTag(ctx context.Context, repo git.RepositoryExecutor, tagNa if scanner.Scan() { tag, err = parseTagLine(ctx, objectReader, scanner.Text()) if err != nil { - return nil, err + return nil, fmt.Errorf("parse tag: %w", err) } } else { detailedErr, err := helper.ErrWithDetails( @@ -125,7 +125,7 @@ func (s *server) validateFindTagRequest(in *gitalypb.FindTagRequest) error { } if _, err := s.locator.GetRepoPath(in.GetRepository()); err != nil { - return fmt.Errorf("invalid git directory: %v", err) + return fmt.Errorf("invalid git directory: %w", err) } if in.GetTagName() == nil { diff --git a/internal/gitaly/service/ref/list_refs.go b/internal/gitaly/service/ref/list_refs.go index 512f17d28..622cdf54b 100644 --- a/internal/gitaly/service/ref/list_refs.go +++ b/internal/gitaly/service/ref/list_refs.go @@ -25,7 +25,7 @@ func (s *server) ListRefs(in *gitalypb.ListRefsRequest, stream gitalypb.RefServi var err error headOID, err = repo.ResolveRevision(ctx, git.Revision("HEAD")) if err != nil && !errors.Is(err, git.ErrReferenceNotFound) { - return helper.ErrInternal(err) + return helper.ErrInternalf("resolve HEAD: %w", err) } } @@ -44,7 +44,7 @@ func (s *server) ListRefs(in *gitalypb.ListRefsRequest, stream gitalypb.RefServi git.ValueFlag{Name: "--sort", Value: sorting}, } - return s.findRefs(ctx, writer, repo, patterns, opts) + return helper.ErrInternal(s.findRefs(ctx, writer, repo, patterns, opts)) } func validateListRefsRequest(in *gitalypb.ListRefsRequest) error { diff --git a/internal/gitaly/service/ref/refexists.go b/internal/gitaly/service/ref/refexists.go index aab56ca0e..4ba70d7f4 100644 --- a/internal/gitaly/service/ref/refexists.go +++ b/internal/gitaly/service/ref/refexists.go @@ -2,7 +2,7 @@ package ref import ( "context" - "fmt" + "errors" "strings" "gitlab.com/gitlab-org/gitaly/v15/internal/command" @@ -21,7 +21,7 @@ func (s *server) RefExists(ctx context.Context, in *gitalypb.RefExistsRequest) ( ref := string(in.Ref) if !isValidRefName(ref) { - return nil, helper.ErrInvalidArgument(fmt.Errorf("invalid refname")) + return nil, helper.ErrInvalidArgument(errors.New("invalid refname")) } exists, err := s.refExists(ctx, in.Repository, ref) diff --git a/internal/gitaly/service/ref/refnames.go b/internal/gitaly/service/ref/refnames.go index 958019d2c..9353a7b6f 100644 --- a/internal/gitaly/service/ref/refnames.go +++ b/internal/gitaly/service/ref/refnames.go @@ -21,7 +21,7 @@ func (s *server) FindAllBranchNames(in *gitalypb.FindAllBranchNamesRequest, stre chunker := chunk.New(&findAllBranchNamesSender{stream: stream}) - return s.listRefNames(stream.Context(), chunker, "refs/heads", in.Repository, nil) + return helper.ErrInternal(s.listRefNames(stream.Context(), chunker, "refs/heads", in.Repository, nil)) } type findAllBranchNamesSender struct { @@ -45,8 +45,7 @@ func (s *server) FindAllTagNames(in *gitalypb.FindAllTagNamesRequest, stream git } chunker := chunk.New(&findAllTagNamesSender{stream: stream}) - - return s.listRefNames(stream.Context(), chunker, "refs/tags", in.Repository, nil) + return helper.ErrInternal(s.listRefNames(stream.Context(), chunker, "refs/tags", in.Repository, nil)) } type findAllTagNamesSender struct { diff --git a/internal/gitaly/service/ref/refnames_containing.go b/internal/gitaly/service/ref/refnames_containing.go index dc3db16f8..cf22d76c4 100644 --- a/internal/gitaly/service/ref/refnames_containing.go +++ b/internal/gitaly/service/ref/refnames_containing.go @@ -25,11 +25,7 @@ func (s *server) ListBranchNamesContainingCommit(in *gitalypb.ListBranchNamesCon chunker := chunk.New(&branchNamesContainingCommitSender{stream: stream}) ctx := stream.Context() - if err := s.listRefNames(ctx, chunker, "refs/heads", in.Repository, containingArgs(in)); err != nil { - return helper.ErrInternal(err) - } - - return nil + return helper.ErrInternal(s.listRefNames(ctx, chunker, "refs/heads", in.Repository, containingArgs(in))) } type containingRequest interface { @@ -71,11 +67,7 @@ func (s *server) ListTagNamesContainingCommit(in *gitalypb.ListTagNamesContainin chunker := chunk.New(&tagNamesContainingCommitSender{stream: stream}) ctx := stream.Context() - if err := s.listRefNames(ctx, chunker, "refs/tags", in.Repository, containingArgs(in)); err != nil { - return helper.ErrInternal(err) - } - - return nil + return helper.ErrInternal(s.listRefNames(ctx, chunker, "refs/tags", in.Repository, containingArgs(in))) } type tagNamesContainingCommitSender struct { diff --git a/internal/gitaly/service/ref/refs.go b/internal/gitaly/service/ref/refs.go index d1b9a23f9..bb2015d5d 100644 --- a/internal/gitaly/service/ref/refs.go +++ b/internal/gitaly/service/ref/refs.go @@ -114,7 +114,7 @@ func (s *server) findLocalBranches(in *gitalypb.FindLocalBranchesRequest, stream objectReader, cancel, err := s.catfileCache.ObjectReader(ctx, repo) if err != nil { - return err + return fmt.Errorf("creating object reader: %w", err) } defer cancel() @@ -126,7 +126,10 @@ func (s *server) findLocalBranches(in *gitalypb.FindLocalBranchesRequest, stream git.Flag{Name: "--sort=" + parseSortKey(in.GetSortBy())}, } - return s.findRefs(ctx, writer, repo, []string{"refs/heads"}, opts) + if err := s.findRefs(ctx, writer, repo, []string{"refs/heads"}, opts); err != nil { + return fmt.Errorf("find refs: %w", err) + } + return nil } func (s *server) FindAllBranches(in *gitalypb.FindAllBranchesRequest, stream gitalypb.RefService_FindAllBranchesServer) error { @@ -153,7 +156,7 @@ func (s *server) findAllBranches(in *gitalypb.FindAllBranchesRequest, stream git if in.MergedOnly { defaultBranch, err := repo.GetDefaultBranch(stream.Context()) if err != nil { - return err + return fmt.Errorf("default branch name: %w", err) } args = append(args, git.Flag{Name: fmt.Sprintf("--merged=%s", defaultBranch.String())}) @@ -170,7 +173,7 @@ func (s *server) findAllBranches(in *gitalypb.FindAllBranchesRequest, stream git ctx := stream.Context() objectReader, cancel, err := s.catfileCache.ObjectReader(ctx, repo) if err != nil { - return err + return fmt.Errorf("creating object reader: %w", err) } defer cancel() @@ -179,7 +182,10 @@ func (s *server) findAllBranches(in *gitalypb.FindAllBranchesRequest, stream git writer := newFindAllBranchesWriter(stream, objectReader) - return s.findRefs(ctx, writer, repo, patterns, opts) + if err = s.findRefs(ctx, writer, repo, patterns, opts); err != nil { + return fmt.Errorf("find refs: %w", err) + } + return nil } func buildPaginationOpts(ctx context.Context, p *gitalypb.PaginationParameter) *paginationOpts { diff --git a/internal/gitaly/service/ref/refs_test.go b/internal/gitaly/service/ref/refs_test.go index 859b98974..65adef77e 100644 --- a/internal/gitaly/service/ref/refs_test.go +++ b/internal/gitaly/service/ref/refs_test.go @@ -473,7 +473,7 @@ func TestFindLocalBranchesPaginationWithIncorrectToken(t *testing.T) { _, err = c.Recv() require.NotEqual(t, err, io.EOF) - testhelper.RequireGrpcError(t, helper.ErrInternalf("could not find page token"), err) + testhelper.RequireGrpcError(t, helper.ErrInternalf("find refs: could not find page token"), err) } // Test that `s` contains the elements in `relativeOrder` in that order @@ -571,7 +571,7 @@ func TestFindLocalBranches_validate(t *testing.T) { desc: "repository doesn't exist on disk", repo: &gitalypb.Repository{StorageName: cfg.Storages[0].Name, RelativePath: "made/up/path"}, expErr: status.Error(codes.NotFound, testhelper.GitalyOrPraefect( - `GetRepoPath: not a git repository: "`+cfg.Storages[0].Path+`/made/up/path"`, + `creating object reader: GetRepoPath: not a git repository: "`+cfg.Storages[0].Path+`/made/up/path"`, `accessor call: route repository accessor: consistent storages: repository "default"/"made/up/path" not found`, )), }, @@ -579,7 +579,7 @@ func TestFindLocalBranches_validate(t *testing.T) { desc: "unknown storage", repo: &gitalypb.Repository{StorageName: "invalid", RelativePath: repo.GetRelativePath()}, expErr: status.Error(codes.InvalidArgument, testhelper.GitalyOrPraefect( - `GetStorageByName: no such storage: "invalid"`, + `creating object reader: GetStorageByName: no such storage: "invalid"`, "repo scoped: invalid Repository", )), }, @@ -754,7 +754,7 @@ func TestInvalidFindAllBranchesRequest(t *testing.T) { }, }, expectedErr: helper.ErrInvalidArgumentf(testhelper.GitalyOrPraefect( - "GetStorageByName: no such storage: \"fake\"", + "creating object reader: GetStorageByName: no such storage: \"fake\"", "repo scoped: invalid Repository", )), }, diff --git a/internal/gitaly/service/ref/remote_branches.go b/internal/gitaly/service/ref/remote_branches.go index 42543dc6a..79129545f 100644 --- a/internal/gitaly/service/ref/remote_branches.go +++ b/internal/gitaly/service/ref/remote_branches.go @@ -1,6 +1,7 @@ package ref import ( + "errors" "fmt" "strings" @@ -34,7 +35,7 @@ func (s *server) findAllRemoteBranches(req *gitalypb.FindAllRemoteBranchesReques ctx := stream.Context() objectReader, cancel, err := s.catfileCache.ObjectReader(ctx, repo) if err != nil { - return err + return fmt.Errorf("creating object reader: %w", err) } defer cancel() @@ -42,7 +43,10 @@ func (s *server) findAllRemoteBranches(req *gitalypb.FindAllRemoteBranchesReques opts.cmdArgs = args writer := newFindAllRemoteBranchesWriter(stream, objectReader) - return s.findRefs(ctx, writer, repo, patterns, opts) + if err = s.findRefs(ctx, writer, repo, patterns, opts); err != nil { + return fmt.Errorf("find refs: %w", err) + } + return nil } func validateFindAllRemoteBranchesRequest(req *gitalypb.FindAllRemoteBranchesRequest) error { @@ -51,7 +55,7 @@ func validateFindAllRemoteBranchesRequest(req *gitalypb.FindAllRemoteBranchesReq } if len(req.GetRemoteName()) == 0 { - return fmt.Errorf("empty RemoteName") + return errors.New("empty RemoteName") } return nil diff --git a/internal/gitaly/service/ref/remote_branches_test.go b/internal/gitaly/service/ref/remote_branches_test.go index aaf3e4055..464066698 100644 --- a/internal/gitaly/service/ref/remote_branches_test.go +++ b/internal/gitaly/service/ref/remote_branches_test.go @@ -94,7 +94,7 @@ func TestInvalidFindAllRemoteBranchesRequest(t *testing.T) { RemoteName: "stub", }, expErr: status.Error(codes.InvalidArgument, testhelper.GitalyOrPraefect( - `GetStorageByName: no such storage: "fake"`, + `creating object reader: GetStorageByName: no such storage: "fake"`, "repo scoped: invalid Repository", )), }, diff --git a/internal/gitaly/service/ref/tag_messages.go b/internal/gitaly/service/ref/tag_messages.go index 87273b988..e3bf76375 100644 --- a/internal/gitaly/service/ref/tag_messages.go +++ b/internal/gitaly/service/ref/tag_messages.go @@ -11,13 +11,11 @@ import ( "gitlab.com/gitlab-org/gitaly/v15/internal/helper" "gitlab.com/gitlab-org/gitaly/v15/proto/go/gitalypb" "gitlab.com/gitlab-org/gitaly/v15/streamio" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" ) func (s *server) GetTagMessages(request *gitalypb.GetTagMessagesRequest, stream gitalypb.RefService_GetTagMessagesServer) error { if err := validateGetTagMessagesRequest(request); err != nil { - return status.Errorf(codes.InvalidArgument, "GetTagMessages: %v", err) + return helper.ErrInvalidArgument(err) } if err := s.getAndStreamTagMessages(request, stream); err != nil { return helper.ErrInternal(err) @@ -40,14 +38,14 @@ func (s *server) getAndStreamTagMessages(request *gitalypb.GetTagMessagesRequest objectReader, cancel, err := s.catfileCache.ObjectReader(ctx, repo) if err != nil { - return err + return fmt.Errorf("creating object reader: %w", err) } defer cancel() for _, tagID := range request.GetTagIds() { tag, err := catfile.GetTag(ctx, objectReader, git.Revision(tagID), "") if err != nil { - return fmt.Errorf("failed to get tag: %v", err) + return fmt.Errorf("failed to get tag: %w", err) } if err := stream.Send(&gitalypb.GetTagMessagesResponse{TagId: tagID}); err != nil { @@ -60,7 +58,7 @@ func (s *server) getAndStreamTagMessages(request *gitalypb.GetTagMessagesRequest msgReader := bytes.NewReader(tag.Message) if _, err = io.Copy(sw, msgReader); err != nil { - return fmt.Errorf("failed to send response: %v", err) + return fmt.Errorf("failed to send response: %w", err) } } return nil diff --git a/internal/gitaly/service/ref/tag_messages_test.go b/internal/gitaly/service/ref/tag_messages_test.go index 60fc6381f..6ac358427 100644 --- a/internal/gitaly/service/ref/tag_messages_test.go +++ b/internal/gitaly/service/ref/tag_messages_test.go @@ -68,7 +68,7 @@ func TestFailedGetTagMessagesRequest(t *testing.T) { TagIds: []string{"5937ac0a7beb003549fc5fd26fc247adbce4a52e"}, }, expErr: status.Error(codes.InvalidArgument, testhelper.GitalyOrPraefect( - "GetTagMessages: empty Repository", + "empty Repository", "repo scoped: empty Repository", )), }, diff --git a/internal/gitaly/service/ref/tag_signatures.go b/internal/gitaly/service/ref/tag_signatures.go index 6c1608ab3..6961697c2 100644 --- a/internal/gitaly/service/ref/tag_signatures.go +++ b/internal/gitaly/service/ref/tag_signatures.go @@ -63,7 +63,7 @@ func (s *server) GetTagSignatures(req *gitalypb.GetTagSignaturesRequest, stream catfileObjectIter, err := gitpipe.CatfileObject(ctx, objectReader, revlistIter) if err != nil { - return err + return helper.ErrInternalf("crate cat-file object iterator: %w", err) } for catfileObjectIter.Next() { @@ -71,7 +71,7 @@ func (s *server) GetTagSignatures(req *gitalypb.GetTagSignaturesRequest, stream raw, err := io.ReadAll(tag) if err != nil { - return helper.ErrInternal(err) + return helper.ErrInternalf("read tag: %w", err) } signatureKey, tagText := catfile.ExtractTagSignature(raw) @@ -86,11 +86,11 @@ func (s *server) GetTagSignatures(req *gitalypb.GetTagSignaturesRequest, stream } if err := catfileObjectIter.Err(); err != nil { - return helper.ErrInternal(err) + return helper.ErrInternalf("cat-file iterator stop: %w", err) } if err := chunker.Flush(); err != nil { - return helper.ErrInternal(err) + return helper.ErrInternalf("flushing chunker: %w", err) } return nil diff --git a/internal/gitaly/service/ref/tag_signatures_test.go b/internal/gitaly/service/ref/tag_signatures_test.go index 25f1c2ede..c054f0d63 100644 --- a/internal/gitaly/service/ref/tag_signatures_test.go +++ b/internal/gitaly/service/ref/tag_signatures_test.go @@ -60,7 +60,7 @@ func TestGetTagSignatures(t *testing.T) { revisions: []string{ "b10ff336f3fbfb131431c4959915cdfd1b49c635", }, - expectedErr: status.Error(codes.Internal, "rev-list pipeline command: exit status 128, stderr: \"fatal: bad object b10ff336f3fbfb131431c4959915cdfd1b49c635\\n\""), + expectedErr: status.Error(codes.Internal, "cat-file iterator stop: rev-list pipeline command: exit status 128, stderr: \"fatal: bad object b10ff336f3fbfb131431c4959915cdfd1b49c635\\n\""), }, { desc: "commit id", |