12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- // Copyright 2020 The Gitea Authors. All rights reserved.
- // Use of this source code is governed by a MIT-style
- // license that can be found in the LICENSE file.
-
- package cache
-
- import (
- "fmt"
-
- "code.gitea.io/gitea/modules/git"
- "code.gitea.io/gitea/modules/log"
-
- mc "gitea.com/macaron/cache"
- "github.com/go-git/go-git/v5/plumbing/object"
- )
-
- // LastCommitCache represents a cache to store last commit
- type LastCommitCache struct {
- repoPath string
- ttl int64
- repo *git.Repository
- commitCache map[string]*object.Commit
- mc.Cache
- }
-
- // NewLastCommitCache creates a new last commit cache for repo
- func NewLastCommitCache(repoPath string, gitRepo *git.Repository, ttl int64) *LastCommitCache {
- return &LastCommitCache{
- repoPath: repoPath,
- repo: gitRepo,
- commitCache: make(map[string]*object.Commit),
- ttl: ttl,
- Cache: conn,
- }
- }
-
- // Get get the last commit information by commit id and entry path
- func (c LastCommitCache) Get(ref, entryPath string) (*object.Commit, error) {
- v := c.Cache.Get(fmt.Sprintf("last_commit:%s:%s:%s", c.repoPath, ref, entryPath))
- if vs, ok := v.(string); ok {
- log.Trace("LastCommitCache hit level 1: [%s:%s:%s]", ref, entryPath, vs)
- if commit, ok := c.commitCache[vs]; ok {
- log.Trace("LastCommitCache hit level 2: [%s:%s:%s]", ref, entryPath, vs)
- return commit, nil
- }
- id, err := c.repo.ConvertToSHA1(vs)
- if err != nil {
- return nil, err
- }
- commit, err := c.repo.GoGitRepo().CommitObject(id)
- if err != nil {
- return nil, err
- }
- c.commitCache[vs] = commit
- return commit, nil
- }
- return nil, nil
- }
-
- // Put put the last commit id with commit and entry path
- func (c LastCommitCache) Put(ref, entryPath, commitID string) error {
- log.Trace("LastCommitCache save: [%s:%s:%s]", ref, entryPath, commitID)
- return c.Cache.Put(fmt.Sprintf("last_commit:%s:%s:%s", c.repoPath, ref, entryPath), commitID, c.ttl)
- }
|