Remove types dependency from gitrpc package, add back commits/content api (#36)

This commit is contained in:
Johannes Batzill 2022-10-17 17:12:52 -07:00 committed by GitHub
parent 0a7857f660
commit 7317ec9d62
15 changed files with 75 additions and 37 deletions

View File

@ -9,6 +9,8 @@ import (
"os"
"path/filepath"
"github.com/google/wire"
"github.com/harness/gitness/internal/gitrpc"
"github.com/harness/gitness/types"
"github.com/kelseyhightower/envconfig"
@ -45,3 +47,22 @@ func ensureGitRootIsSet(config *types.Config) error {
return nil
}
// PackageConfigsWireSet contains providers that generate configs required for sub packages.
var PackageConfigsWireSet = wire.NewSet(
ProvideGitRPCServerConfig,
ProvideGitRPCClientConfig,
)
func ProvideGitRPCServerConfig(config *types.Config) *gitrpc.ServerConfig {
return &gitrpc.ServerConfig{
Bind: config.Server.GRPC.Bind,
GitRoot: config.Git.Root,
}
}
func ProvideGitRPCClientConfig(config *types.Config) *gitrpc.ClientConfig {
return &gitrpc.ClientConfig{
Bind: config.Server.GRPC.Bind,
}
}

View File

@ -33,6 +33,7 @@ import (
func initSystem(ctx context.Context, config *gitnessTypes.Config) (*system, error) {
wire.Build(
newSystem,
PackageConfigsWireSet,
bootstrap.WireSet,
database.WireSet,
memory.WireSet,

View File

@ -78,17 +78,19 @@ func initSystem(ctx context.Context, config *types.Config) (*system, error) {
spaceStore := database.ProvideSpaceStore(db)
repoStore := database.ProvideRepoStore(db)
spaceController := space.NewController(authorizer, spaceStore, repoStore, serviceAccountStore)
gitrpcInterface, err := gitrpc.ProvideClient(config)
clientConfig := ProvideGitRPCClientConfig(config)
gitrpcInterface, err := gitrpc.ProvideClient(clientConfig)
if err != nil {
return nil, err
}
repoController := repo.NewController(authorizer, spaceStore, repoStore, serviceAccountStore, gitrpcInterface)
repoController := repo.ProvideController(authorizer, spaceStore, repoStore, serviceAccountStore, gitrpcInterface)
apiHandler := router.ProvideAPIHandler(systemStore, authenticator, accountClient, spaceController, repoController)
gitHandler := router2.ProvideGitHandler(repoStore, authenticator)
webHandler := router2.ProvideWebHandler(systemStore)
routerRouter := router2.ProvideRouter(apiHandler, gitHandler, webHandler)
serverServer := server.ProvideServer(config, routerRouter)
gitrpcServer, err := gitrpc.ProvideServer(config)
serverConfig := ProvideGitRPCServerConfig(config)
gitrpcServer, err := gitrpc.ProvideServer(serverConfig)
if err != nil {
return nil, err
}

View File

@ -31,6 +31,7 @@ import (
func initSystem(ctx context.Context, config *types.Config) (*system, error) {
wire.Build(
newSystem,
PackageConfigsWireSet,
bootstrap.WireSet,
database.WireSet,
memory.WireSet,

View File

@ -41,7 +41,8 @@ func initSystem(ctx context.Context, config *types.Config) (*system, error) {
authenticator := authn.ProvideAuthenticator(userStore, serviceAccountStore, tokenStore)
spaceStore := database.ProvideSpaceStore(db)
repoStore := database.ProvideRepoStore(db)
gitrpcInterface, err := gitrpc.ProvideClient(config)
clientConfig := ProvideGitRPCClientConfig(config)
gitrpcInterface, err := gitrpc.ProvideClient(clientConfig)
if err != nil {
return nil, err
}
@ -53,7 +54,8 @@ func initSystem(ctx context.Context, config *types.Config) (*system, error) {
webHandler := router.ProvideWebHandler(systemStore)
routerRouter := router.ProvideRouter(apiHandler, gitHandler, webHandler)
serverServer := server.ProvideServer(config, routerRouter)
gitrpcServer, err := gitrpc.ProvideServer(config)
serverConfig := ProvideGitRPCServerConfig(config)
gitrpcServer, err := gitrpc.ProvideServer(serverConfig)
if err != nil {
return nil, err
}

View File

@ -240,14 +240,16 @@ func (c *Controller) getDirContent(ctx context.Context, gitRepoUID string, gitRe
return nil, fmt.Errorf("failed to get content of dir: %w", err)
}
entries := make([]ContentInfo, 0, len(output.Nodes))
for _, v := range output.Nodes {
entries := make([]ContentInfo, len(output.Nodes))
for i := range output.Nodes {
node := output.Nodes[i]
var entry *ContentInfo
entry, err = mapToContentInfo(&v.TreeNode, v.Commit)
entry, err = mapToContentInfo(&node.TreeNode, node.Commit)
if err != nil {
return nil, err
}
entries = append(entries, *entry)
entries[i] = *entry
}
return &DirContent{

View File

@ -43,10 +43,9 @@ func (c *Controller) ListCommits(ctx context.Context, session *auth.Session,
return nil, 0, err
}
commits := make([]Commit, 0, len(rpcOut.Commits))
for _, rpcCommit := range rpcOut.Commits {
commit := mapCommit(rpcCommit)
commits = append(commits, commit)
commits := make([]Commit, len(rpcOut.Commits))
for i := range rpcOut.Commits {
commits[i] = mapCommit(rpcOut.Commits[i])
}
return commits, rpcOut.TotalCount, nil

View File

@ -4,7 +4,13 @@
package gitrpc
type Config struct {
RepoRoot string
RPCAddress string
// ServerConfig represents the configuration for the gitrpc server.
type ServerConfig struct {
GitRoot string
Bind string
}
// ClientConfig represents the config for the gitrpc client.
type ClientConfig struct {
Bind string
}

View File

@ -231,26 +231,28 @@ func (g giteaAdapter) ListTreeNodes(ctx context.Context, repoPath string,
return nil, fmt.Errorf("failed to list entries for tree '%s': %w", treePath, err)
}
nodes := make([]treeNode, 0, len(giteaEntries))
for _, giteaNode := range giteaEntries {
nodes := make([]treeNode, len(giteaEntries))
for i := range giteaEntries {
giteaEntry := giteaEntries[i]
var nodeType treeNodeType
var mode treeNodeMode
nodeType, mode, err = mapGiteaNodeToTreeNodeModeAndType(giteaNode.Mode())
nodeType, mode, err = mapGiteaNodeToTreeNodeModeAndType(giteaEntry.Mode())
if err != nil {
return nil, err
}
// giteaNode.Name() returns the path of the node relative to the tree.
relPath := giteaNode.Name()
relPath := giteaEntry.Name()
name := filepath.Base(relPath)
nodes = append(nodes, treeNode{
nodes[i] = treeNode{
nodeType: nodeType,
mode: mode,
sha: giteaNode.ID.String(),
sha: giteaEntry.ID.String(),
name: name,
path: filepath.Join(treePath, relPath),
})
}
}
return nodes, nil
@ -282,14 +284,14 @@ func (g giteaAdapter) ListCommits(ctx context.Context, repoPath string,
return nil, 0, fmt.Errorf("error getting total commit count: %w", err)
}
commits := make([]commit, 0, len(giteaCommits))
for _, giteaCommit := range giteaCommits {
commits := make([]commit, len(giteaCommits))
for i := range giteaCommits {
var commit *commit
commit, err = mapGiteaCommit(giteaCommit)
commit, err = mapGiteaCommit(giteaCommits[i])
if err != nil {
return nil, 0, err
}
commits = append(commits, *commit)
commits[i] = *commit
}
// TODO: save to cast to int from int64, or we expect exceeding int.MaxValue?

View File

@ -1,7 +1,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.27.1
// protoc v3.19.4
// protoc-gen-go v1.28.1
// protoc v3.21.7
// source: repo.proto
package rpc

View File

@ -1,7 +1,7 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
// - protoc-gen-go-grpc v1.2.0
// - protoc v3.19.4
// - protoc v3.21.7
// source: repo.proto
package rpc

View File

@ -1,7 +1,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.27.1
// protoc v3.19.4
// protoc-gen-go v1.28.1
// protoc v3.21.7
// source: shared.proto
package rpc

View File

@ -6,7 +6,6 @@ package gitrpc
import (
"github.com/google/wire"
"github.com/harness/gitness/types"
)
// WireSet provides a wire set for this package.
@ -15,10 +14,10 @@ var WireSet = wire.NewSet(
ProvideServer,
)
func ProvideClient(config *types.Config) (Interface, error) {
return InitClient(config.Server.GRPC.Bind)
func ProvideClient(config *ClientConfig) (Interface, error) {
return InitClient(config.Bind)
}
func ProvideServer(config *types.Config) (*Server, error) {
return NewServer(config.Server.GRPC.Bind, config.Git.Root)
func ProvideServer(config *ServerConfig) (*Server, error) {
return NewServer(config.Bind, config.GitRoot)
}

View File

@ -153,6 +153,8 @@ func setupRepos(r chi.Router, config *types.Config, repoCtrl *repo.Controller) {
r.Post("/move", handlerrepo.HandleMove(repoCtrl))
r.Get("/serviceAccounts", handlerrepo.HandleListServiceAccounts(repoCtrl))
r.Get("/commits", handlerrepo.HandleListCommits(repoCtrl))
r.Get("/content/*", handlerrepo.HandleGetContent(repoCtrl))
// repo path operations
r.Route("/paths", func(r chi.Router) {

View File

@ -54,6 +54,7 @@ func NewWebHandler(systemStore store.SystemStore) WebHandler {
)
// openapi playground endpoints
// TODO: this should not be generated and marshaled on the fly every time?
r.HandleFunc("/openapi.yaml", func(w http.ResponseWriter, r *http.Request) {
spec := openapi.Generate()
data, err := spec.MarshalYAML()