Skip to content

Commit

Permalink
feat: adding support for git CLI operation over go-git (#73)
Browse files Browse the repository at this point in the history
* adding git commit message truncation logic for large messages

* first commit draft

* cleaning dead code

* added commit count

* fix git format in cmd

* added interfaces

* comments

* removing output

* minor restructuring

* removing deuplicacy for OpenNewRepo

* changes

* fixes

* wire

* old story refactor

* fixes for IT tests

* cleaning

* refactorings

* minor

* test fixes

* test fixes

* test fixes

* PR comments

* removing old changes

* cleaning up

* wire

* minor changes

* added comments on interface methods

* next error handling

* status
  • Loading branch information
subhashish-devtron authored Jan 8, 2024
1 parent 872c29f commit 448286b
Show file tree
Hide file tree
Showing 18 changed files with 1,148 additions and 609 deletions.
4 changes: 2 additions & 2 deletions api/GrpcHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ func (impl *GrpcHandlerImpl) GetCommitMetadata(ctx context.Context, req *pb.Comm
BranchName: req.BranchName,
}

var gitCommit *git.GitCommit
var gitCommit *git.GitCommitBase
var err error

if len(req.GitTag) > 0 {
Expand Down Expand Up @@ -771,7 +771,7 @@ func (impl *GrpcHandlerImpl) mapGitChanges(gitChanges *git.GitChanges) *pb.GitCh
}
}

func (impl *GrpcHandlerImpl) mapGitCommit(commit *git.GitCommit) (*pb.GitCommit, error) {
func (impl *GrpcHandlerImpl) mapGitCommit(commit *git.GitCommitBase) (*pb.GitCommit, error) {

// mapping FileStats
var mappedFileStats []*pb.FileStat
Expand Down
4 changes: 2 additions & 2 deletions api/RestHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ func (handler RestHandlerImpl) ReloadMaterial(w http.ResponseWriter, r *http.Req
}
}

//-------------
// -------------
func (handler RestHandlerImpl) FetchChanges(w http.ResponseWriter, r *http.Request) {
decoder := json.NewDecoder(r.Body)
material := &git.FetchScmChangesRequest{}
Expand Down Expand Up @@ -239,7 +239,7 @@ func (handler RestHandlerImpl) GetCommitMetadata(w http.ResponseWriter, r *http.
return
}
handler.logger.Infow("commit detail request", "req", material)
var commits *git.GitCommit
var commits *git.GitCommitBase
if len(material.GitTag) > 0 {
commits, err = handler.repositoryManager.GetCommitInfoForTag(material)
} else if len(material.BranchName) > 0 {
Expand Down
5 changes: 4 additions & 1 deletion internal/Configuration.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package internal

import "github.com/caarlos0/env"
import (
"github.com/caarlos0/env"
)

type Configuration struct {
CommitStatsTimeoutInSec int `env:"COMMIT_STATS_TIMEOUT_IN_SEC" envDefault:"2"`
EnableFileStats bool `env:"ENABLE_FILE_STATS" envDefault:"false"`
GitHistoryCount int `env:"GIT_HISTORY_COUNT" envDefault:"15"`
MinLimit int `env:"MIN_LIMIT_FOR_PVC" envDefault:"1"` // in MB
UseGitCli bool `env:"USE_GIT_CLI" envDefault:"false"`
}

func ParseConfiguration() (*Configuration, error) {
Expand Down
40 changes: 23 additions & 17 deletions pkg/RepoManages.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@ import (
type RepoManager interface {
GetHeadForPipelineMaterials(ids []int) ([]*git.CiPipelineMaterialBean, error)
FetchChanges(pipelineMaterialId int, from string, to string, count int, showAll bool) (*git.MaterialChangeResp, error) //limit
GetCommitMetadata(pipelineMaterialId int, gitHash string) (*git.GitCommit, error)
GetLatestCommitForBranch(pipelineMaterialId int, branchName string) (*git.GitCommit, error)
GetCommitMetadataForPipelineMaterial(pipelineMaterialId int, gitHash string) (*git.GitCommit, error)
GetCommitMetadata(pipelineMaterialId int, gitHash string) (*git.GitCommitBase, error)
GetLatestCommitForBranch(pipelineMaterialId int, branchName string) (*git.GitCommitBase, error)
GetCommitMetadataForPipelineMaterial(pipelineMaterialId int, gitHash string) (*git.GitCommitBase, error)

SaveGitProvider(provider *sql.GitProvider) (*sql.GitProvider, error)
AddRepo(material []*sql.GitMaterial) ([]*sql.GitMaterial, error)
Expand All @@ -42,7 +42,7 @@ type RepoManager interface {
ReloadAllRepo()
ResetRepo(materialId int) error
GetReleaseChanges(request *ReleaseChangesRequest) (*git.GitChanges, error)
GetCommitInfoForTag(request *git.CommitMetadataRequest) (*git.GitCommit, error)
GetCommitInfoForTag(request *git.CommitMetadataRequest) (*git.GitCommitBase, error)
RefreshGitMaterial(req *git.RefreshGitMaterialRequest) (*git.RefreshGitMaterialResponse, error)

GetWebhookAndCiDataById(id int, ciPipelineMaterialId int) (*git.WebhookAndCiData, error)
Expand All @@ -56,6 +56,7 @@ type RepoManagerImpl struct {
logger *zap.SugaredLogger
materialRepository sql.MaterialRepository
repositoryManager git.RepositoryManager
repositoryManagerAnalytics git.RepositoryManagerAnalytics
gitProviderRepository sql.GitProviderRepository
ciPipelineMaterialRepository sql.CiPipelineMaterialRepository
locker *internal.RepositoryLocker
Expand All @@ -66,12 +67,14 @@ type RepoManagerImpl struct {
webhookEventDataMappingFilterResultRepository sql.WebhookEventDataMappingFilterResultRepository
webhookEventBeanConverter git.WebhookEventBeanConverter
configuration *internal.Configuration
gitManager git.GitManagerImpl
}

func NewRepoManagerImpl(
logger *zap.SugaredLogger,
materialRepository sql.MaterialRepository,
repositoryManager git.RepositoryManager,
repositoryManagerAnalytics git.RepositoryManagerAnalytics,
gitProviderRepository sql.GitProviderRepository,
ciPipelineMaterialRepository sql.CiPipelineMaterialRepository,
locker *internal.RepositoryLocker,
Expand All @@ -81,11 +84,13 @@ func NewRepoManagerImpl(
webhookEventDataMappingFilterResultRepository sql.WebhookEventDataMappingFilterResultRepository,
webhookEventBeanConverter git.WebhookEventBeanConverter,
configuration *internal.Configuration,
gitManager git.GitManagerImpl,
) *RepoManagerImpl {
return &RepoManagerImpl{
logger: logger,
materialRepository: materialRepository,
repositoryManager: repositoryManager,
repositoryManagerAnalytics: repositoryManagerAnalytics,
gitProviderRepository: gitProviderRepository,
ciPipelineMaterialRepository: ciPipelineMaterialRepository,
locker: locker,
Expand All @@ -96,6 +101,7 @@ func NewRepoManagerImpl(
webhookEventDataMappingFilterResultRepository: webhookEventDataMappingFilterResultRepository,
webhookEventBeanConverter: webhookEventBeanConverter,
configuration: configuration,
gitManager: gitManager,
}
}

Expand Down Expand Up @@ -416,7 +422,7 @@ func (impl RepoManagerImpl) materialTOMaterialBeanConverter(material *sql.CiPipe
GitMaterialId: material.GitMaterialId,
Value: material.Value,
Active: material.Active,
GitCommit: &git.GitCommit{
GitCommit: &git.GitCommitBase{
Commit: material.LastSeenHash,
Author: material.CommitAuthor,
Date: material.CommitDate,
Expand Down Expand Up @@ -464,7 +470,7 @@ func (impl RepoManagerImpl) FetchGitCommitsForBranchFixPipeline(pipelineMaterial

return response, nil
}
commits := make([]*git.GitCommit, 0)
commits := make([]*git.GitCommitBase, 0)
err := json.Unmarshal([]byte(pipelineMaterial.CommitHistory), &commits)
if err != nil {
return nil, err
Expand All @@ -474,9 +480,9 @@ func (impl RepoManagerImpl) FetchGitCommitsForBranchFixPipeline(pipelineMaterial
return response, nil
}

filterCommits := make([]*git.GitCommit, 0)
filterCommits := make([]*git.GitCommitBase, 0)
for _, commit := range commits {
excluded := impl.gitWatcher.PathMatcher(commit.FileStats, gitMaterial)
excluded := impl.gitManager.PathMatcher(commit.FileStats, gitMaterial)
impl.logger.Debugw("include exclude result", "excluded", excluded)
if showAll {
commit.Excluded = excluded
Expand Down Expand Up @@ -535,9 +541,9 @@ func (impl RepoManagerImpl) FetchGitCommitsForWebhookTypePipeline(pipelineMateri
return response, nil
}

var commits []*git.GitCommit
var commits []*git.GitCommitBase
for _, webhookEventData := range webhookEventDataArr {
gitCommit := &git.GitCommit{
gitCommit := &git.GitCommitBase{
WebhookData: impl.webhookEventBeanConverter.ConvertFromWebhookParsedDataSqlBean(webhookEventData),
}
commits = append(commits, gitCommit)
Expand All @@ -546,7 +552,7 @@ func (impl RepoManagerImpl) FetchGitCommitsForWebhookTypePipeline(pipelineMateri
return response, nil
}

func (impl RepoManagerImpl) GetCommitInfoForTag(request *git.CommitMetadataRequest) (*git.GitCommit, error) {
func (impl RepoManagerImpl) GetCommitInfoForTag(request *git.CommitMetadataRequest) (*git.GitCommitBase, error) {
pipelineMaterial, err := impl.ciPipelineMaterialRepository.FindById(request.PipelineMaterialId)
if err != nil {
return nil, err
Expand Down Expand Up @@ -576,7 +582,7 @@ func (impl RepoManagerImpl) GetCommitInfoForTag(request *git.CommitMetadataReque
return commit, err
}

func (impl RepoManagerImpl) GetCommitMetadata(pipelineMaterialId int, gitHash string) (*git.GitCommit, error) {
func (impl RepoManagerImpl) GetCommitMetadata(pipelineMaterialId int, gitHash string) (*git.GitCommitBase, error) {
pipelineMaterial, err := impl.ciPipelineMaterialRepository.FindById(pipelineMaterialId)
if err != nil {
return nil, err
Expand All @@ -598,7 +604,7 @@ func (impl RepoManagerImpl) GetCommitMetadata(pipelineMaterialId int, gitHash st
return commit, err
}

func (impl RepoManagerImpl) GetLatestCommitForBranch(pipelineMaterialId int, branchName string) (*git.GitCommit, error) {
func (impl RepoManagerImpl) GetLatestCommitForBranch(pipelineMaterialId int, branchName string) (*git.GitCommitBase, error) {
pipelineMaterial, err := impl.ciPipelineMaterialRepository.FindById(pipelineMaterialId)

if err != nil {
Expand Down Expand Up @@ -628,7 +634,7 @@ func (impl RepoManagerImpl) GetLatestCommitForBranch(pipelineMaterialId int, bra
Username: userName,
Password: password,
}
updated, repo, err := impl.repositoryManager.Fetch(gitContext, gitMaterial.Url, gitMaterial.CheckoutLocation, gitMaterial)
updated, repo, err := impl.repositoryManager.Fetch(gitContext, gitMaterial.Url, gitMaterial.CheckoutLocation)
if !updated {
impl.logger.Warn("repository is up to date")
}
Expand Down Expand Up @@ -668,7 +674,7 @@ func (impl RepoManagerImpl) GetLatestCommitForBranch(pipelineMaterialId int, bra
}
}

func (impl RepoManagerImpl) GetCommitMetadataForPipelineMaterial(pipelineMaterialId int, gitHash string) (*git.GitCommit, error) {
func (impl RepoManagerImpl) GetCommitMetadataForPipelineMaterial(pipelineMaterialId int, gitHash string) (*git.GitCommitBase, error) {
// fetch ciPipelineMaterial
pipelineMaterial, err := impl.ciPipelineMaterialRepository.FindById(pipelineMaterialId)
if err != nil {
Expand Down Expand Up @@ -724,7 +730,7 @@ func (impl RepoManagerImpl) GetCommitMetadataForPipelineMaterial(pipelineMateria
return nil, nil
}
commit := commits[0]
excluded := impl.gitWatcher.PathMatcher(commit.FileStats, gitMaterial)
excluded := impl.gitManager.PathMatcher(commit.FileStats, gitMaterial)
commit.Excluded = excluded
return commits[0], err
}
Expand All @@ -747,7 +753,7 @@ func (impl RepoManagerImpl) GetReleaseChanges(request *ReleaseChangesRequest) (*
repoLock.Mutex.Unlock()
impl.locker.ReturnLocker(gitMaterial.Id)
}()
gitChanges, err := impl.repositoryManager.ChangesSinceByRepositoryForAnalytics(gitMaterial.CheckoutLocation, pipelineMaterial.Value, request.OldCommit, request.NewCommit)
gitChanges, err := impl.repositoryManagerAnalytics.ChangesSinceByRepositoryForAnalytics(gitMaterial.CheckoutLocation, pipelineMaterial.Value, request.OldCommit, request.NewCommit)
if err != nil {
impl.logger.Errorw("error in computing changes", "req", request, "err", err)
} else {
Expand Down
Loading

0 comments on commit 448286b

Please sign in to comment.