aboutsummaryrefslogtreecommitdiffstats
path: root/services/repository/files/commit.go
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2024-03-06 20:17:19 +0800
committerGitHub <noreply@github.com>2024-03-06 12:17:19 +0000
commite308d25f1b2fe24b4735432b05e5e221879a2705 (patch)
tree24abb4223c41fb82254b14a7520e8a2859fe4263 /services/repository/files/commit.go
parent90a3f2d4b7ed3890d9655c0334444f86d89b7b30 (diff)
downloadgitea-e308d25f1b2fe24b4735432b05e5e221879a2705.tar.gz
gitea-e308d25f1b2fe24b4735432b05e5e221879a2705.zip
Cache repository default branch commit status to reduce query on commit status table (#29444)
After repository commit status has been introduced on dashaboard, the most top SQL comes from `GetLatestCommitStatusForPairs`. This PR adds a cache for the repository's default branch's latest combined commit status. When a new commit status updated, the cache will be marked as invalid. <img width="998" alt="image" src="https://github.com/go-gitea/gitea/assets/81045/76759de7-3a83-4d54-8571-278f5422aed3">
Diffstat (limited to 'services/repository/files/commit.go')
-rw-r--r--services/repository/files/commit.go48
1 files changed, 0 insertions, 48 deletions
diff --git a/services/repository/files/commit.go b/services/repository/files/commit.go
index 512aec7c81..e0dad29273 100644
--- a/services/repository/files/commit.go
+++ b/services/repository/files/commit.go
@@ -5,61 +5,13 @@ package files
import (
"context"
- "fmt"
asymkey_model "code.gitea.io/gitea/models/asymkey"
- git_model "code.gitea.io/gitea/models/git"
repo_model "code.gitea.io/gitea/models/repo"
- user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/git"
- "code.gitea.io/gitea/modules/gitrepo"
"code.gitea.io/gitea/modules/structs"
- "code.gitea.io/gitea/services/automerge"
)
-// CreateCommitStatus creates a new CommitStatus given a bunch of parameters
-// NOTE: All text-values will be trimmed from whitespaces.
-// Requires: Repo, Creator, SHA
-func CreateCommitStatus(ctx context.Context, repo *repo_model.Repository, creator *user_model.User, sha string, status *git_model.CommitStatus) error {
- repoPath := repo.RepoPath()
-
- // confirm that commit is exist
- gitRepo, closer, err := gitrepo.RepositoryFromContextOrOpen(ctx, repo)
- if err != nil {
- return fmt.Errorf("OpenRepository[%s]: %w", repoPath, err)
- }
- defer closer.Close()
-
- objectFormat := git.ObjectFormatFromName(repo.ObjectFormatName)
-
- commit, err := gitRepo.GetCommit(sha)
- if err != nil {
- gitRepo.Close()
- return fmt.Errorf("GetCommit[%s]: %w", sha, err)
- } else if len(sha) != objectFormat.FullLength() {
- // use complete commit sha
- sha = commit.ID.String()
- }
- gitRepo.Close()
-
- if err := git_model.NewCommitStatus(ctx, git_model.NewCommitStatusOptions{
- Repo: repo,
- Creator: creator,
- SHA: commit.ID,
- CommitStatus: status,
- }); err != nil {
- return fmt.Errorf("NewCommitStatus[repo_id: %d, user_id: %d, sha: %s]: %w", repo.ID, creator.ID, sha, err)
- }
-
- if status.State.IsSuccess() {
- if err := automerge.MergeScheduledPullRequest(ctx, sha, repo); err != nil {
- return fmt.Errorf("MergeScheduledPullRequest[repo_id: %d, user_id: %d, sha: %s]: %w", repo.ID, creator.ID, sha, err)
- }
- }
-
- return nil
-}
-
// CountDivergingCommits determines how many commits a branch is ahead or behind the repository's base branch
func CountDivergingCommits(ctx context.Context, repo *repo_model.Repository, branch string) (*git.DivergeObject, error) {
divergence, err := git.GetDivergingCommits(ctx, repo.RepoPath(), repo.DefaultBranch, branch)