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>2021-06-10 19:57:36 +0300
committerPatrick Steinhardt <psteinhardt@gitlab.com>2021-06-14 13:03:37 +0300
commit5f6351d8d0c38fca17e0067664f14cfd1ccb133a (patch)
treef5e7af1b05d6f840fd95dbea0f9f912a9dbadd12
parent5011000b5ed566233e26d4b664904f53554e05a5 (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.go17
-rw-r--r--internal/gitaly/service/blob/lfs_pointers_test.go5
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'"),