diff options
author | Patrick Steinhardt <psteinhardt@gitlab.com> | 2021-06-10 19:57:36 +0300 |
---|---|---|
committer | Patrick Steinhardt <psteinhardt@gitlab.com> | 2021-06-14 13:03:37 +0300 |
commit | 5f6351d8d0c38fca17e0067664f14cfd1ccb133a (patch) | |
tree | f5e7af1b05d6f840fd95dbea0f9f912a9dbadd12 | |
parent | 5011000b5ed566233e26d4b664904f53554e05a5 (diff) |
blob: Move verification of revisions into ListLFSPointers
We're about to add a second implementation to the current existing
`ListLFSPointers()` implementation. Given that both callsites will
require validation of specified revisions, let's move it into
`ListLFSPointers()` directly such that the code is shared. Given that no
other callers of `findLFSPointersByRevision()` exist, this doesn't relax
any semantics.
-rw-r--r-- | internal/gitaly/service/blob/lfs_pointers.go | 17 | ||||
-rw-r--r-- | internal/gitaly/service/blob/lfs_pointers_test.go | 5 |
2 files changed, 6 insertions, 16 deletions
diff --git a/internal/gitaly/service/blob/lfs_pointers.go b/internal/gitaly/service/blob/lfs_pointers.go index 3276d0608..d8519d899 100644 --- a/internal/gitaly/service/blob/lfs_pointers.go +++ b/internal/gitaly/service/blob/lfs_pointers.go @@ -29,8 +29,7 @@ const ( ) var ( - errInvalidRevision = errors.New("invalid revision") - errLimitReached = errors.New("limit reached") + errLimitReached = errors.New("limit reached") ) // ListLFSPointers finds all LFS pointers which are transitively reachable via a graph walk of the @@ -44,6 +43,11 @@ func (s *server) ListLFSPointers(in *gitalypb.ListLFSPointersRequest, stream git if len(in.Revisions) == 0 { return status.Error(codes.InvalidArgument, "missing revisions") } + for _, revision := range in.Revisions { + if strings.HasPrefix(revision, "-") && revision != "--all" && revision != "--not" { + return status.Errorf(codes.InvalidArgument, "invalid revision: %q", revision) + } + } chunker := chunk.New(&lfsPointerSender{ send: func(pointers []*gitalypb.LFSPointer) error { @@ -55,9 +59,6 @@ func (s *server) ListLFSPointers(in *gitalypb.ListLFSPointersRequest, stream git repo := s.localrepo(in.GetRepository()) if err := findLFSPointersByRevisions(ctx, repo, s.gitCmdFactory, chunker, int(in.Limit), in.Revisions...); err != nil { - if errors.Is(err, errInvalidRevision) { - return status.Errorf(codes.InvalidArgument, err.Error()) - } if !errors.Is(err, errLimitReached) { return err } @@ -162,12 +163,6 @@ func findLFSPointersByRevisions( limit int, revisions ...string, ) (returnErr error) { - for _, revision := range revisions { - if strings.HasPrefix(revision, "-") && revision != "--all" && revision != "--not" { - return fmt.Errorf("%w: %q", errInvalidRevision, revision) - } - } - // git-rev-list(1) currently does not have any way to list all reachable objects of a // certain type. var revListStderr bytes.Buffer diff --git a/internal/gitaly/service/blob/lfs_pointers_test.go b/internal/gitaly/service/blob/lfs_pointers_test.go index 0970e9ffe..5e07072d4 100644 --- a/internal/gitaly/service/blob/lfs_pointers_test.go +++ b/internal/gitaly/service/blob/lfs_pointers_test.go @@ -459,11 +459,6 @@ func TestFindLFSPointersByRevisions(t *testing.T) { }, }, { - desc: "invalid dashed option", - revs: []string{"master", "--foobar"}, - expectedErr: fmt.Errorf("invalid revision: \"--foobar\""), - }, - { desc: "invalid revision", revs: []string{"does-not-exist"}, expectedErr: fmt.Errorf("fatal: ambiguous argument 'does-not-exist'"), |