diff options
author | wxiaoguang <wxiaoguang@gmail.com> | 2024-11-24 16:18:57 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-24 16:18:57 +0800 |
commit | 633785a5f3fe00789a6cba7cc0db1333de1e9c52 (patch) | |
tree | 2a2703ee9ed41c9caa508bd72c3fb5b52716af16 /models/renderhelper/commit_checker.go | |
parent | fa175c16949f09757ae85db6697cec327c44cba9 (diff) | |
download | gitea-633785a5f3fe00789a6cba7cc0db1333de1e9c52.tar.gz gitea-633785a5f3fe00789a6cba7cc0db1333de1e9c52.zip |
Refactor markup render system (#32612)
This PR removes (almost) all path tricks, and introduces "renderhelper"
package.
Now we can clearly see the rendering behaviors for comment/file/wiki,
more details are in "renderhelper" tests.
Fix #31411 , fix #18592, fix #25632 and maybe more problems. (ps: fix
#32608 by the way)
Diffstat (limited to 'models/renderhelper/commit_checker.go')
-rw-r--r-- | models/renderhelper/commit_checker.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/models/renderhelper/commit_checker.go b/models/renderhelper/commit_checker.go new file mode 100644 index 0000000000..4815643e67 --- /dev/null +++ b/models/renderhelper/commit_checker.go @@ -0,0 +1,53 @@ +// 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 hashs with gogit edition. + c.commitCache[commitID] = exist + return exist +} |