]> source.dussan.org Git - gitea.git/commitdiff
Fix a branch divergence cache bug (#31659)
authorZettat123 <zettat123@gmail.com>
Fri, 19 Jul 2024 15:52:49 +0000 (23:52 +0800)
committerGitHub <noreply@github.com>
Fri, 19 Jul 2024 15:52:49 +0000 (17:52 +0200)
Fix #31599

A branch divergence is counted based on the default branch. If the
default branch is updated, all divergence caches of the repo need to be
deleted.

services/repository/branch.go
services/repository/push.go

index 869921bfbc56bfcad2f1ba9bb9a67eccd93f0286..7fc99930776a1f98f77dc5e94093258c84b34b0a 100644 (file)
@@ -147,6 +147,23 @@ func DelDivergenceFromCache(repoID int64, branchName string) error {
        return cache.GetCache().Delete(getDivergenceCacheKey(repoID, branchName))
 }
 
+// DelRepoDivergenceFromCache deletes all divergence caches of a repository
+func DelRepoDivergenceFromCache(ctx context.Context, repoID int64) error {
+       dbBranches, err := db.Find[git_model.Branch](ctx, git_model.FindBranchOptions{
+               RepoID:      repoID,
+               ListOptions: db.ListOptionsAll,
+       })
+       if err != nil {
+               return err
+       }
+       for i := range dbBranches {
+               if err := DelDivergenceFromCache(repoID, dbBranches[i].Name); err != nil {
+                       log.Error("DelDivergenceFromCache: %v", err)
+               }
+       }
+       return nil
+}
+
 func loadOneBranch(ctx context.Context, repo *repo_model.Repository, dbBranch *git_model.Branch, protectedBranches *git_model.ProtectedBranchRules,
        repoIDToRepo map[int64]*repo_model.Repository,
        repoIDToGitRepo map[int64]*git.Repository,
index 39843249a53a7ff12a36b11875bd719ba2c3a929..f27e6a58dd6cee25050e0c20d463a0bdf7018d8a 100644 (file)
@@ -221,8 +221,14 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
                                }
 
                                // delete cache for divergence
-                               if err := DelDivergenceFromCache(repo.ID, branch); err != nil {
-                                       log.Error("DelDivergenceFromCache: %v", err)
+                               if branch == repo.DefaultBranch {
+                                       if err := DelRepoDivergenceFromCache(ctx, repo.ID); err != nil {
+                                               log.Error("DelRepoDivergenceFromCache: %v", err)
+                                       }
+                               } else {
+                                       if err := DelDivergenceFromCache(repo.ID, branch); err != nil {
+                                               log.Error("DelDivergenceFromCache: %v", err)
+                                       }
                                }
 
                                commits := repo_module.GitToPushCommits(l)