diff options
author | Sami Hiltunen <shiltunen@gitlab.com> | 2022-02-01 13:39:11 +0300 |
---|---|---|
committer | Sami Hiltunen <shiltunen@gitlab.com> | 2022-02-01 18:57:26 +0300 |
commit | 3d7b0636d7448ea64beec5c768b7accd58f24835 (patch) | |
tree | 74d41bf20366b9b493c428a1e83d84fb125d2a7f | |
parent | 7779f09eb8bf76508b1393c697deb15711ed0721 (diff) |
Move tree entry helpers out from commit service
Commit service's package contains helpers for working with tree
entries. These helpers are used also in the repository service.
This creates a cyclic dependency when repository service is setup
in commit service's tests to create repositories via the API. This
commit moves the tree entry helpers out of the commit package so the
cyclic dependency is broken.
-rw-r--r-- | internal/git/catfile/tree_entries.go (renamed from internal/gitaly/service/commit/tree_entries_helper.go) | 27 | ||||
-rw-r--r-- | internal/git/tree_entry.go (renamed from internal/gitaly/service/commit/util.go) | 5 | ||||
-rw-r--r-- | internal/gitaly/service/blob/get_blobs.go | 3 | ||||
-rw-r--r-- | internal/gitaly/service/commit/tree_entries.go | 10 | ||||
-rw-r--r-- | internal/gitaly/service/commit/tree_entry.go | 2 | ||||
-rw-r--r-- | internal/gitaly/service/repository/archive.go | 6 |
6 files changed, 28 insertions, 25 deletions
diff --git a/internal/gitaly/service/commit/tree_entries_helper.go b/internal/git/catfile/tree_entries.go index afcf2403e..30996d662 100644 --- a/internal/gitaly/service/commit/tree_entries_helper.go +++ b/internal/git/catfile/tree_entries.go @@ -1,4 +1,4 @@ -package commit +package catfile import ( "bufio" @@ -12,7 +12,6 @@ import ( "strings" "gitlab.com/gitlab-org/gitaly/v14/internal/git" - "gitlab.com/gitlab-org/gitaly/v14/internal/git/catfile" "gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb" ) @@ -20,13 +19,13 @@ type revisionPath struct{ revision, path string } // TreeEntryFinder is a struct for searching through a tree with caching. type TreeEntryFinder struct { - objectReader catfile.ObjectReader - objectInfoReader catfile.ObjectInfoReader + objectReader ObjectReader + objectInfoReader ObjectInfoReader treeCache map[revisionPath][]*gitalypb.TreeEntry } // NewTreeEntryFinder initializes a TreeEntryFinder with an empty tree cache. -func NewTreeEntryFinder(objectReader catfile.ObjectReader, objectInfoReader catfile.ObjectInfoReader) *TreeEntryFinder { +func NewTreeEntryFinder(objectReader ObjectReader, objectInfoReader ObjectInfoReader) *TreeEntryFinder { return &TreeEntryFinder{ objectReader: objectReader, objectInfoReader: objectInfoReader, @@ -42,7 +41,7 @@ func (tef *TreeEntryFinder) FindByRevisionAndPath(ctx context.Context, revision, if !ok { var err error - entries, err = treeEntries(ctx, tef.objectReader, tef.objectInfoReader, revision, dir) + entries, err = TreeEntries(ctx, tef.objectReader, tef.objectInfoReader, revision, dir) if err != nil { return nil, err } @@ -60,8 +59,7 @@ func (tef *TreeEntryFinder) FindByRevisionAndPath(ctx context.Context, revision, } const ( - oidSize = sha1.Size - defaultFlatTreeRecursion = 10 + oidSize = sha1.Size ) func extractEntryInfoFromTreeData(treeData io.Reader, commitOid, rootOid, rootPath, oid string) ([]*gitalypb.TreeEntry, error) { @@ -95,7 +93,7 @@ func extractEntryInfoFromTreeData(treeData io.Reader, commitOid, rootOid, rootPa return nil, fmt.Errorf("read entry oid: %v", err) } - treeEntry, err := newTreeEntry(commitOid, rootOid, rootPath, filename, oidBuf.Bytes(), modeBytes) + treeEntry, err := git.NewTreeEntry(commitOid, rootOid, rootPath, filename, oidBuf.Bytes(), modeBytes) if err != nil { return nil, fmt.Errorf("new entry info: %v", err) } @@ -106,10 +104,11 @@ func extractEntryInfoFromTreeData(treeData io.Reader, commitOid, rootOid, rootPa return entries, nil } -func treeEntries( +// TreeEntries returns the entries of a tree in given revision and path. +func TreeEntries( ctx context.Context, - objectReader catfile.ObjectReader, - objectInfoReader catfile.ObjectInfoReader, + objectReader ObjectReader, + objectInfoReader ObjectInfoReader, revision, path string, ) (_ []*gitalypb.TreeEntry, returnedErr error) { if path == "." { @@ -124,7 +123,7 @@ func treeEntries( rootTreeInfo, err := objectInfoReader.Info(ctx, git.Revision(revision+"^{tree}")) if err != nil { - if catfile.IsNotFound(err) { + if IsNotFound(err) { return nil, nil } @@ -134,7 +133,7 @@ func treeEntries( treeObj, err := objectReader.Object(ctx, git.Revision(fmt.Sprintf("%s:%s", revision, path))) if err != nil { - if catfile.IsNotFound(err) { + if IsNotFound(err) { return nil, nil } return nil, err diff --git a/internal/gitaly/service/commit/util.go b/internal/git/tree_entry.go index 6285bff4f..b5fe8c3a1 100644 --- a/internal/gitaly/service/commit/util.go +++ b/internal/git/tree_entry.go @@ -1,4 +1,4 @@ -package commit +package git import ( "fmt" @@ -8,7 +8,8 @@ import ( "gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb" ) -func newTreeEntry(commitOid, rootOid, rootPath string, filename, oidBytes, modeBytes []byte) (*gitalypb.TreeEntry, error) { +// NewTreeEntry is a helper to construct a gitalypb.TreeEntry from the provided parameters. +func NewTreeEntry(commitOid, rootOid, rootPath string, filename, oidBytes, modeBytes []byte) (*gitalypb.TreeEntry, error) { var objectType gitalypb.TreeEntry_EntryType mode, err := strconv.ParseInt(string(modeBytes), 8, 32) diff --git a/internal/gitaly/service/blob/get_blobs.go b/internal/gitaly/service/blob/get_blobs.go index 6d7079b48..5b899ebe7 100644 --- a/internal/gitaly/service/blob/get_blobs.go +++ b/internal/gitaly/service/blob/get_blobs.go @@ -6,7 +6,6 @@ import ( "gitlab.com/gitlab-org/gitaly/v14/internal/git" "gitlab.com/gitlab-org/gitaly/v14/internal/git/catfile" - "gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/service/commit" "gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb" "gitlab.com/gitlab-org/gitaly/v14/streamio" "google.golang.org/grpc/codes" @@ -27,7 +26,7 @@ func sendGetBlobsResponse( ) error { ctx := stream.Context() - tef := commit.NewTreeEntryFinder(objectReader, objectInfoReader) + tef := catfile.NewTreeEntryFinder(objectReader, objectInfoReader) for _, revisionPath := range req.RevisionPaths { revision := revisionPath.Revision diff --git a/internal/gitaly/service/commit/tree_entries.go b/internal/gitaly/service/commit/tree_entries.go index 07604c68a..8002ec7fe 100644 --- a/internal/gitaly/service/commit/tree_entries.go +++ b/internal/gitaly/service/commit/tree_entries.go @@ -19,6 +19,10 @@ import ( "google.golang.org/protobuf/proto" ) +const ( + defaultFlatTreeRecursion = 10 +) + func validateGetTreeEntriesRequest(in *gitalypb.GetTreeEntriesRequest) error { if err := git.ValidateRevision(in.Revision); err != nil { return err @@ -45,7 +49,7 @@ func populateFlatPath( } for i := 1; i < defaultFlatTreeRecursion; i++ { - subEntries, err := treeEntries(ctx, objectReader, objectInfoReader, entry.CommitOid, string(entry.FlatPath)) + subEntries, err := catfile.TreeEntries(ctx, objectReader, objectInfoReader, entry.CommitOid, string(entry.FlatPath)) if err != nil { return err } @@ -127,7 +131,7 @@ func (s *server) sendTreeEntries( return fmt.Errorf("converting tree entry OID: %w", err) } - treeEntry, err := newTreeEntry( + treeEntry, err := git.NewTreeEntry( revision, rootTreeInfo.String(), path, @@ -154,7 +158,7 @@ func (s *server) sendTreeEntries( return err } - entries, err = treeEntries(ctx, objectReader, objectInfoReader, revision, path) + entries, err = catfile.TreeEntries(ctx, objectReader, objectInfoReader, revision, path) if err != nil { return err } diff --git a/internal/gitaly/service/commit/tree_entry.go b/internal/gitaly/service/commit/tree_entry.go index 9254e7844..2573fe3c0 100644 --- a/internal/gitaly/service/commit/tree_entry.go +++ b/internal/gitaly/service/commit/tree_entry.go @@ -21,7 +21,7 @@ func sendTreeEntry( ) error { ctx := stream.Context() - treeEntry, err := NewTreeEntryFinder(objectReader, objectInfoReader).FindByRevisionAndPath(ctx, revision, path) + treeEntry, err := catfile.NewTreeEntryFinder(objectReader, objectInfoReader).FindByRevisionAndPath(ctx, revision, path) if err != nil { return err } diff --git a/internal/gitaly/service/repository/archive.go b/internal/gitaly/service/repository/archive.go index 123f50a4d..cffd4fb36 100644 --- a/internal/gitaly/service/repository/archive.go +++ b/internal/gitaly/service/repository/archive.go @@ -12,7 +12,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v14/internal/command" "gitlab.com/gitlab-org/gitaly/v14/internal/git" - "gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/service/commit" + "gitlab.com/gitlab-org/gitaly/v14/internal/git/catfile" "gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v14/internal/helper" "gitlab.com/gitlab-org/gitaly/v14/internal/log" @@ -151,7 +151,7 @@ func (s *server) validateGetArchivePrecondition( return err } - f := commit.NewTreeEntryFinder(objectReader, objectInfoReader) + f := catfile.NewTreeEntryFinder(objectReader, objectInfoReader) if path != "." { if ok, err := findGetArchivePath(ctx, f, commitID, path); err != nil { return err @@ -171,7 +171,7 @@ func (s *server) validateGetArchivePrecondition( return nil } -func findGetArchivePath(ctx context.Context, f *commit.TreeEntryFinder, commitID, path string) (ok bool, err error) { +func findGetArchivePath(ctx context.Context, f *catfile.TreeEntryFinder, commitID, path string) (ok bool, err error) { treeEntry, err := f.FindByRevisionAndPath(ctx, commitID, path) if err != nil { return false, err |