feat: [CODE-2086]: backfill PR stats data for list PRs API (#2234)

* backfill PR stats data for list PRs API
unified-ui
Marko Gaćeša 2024-07-18 12:18:03 +00:00 committed by Harness
parent da44afe021
commit 340cdd659c
2 changed files with 32 additions and 14 deletions

View File

@ -23,6 +23,8 @@ import (
"github.com/harness/gitness/git"
"github.com/harness/gitness/types"
"github.com/harness/gitness/types/enum"
"github.com/rs/zerolog/log"
)
// Find returns a pull request from the provided repository.
@ -46,21 +48,29 @@ func (c *Controller) Find(
return nil, err
}
headRef := pr.SourceSHA
baseRef := pr.MergeBaseSHA
if s := pr.Stats.DiffStats; s.Commits == nil || s.FilesChanged == nil || s.Additions == nil || s.Deletions == nil {
output, err := c.git.DiffStats(ctx, &git.DiffParams{
ReadParams: git.CreateReadParams(repo),
BaseRef: baseRef,
HeadRef: headRef,
})
if err != nil {
return nil, err
}
pr.Stats.DiffStats = types.NewDiffStats(output.Commits, output.FilesChanged, output.Additions, output.Deletions)
if err := c.backfillStats(ctx, repo, pr); err != nil {
log.Ctx(ctx).Warn().Err(err).Msg("failed to backfill PR stats")
}
return pr, nil
}
func (c *Controller) backfillStats(ctx context.Context, repo *types.Repository, pr *types.PullReq) error {
s := pr.Stats.DiffStats
if s.Commits != nil && s.FilesChanged != nil && s.Additions != nil && s.Deletions != nil {
return nil
}
output, err := c.git.DiffStats(ctx, &git.DiffParams{
ReadParams: git.CreateReadParams(repo),
BaseRef: pr.MergeBaseSHA,
HeadRef: pr.SourceSHA,
})
if err != nil {
return fmt.Errorf("failed get diff stats: %w", err)
}
pr.Stats.DiffStats = types.NewDiffStats(output.Commits, output.FilesChanged, output.Additions, output.Deletions)
return nil
}

View File

@ -22,6 +22,8 @@ import (
"github.com/harness/gitness/store/database/dbtx"
"github.com/harness/gitness/types"
"github.com/harness/gitness/types/enum"
"github.com/rs/zerolog/log"
)
// List returns a list of pull requests from the provided repository.
@ -74,5 +76,11 @@ func (c *Controller) List(
return nil, 0, err
}
for _, pr := range list {
if err := c.backfillStats(ctx, repo, pr); err != nil {
log.Ctx(ctx).Warn().Err(err).Msg("failed to backfill PR stats")
}
}
return list, count, nil
}