summaryrefslogtreecommitdiffstats
path: root/models/renderhelper/commit_checker.go
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2024-11-24 16:18:57 +0800
committerGitHub <noreply@github.com>2024-11-24 16:18:57 +0800
commit633785a5f3fe00789a6cba7cc0db1333de1e9c52 (patch)
tree2a2703ee9ed41c9caa508bd72c3fb5b52716af16 /models/renderhelper/commit_checker.go
parentfa175c16949f09757ae85db6697cec327c44cba9 (diff)
downloadgitea-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.go53
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
+}