| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- // Copyright 2024 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- package renderhelper
-
- import (
- "context"
- "io"
-
- "code.gitea.io/gitea/modules/git"
- "code.gitea.io/gitea/modules/gitrepo"
- "code.gitea.io/gitea/modules/log"
- )
-
- type commitChecker struct {
- ctx context.Context
- commitCache map[string]bool
- gitRepoFacade gitrepo.Repository
-
- gitRepo *git.Repository
- gitRepoCloser io.Closer
- }
-
- func newCommitChecker(ctx context.Context, gitRepo gitrepo.Repository) *commitChecker {
- return &commitChecker{ctx: ctx, commitCache: make(map[string]bool), gitRepoFacade: gitRepo}
- }
-
- func (c *commitChecker) Close() error {
- if c != nil && c.gitRepoCloser != nil {
- return c.gitRepoCloser.Close()
- }
- return nil
- }
-
- func (c *commitChecker) IsCommitIDExisting(commitID string) bool {
- exist, inCache := c.commitCache[commitID]
- if inCache {
- return exist
- }
-
- if c.gitRepo == nil {
- r, closer, err := gitrepo.RepositoryFromContextOrOpen(c.ctx, c.gitRepoFacade)
- if err != nil {
- log.Error("unable to open repository: %s Error: %v", gitrepo.RepoGitURL(c.gitRepoFacade), err)
- return false
- }
- c.gitRepo, c.gitRepoCloser = r, closer
- }
-
- exist = c.gitRepo.IsReferenceExist(commitID) // Don't use IsObjectExist since it doesn't support short hashes with gogit edition.
- c.commitCache[commitID] = exist
- return exist
- }
|