mirror of
https://github.com/go-gitea/gitea.git
synced 2026-08-06 19:08:57 +09:00
deccd53c24
1. always use "last commit cache" 2. correctly build the cache key for any input (SafeCacheKey) 3. fix the git note "last commit cache FIXME" and avoid OOM
51 lines
1.1 KiB
Go
51 lines
1.1 KiB
Go
// Copyright 2020 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
//go:build !gogit
|
|
|
|
package git
|
|
|
|
import (
|
|
"context"
|
|
)
|
|
|
|
// CacheCommit will cache the commit from the gitRepository
|
|
func (c *Commit) CacheCommit(ctx context.Context, gitRepo *Repository) error {
|
|
return c.recursiveCache(ctx, gitRepo, c.Tree(), "", 1)
|
|
}
|
|
|
|
func (c *Commit) recursiveCache(ctx context.Context, gitRepo *Repository, tree *Tree, treePath string, level int) error {
|
|
if level == 0 {
|
|
return nil
|
|
}
|
|
entries, err := tree.ListEntries(ctx, gitRepo)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
entryPaths := make([]string, len(entries))
|
|
for i, entry := range entries {
|
|
entryPaths[i] = entry.Name()
|
|
}
|
|
|
|
_, err = walkGitLog(ctx, gitRepo, c, treePath, entryPaths...)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, treeEntry := range entries {
|
|
// entryMap won't contain "" therefore skip this.
|
|
if treeEntry.IsDir() {
|
|
subTree, err := tree.SubTree(ctx, gitRepo, treeEntry.Name())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if err := c.recursiveCache(ctx, gitRepo, subTree, treeEntry.Name(), level-1); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|