code.gitea.io/gitea@v1.19.3/modules/git/last_commit_cache_nogogit.go (about)

     1  // Copyright 2020 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  //go:build !gogit
     5  
     6  package git
     7  
     8  import (
     9  	"context"
    10  )
    11  
    12  // CacheCommit will cache the commit from the gitRepository
    13  func (c *Commit) CacheCommit(ctx context.Context) error {
    14  	if c.repo.LastCommitCache == nil {
    15  		return nil
    16  	}
    17  	return c.recursiveCache(ctx, &c.Tree, "", 1)
    18  }
    19  
    20  func (c *Commit) recursiveCache(ctx context.Context, tree *Tree, treePath string, level int) error {
    21  	if level == 0 {
    22  		return nil
    23  	}
    24  
    25  	entries, err := tree.ListEntries()
    26  	if err != nil {
    27  		return err
    28  	}
    29  
    30  	entryPaths := make([]string, len(entries))
    31  	for i, entry := range entries {
    32  		entryPaths[i] = entry.Name()
    33  	}
    34  
    35  	_, err = WalkGitLog(ctx, c.repo, c, treePath, entryPaths...)
    36  	if err != nil {
    37  		return err
    38  	}
    39  
    40  	for _, treeEntry := range entries {
    41  		// entryMap won't contain "" therefore skip this.
    42  		if treeEntry.IsDir() {
    43  			subTree, err := tree.SubTree(treeEntry.Name())
    44  			if err != nil {
    45  				return err
    46  			}
    47  			if err := c.recursiveCache(ctx, subTree, treeEntry.Name(), level-1); err != nil {
    48  				return err
    49  			}
    50  		}
    51  	}
    52  
    53  	return nil
    54  }