mirror of
https://codeberg.org/forgejo/forgejo
synced 2024-11-30 05:46:09 +01:00
001dbf100d
One of the biggest reasons for slow repository browsing is that we wait until last commit information has been generated for all files in the repository. This PR proposes deferring this generation to a new POST endpoint that does the look up outside of the main page request. Signed-off-by: Andrew Thornton <art27@cantab.net>
35 lines
1 KiB
Go
35 lines
1 KiB
Go
// 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 git
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"fmt"
|
|
|
|
"code.gitea.io/gitea/modules/log"
|
|
)
|
|
|
|
// Cache represents a caching interface
|
|
type Cache interface {
|
|
// Put puts value into cache with key and expire time.
|
|
Put(key string, val interface{}, timeout int64) error
|
|
// Get gets cached value by given key.
|
|
Get(key string) interface{}
|
|
}
|
|
|
|
func (c *LastCommitCache) getCacheKey(repoPath, ref, entryPath string) string {
|
|
hashBytes := sha256.Sum256([]byte(fmt.Sprintf("%s:%s:%s", repoPath, ref, entryPath)))
|
|
return fmt.Sprintf("last_commit:%x", hashBytes)
|
|
}
|
|
|
|
// Put put the last commit id with commit and entry path
|
|
func (c *LastCommitCache) Put(ref, entryPath, commitID string) error {
|
|
if c == nil || c.cache == nil {
|
|
return nil
|
|
}
|
|
log.Debug("LastCommitCache save: [%s:%s:%s]", ref, entryPath, commitID)
|
|
return c.cache.Put(c.getCacheKey(c.repoPath, ref, entryPath), commitID, c.ttl())
|
|
}
|