mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 17:24:22 +00:00 
			
		
		
		
	Make commit info cancelable (#16032)
* Make modules/context.Context a context.Context Signed-off-by: Andrew Thornton <art27@cantab.net> * Simplify context calls Signed-off-by: Andrew Thornton <art27@cantab.net> * Set the base context for requests to the HammerContext Signed-off-by: Andrew Thornton <art27@cantab.net> * pass context into get-last-commit Signed-off-by: Andrew Thornton <art27@cantab.net> * Make commit_info cancellable Signed-off-by: Andrew Thornton <art27@cantab.net> * use context as context Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: 6543 <6543@obermui.de>
This commit is contained in:
		@@ -7,6 +7,7 @@
 | 
				
			|||||||
package git
 | 
					package git
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"path"
 | 
						"path"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/emirpasic/gods/trees/binaryheap"
 | 
						"github.com/emirpasic/gods/trees/binaryheap"
 | 
				
			||||||
@@ -16,7 +17,7 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetCommitsInfo gets information of all commits that are corresponding to these entries
 | 
					// GetCommitsInfo gets information of all commits that are corresponding to these entries
 | 
				
			||||||
func (tes Entries) GetCommitsInfo(commit *Commit, treePath string, cache *LastCommitCache) ([]CommitInfo, *Commit, error) {
 | 
					func (tes Entries) GetCommitsInfo(ctx context.Context, commit *Commit, treePath string, cache *LastCommitCache) ([]CommitInfo, *Commit, error) {
 | 
				
			||||||
	entryPaths := make([]string, len(tes)+1)
 | 
						entryPaths := make([]string, len(tes)+1)
 | 
				
			||||||
	// Get the commit for the treePath itself
 | 
						// Get the commit for the treePath itself
 | 
				
			||||||
	entryPaths[0] = ""
 | 
						entryPaths[0] = ""
 | 
				
			||||||
@@ -42,7 +43,7 @@ func (tes Entries) GetCommitsInfo(commit *Commit, treePath string, cache *LastCo
 | 
				
			|||||||
			return nil, nil, err
 | 
								return nil, nil, err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if len(unHitPaths) > 0 {
 | 
							if len(unHitPaths) > 0 {
 | 
				
			||||||
			revs2, err := GetLastCommitForPaths(c, treePath, unHitPaths)
 | 
								revs2, err := GetLastCommitForPaths(ctx, c, treePath, unHitPaths)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				return nil, nil, err
 | 
									return nil, nil, err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -55,7 +56,7 @@ func (tes Entries) GetCommitsInfo(commit *Commit, treePath string, cache *LastCo
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		revs, err = GetLastCommitForPaths(c, treePath, entryPaths)
 | 
							revs, err = GetLastCommitForPaths(ctx, c, treePath, entryPaths)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, nil, err
 | 
							return nil, nil, err
 | 
				
			||||||
@@ -173,7 +174,7 @@ func getLastCommitForPathsByCache(commitID, treePath string, paths []string, cac
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetLastCommitForPaths returns last commit information
 | 
					// GetLastCommitForPaths returns last commit information
 | 
				
			||||||
func GetLastCommitForPaths(c cgobject.CommitNode, treePath string, paths []string) (map[string]*object.Commit, error) {
 | 
					func GetLastCommitForPaths(ctx context.Context, c cgobject.CommitNode, treePath string, paths []string) (map[string]*object.Commit, error) {
 | 
				
			||||||
	// We do a tree traversal with nodes sorted by commit time
 | 
						// We do a tree traversal with nodes sorted by commit time
 | 
				
			||||||
	heap := binaryheap.NewWith(func(a, b interface{}) int {
 | 
						heap := binaryheap.NewWith(func(a, b interface{}) int {
 | 
				
			||||||
		if a.(*commitAndPaths).commit.CommitTime().Before(b.(*commitAndPaths).commit.CommitTime()) {
 | 
							if a.(*commitAndPaths).commit.CommitTime().Before(b.(*commitAndPaths).commit.CommitTime()) {
 | 
				
			||||||
@@ -192,6 +193,11 @@ func GetLastCommitForPaths(c cgobject.CommitNode, treePath string, paths []strin
 | 
				
			|||||||
	heap.Push(&commitAndPaths{c, paths, initialHashes})
 | 
						heap.Push(&commitAndPaths{c, paths, initialHashes})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for {
 | 
						for {
 | 
				
			||||||
 | 
							select {
 | 
				
			||||||
 | 
							case <-ctx.Done():
 | 
				
			||||||
 | 
								return nil, ctx.Err()
 | 
				
			||||||
 | 
							default:
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		cIn, ok := heap.Pop()
 | 
							cIn, ok := heap.Pop()
 | 
				
			||||||
		if !ok {
 | 
							if !ok {
 | 
				
			||||||
			break
 | 
								break
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,7 @@ package git
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"bufio"
 | 
						"bufio"
 | 
				
			||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"io"
 | 
						"io"
 | 
				
			||||||
	"math"
 | 
						"math"
 | 
				
			||||||
@@ -18,7 +19,7 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetCommitsInfo gets information of all commits that are corresponding to these entries
 | 
					// GetCommitsInfo gets information of all commits that are corresponding to these entries
 | 
				
			||||||
func (tes Entries) GetCommitsInfo(commit *Commit, treePath string, cache *LastCommitCache) ([]CommitInfo, *Commit, error) {
 | 
					func (tes Entries) GetCommitsInfo(ctx context.Context, commit *Commit, treePath string, cache *LastCommitCache) ([]CommitInfo, *Commit, error) {
 | 
				
			||||||
	entryPaths := make([]string, len(tes)+1)
 | 
						entryPaths := make([]string, len(tes)+1)
 | 
				
			||||||
	// Get the commit for the treePath itself
 | 
						// Get the commit for the treePath itself
 | 
				
			||||||
	entryPaths[0] = ""
 | 
						entryPaths[0] = ""
 | 
				
			||||||
@@ -31,13 +32,13 @@ func (tes Entries) GetCommitsInfo(commit *Commit, treePath string, cache *LastCo
 | 
				
			|||||||
	var revs map[string]*Commit
 | 
						var revs map[string]*Commit
 | 
				
			||||||
	if cache != nil {
 | 
						if cache != nil {
 | 
				
			||||||
		var unHitPaths []string
 | 
							var unHitPaths []string
 | 
				
			||||||
		revs, unHitPaths, err = getLastCommitForPathsByCache(commit.ID.String(), treePath, entryPaths, cache)
 | 
							revs, unHitPaths, err = getLastCommitForPathsByCache(ctx, commit.ID.String(), treePath, entryPaths, cache)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return nil, nil, err
 | 
								return nil, nil, err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if len(unHitPaths) > 0 {
 | 
							if len(unHitPaths) > 0 {
 | 
				
			||||||
			sort.Strings(unHitPaths)
 | 
								sort.Strings(unHitPaths)
 | 
				
			||||||
			commits, err := GetLastCommitForPaths(commit, treePath, unHitPaths)
 | 
								commits, err := GetLastCommitForPaths(ctx, commit, treePath, unHitPaths)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				return nil, nil, err
 | 
									return nil, nil, err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -53,7 +54,7 @@ func (tes Entries) GetCommitsInfo(commit *Commit, treePath string, cache *LastCo
 | 
				
			|||||||
		sort.Strings(entryPaths)
 | 
							sort.Strings(entryPaths)
 | 
				
			||||||
		revs = map[string]*Commit{}
 | 
							revs = map[string]*Commit{}
 | 
				
			||||||
		var foundCommits []*Commit
 | 
							var foundCommits []*Commit
 | 
				
			||||||
		foundCommits, err = GetLastCommitForPaths(commit, treePath, entryPaths)
 | 
							foundCommits, err = GetLastCommitForPaths(ctx, commit, treePath, entryPaths)
 | 
				
			||||||
		for i, found := range foundCommits {
 | 
							for i, found := range foundCommits {
 | 
				
			||||||
			revs[entryPaths[i]] = found
 | 
								revs[entryPaths[i]] = found
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -101,7 +102,7 @@ func (tes Entries) GetCommitsInfo(commit *Commit, treePath string, cache *LastCo
 | 
				
			|||||||
	return commitsInfo, treeCommit, nil
 | 
						return commitsInfo, treeCommit, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func getLastCommitForPathsByCache(commitID, treePath string, paths []string, cache *LastCommitCache) (map[string]*Commit, []string, error) {
 | 
					func getLastCommitForPathsByCache(ctx context.Context, commitID, treePath string, paths []string, cache *LastCommitCache) (map[string]*Commit, []string, error) {
 | 
				
			||||||
	wr, rd, cancel := cache.repo.CatFileBatch()
 | 
						wr, rd, cancel := cache.repo.CatFileBatch()
 | 
				
			||||||
	defer cancel()
 | 
						defer cancel()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -124,7 +125,7 @@ func getLastCommitForPathsByCache(commitID, treePath string, paths []string, cac
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetLastCommitForPaths returns last commit information
 | 
					// GetLastCommitForPaths returns last commit information
 | 
				
			||||||
func GetLastCommitForPaths(commit *Commit, treePath string, paths []string) ([]*Commit, error) {
 | 
					func GetLastCommitForPaths(ctx context.Context, commit *Commit, treePath string, paths []string) ([]*Commit, error) {
 | 
				
			||||||
	// We read backwards from the commit to obtain all of the commits
 | 
						// We read backwards from the commit to obtain all of the commits
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// We'll do this by using rev-list to provide us with parent commits in order
 | 
						// We'll do this by using rev-list to provide us with parent commits in order
 | 
				
			||||||
@@ -136,7 +137,7 @@ func GetLastCommitForPaths(commit *Commit, treePath string, paths []string) ([]*
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	go func() {
 | 
						go func() {
 | 
				
			||||||
		stderr := strings.Builder{}
 | 
							stderr := strings.Builder{}
 | 
				
			||||||
		err := NewCommand("rev-list", "--format=%T", commit.ID.String()).RunInDirPipeline(commit.repo.Path, revListWriter, &stderr)
 | 
							err := NewCommand("rev-list", "--format=%T", commit.ID.String()).SetParentContext(ctx).RunInDirPipeline(commit.repo.Path, revListWriter, &stderr)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			_ = revListWriter.CloseWithError(ConcatenateError(err, (&stderr).String()))
 | 
								_ = revListWriter.CloseWithError(ConcatenateError(err, (&stderr).String()))
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
@@ -202,6 +203,11 @@ revListLoop:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	treeReadingLoop:
 | 
						treeReadingLoop:
 | 
				
			||||||
		for {
 | 
							for {
 | 
				
			||||||
 | 
								select {
 | 
				
			||||||
 | 
								case <-ctx.Done():
 | 
				
			||||||
 | 
									return nil, ctx.Err()
 | 
				
			||||||
 | 
								default:
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			_, _, size, err := ReadBatchLine(batchReader)
 | 
								_, _, size, err := ReadBatchLine(batchReader)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				return nil, err
 | 
									return nil, err
 | 
				
			||||||
@@ -321,6 +327,9 @@ revListLoop:
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if scan.Err() != nil {
 | 
				
			||||||
 | 
							return nil, scan.Err()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	commitsMap := make(map[string]*Commit, len(commits))
 | 
						commitsMap := make(map[string]*Commit, len(commits))
 | 
				
			||||||
	commitsMap[commit.ID.String()] = commit
 | 
						commitsMap[commit.ID.String()] = commit
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,7 @@
 | 
				
			|||||||
package git
 | 
					package git
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
@@ -69,7 +70,7 @@ func testGetCommitsInfo(t *testing.T, repo1 *Repository) {
 | 
				
			|||||||
		assert.NoError(t, err)
 | 
							assert.NoError(t, err)
 | 
				
			||||||
		entries, err := tree.ListEntries()
 | 
							entries, err := tree.ListEntries()
 | 
				
			||||||
		assert.NoError(t, err)
 | 
							assert.NoError(t, err)
 | 
				
			||||||
		commitsInfo, treeCommit, err := entries.GetCommitsInfo(commit, testCase.Path, nil)
 | 
							commitsInfo, treeCommit, err := entries.GetCommitsInfo(context.Background(), commit, testCase.Path, nil)
 | 
				
			||||||
		assert.NoError(t, err)
 | 
							assert.NoError(t, err)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			t.FailNow()
 | 
								t.FailNow()
 | 
				
			||||||
@@ -136,7 +137,7 @@ func BenchmarkEntries_GetCommitsInfo(b *testing.B) {
 | 
				
			|||||||
		b.ResetTimer()
 | 
							b.ResetTimer()
 | 
				
			||||||
		b.Run(benchmark.name, func(b *testing.B) {
 | 
							b.Run(benchmark.name, func(b *testing.B) {
 | 
				
			||||||
			for i := 0; i < b.N; i++ {
 | 
								for i := 0; i < b.N; i++ {
 | 
				
			||||||
				_, _, err := entries.GetCommitsInfo(commit, "", nil)
 | 
									_, _, err := entries.GetCommitsInfo(context.Background(), commit, "", nil)
 | 
				
			||||||
				if err != nil {
 | 
									if err != nil {
 | 
				
			||||||
					b.Fatal(err)
 | 
										b.Fatal(err)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,7 @@
 | 
				
			|||||||
package git
 | 
					package git
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"path"
 | 
						"path"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/go-git/go-git/v5/plumbing/object"
 | 
						"github.com/go-git/go-git/v5/plumbing/object"
 | 
				
			||||||
@@ -60,7 +61,7 @@ func (c *LastCommitCache) Get(ref, entryPath string) (interface{}, error) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CacheCommit will cache the commit from the gitRepository
 | 
					// CacheCommit will cache the commit from the gitRepository
 | 
				
			||||||
func (c *LastCommitCache) CacheCommit(commit *Commit) error {
 | 
					func (c *LastCommitCache) CacheCommit(ctx context.Context, commit *Commit) error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	commitNodeIndex, _ := commit.repo.CommitNodeIndex()
 | 
						commitNodeIndex, _ := commit.repo.CommitNodeIndex()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -69,10 +70,10 @@ func (c *LastCommitCache) CacheCommit(commit *Commit) error {
 | 
				
			|||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return c.recursiveCache(index, &commit.Tree, "", 1)
 | 
						return c.recursiveCache(ctx, index, &commit.Tree, "", 1)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *LastCommitCache) recursiveCache(index cgobject.CommitNode, tree *Tree, treePath string, level int) error {
 | 
					func (c *LastCommitCache) recursiveCache(ctx context.Context, index cgobject.CommitNode, tree *Tree, treePath string, level int) error {
 | 
				
			||||||
	if level == 0 {
 | 
						if level == 0 {
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -89,7 +90,7 @@ func (c *LastCommitCache) recursiveCache(index cgobject.CommitNode, tree *Tree,
 | 
				
			|||||||
		entryMap[entry.Name()] = entry
 | 
							entryMap[entry.Name()] = entry
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	commits, err := GetLastCommitForPaths(index, treePath, entryPaths)
 | 
						commits, err := GetLastCommitForPaths(ctx, index, treePath, entryPaths)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -103,7 +104,7 @@ func (c *LastCommitCache) recursiveCache(index cgobject.CommitNode, tree *Tree,
 | 
				
			|||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				return err
 | 
									return err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if err := c.recursiveCache(index, subTree, entry, level-1); err != nil {
 | 
								if err := c.recursiveCache(ctx, index, subTree, entry, level-1); err != nil {
 | 
				
			||||||
				return err
 | 
									return err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,6 +8,7 @@ package git
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"bufio"
 | 
						"bufio"
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"path"
 | 
						"path"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -61,11 +62,11 @@ func (c *LastCommitCache) Get(ref, entryPath string, wr WriteCloserError, rd *bu
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CacheCommit will cache the commit from the gitRepository
 | 
					// CacheCommit will cache the commit from the gitRepository
 | 
				
			||||||
func (c *LastCommitCache) CacheCommit(commit *Commit) error {
 | 
					func (c *LastCommitCache) CacheCommit(ctx context.Context, commit *Commit) error {
 | 
				
			||||||
	return c.recursiveCache(commit, &commit.Tree, "", 1)
 | 
						return c.recursiveCache(ctx, commit, &commit.Tree, "", 1)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *LastCommitCache) recursiveCache(commit *Commit, tree *Tree, treePath string, level int) error {
 | 
					func (c *LastCommitCache) recursiveCache(ctx context.Context, commit *Commit, tree *Tree, treePath string, level int) error {
 | 
				
			||||||
	if level == 0 {
 | 
						if level == 0 {
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -82,7 +83,7 @@ func (c *LastCommitCache) recursiveCache(commit *Commit, tree *Tree, treePath st
 | 
				
			|||||||
		entryMap[entry.Name()] = entry
 | 
							entryMap[entry.Name()] = entry
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	commits, err := GetLastCommitForPaths(commit, treePath, entryPaths)
 | 
						commits, err := GetLastCommitForPaths(ctx, commit, treePath, entryPaths)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -97,7 +98,7 @@ func (c *LastCommitCache) recursiveCache(commit *Commit, tree *Tree, treePath st
 | 
				
			|||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				return err
 | 
									return err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if err := c.recursiveCache(commit, subTree, entry, level-1); err != nil {
 | 
								if err := c.recursiveCache(ctx, commit, subTree, entry, level-1); err != nil {
 | 
				
			||||||
				return err
 | 
									return err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,13 +7,14 @@
 | 
				
			|||||||
package git
 | 
					package git
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"io/ioutil"
 | 
						"io/ioutil"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/go-git/go-git/v5/plumbing/object"
 | 
						"github.com/go-git/go-git/v5/plumbing/object"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetNote retrieves the git-notes data for a given commit.
 | 
					// GetNote retrieves the git-notes data for a given commit.
 | 
				
			||||||
func GetNote(repo *Repository, commitID string, note *Note) error {
 | 
					func GetNote(ctx context.Context, repo *Repository, commitID string, note *Note) error {
 | 
				
			||||||
	notes, err := repo.GetCommit(NotesRef)
 | 
						notes, err := repo.GetCommit(NotesRef)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
@@ -62,7 +63,7 @@ func GetNote(repo *Repository, commitID string, note *Note) error {
 | 
				
			|||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	lastCommits, err := GetLastCommitForPaths(commitNode, "", []string{path})
 | 
						lastCommits, err := GetLastCommitForPaths(ctx, commitNode, "", []string{path})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,12 +7,13 @@
 | 
				
			|||||||
package git
 | 
					package git
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"io/ioutil"
 | 
						"io/ioutil"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetNote retrieves the git-notes data for a given commit.
 | 
					// GetNote retrieves the git-notes data for a given commit.
 | 
				
			||||||
func GetNote(repo *Repository, commitID string, note *Note) error {
 | 
					func GetNote(ctx context.Context, repo *Repository, commitID string, note *Note) error {
 | 
				
			||||||
	notes, err := repo.GetCommit(NotesRef)
 | 
						notes, err := repo.GetCommit(NotesRef)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
@@ -63,7 +64,7 @@ func GetNote(repo *Repository, commitID string, note *Note) error {
 | 
				
			|||||||
		path = path[idx+1:]
 | 
							path = path[idx+1:]
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	lastCommits, err := GetLastCommitForPaths(notes, treePath, []string{path})
 | 
						lastCommits, err := GetLastCommitForPaths(ctx, notes, treePath, []string{path})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,7 @@
 | 
				
			|||||||
package git
 | 
					package git
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -18,7 +19,7 @@ func TestGetNotes(t *testing.T) {
 | 
				
			|||||||
	defer bareRepo1.Close()
 | 
						defer bareRepo1.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	note := Note{}
 | 
						note := Note{}
 | 
				
			||||||
	err = GetNote(bareRepo1, "95bb4d39648ee7e325106df01a621c530863a653", ¬e)
 | 
						err = GetNote(context.Background(), bareRepo1, "95bb4d39648ee7e325106df01a621c530863a653", ¬e)
 | 
				
			||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
	assert.Equal(t, []byte("Note contents\n"), note.Message)
 | 
						assert.Equal(t, []byte("Note contents\n"), note.Message)
 | 
				
			||||||
	assert.Equal(t, "Vladimir Panteleev", note.Commit.Author.Name)
 | 
						assert.Equal(t, "Vladimir Panteleev", note.Commit.Author.Name)
 | 
				
			||||||
@@ -31,10 +32,10 @@ func TestGetNestedNotes(t *testing.T) {
 | 
				
			|||||||
	defer repo.Close()
 | 
						defer repo.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	note := Note{}
 | 
						note := Note{}
 | 
				
			||||||
	err = GetNote(repo, "3e668dbfac39cbc80a9ff9c61eb565d944453ba4", ¬e)
 | 
						err = GetNote(context.Background(), repo, "3e668dbfac39cbc80a9ff9c61eb565d944453ba4", ¬e)
 | 
				
			||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
	assert.Equal(t, []byte("Note 2"), note.Message)
 | 
						assert.Equal(t, []byte("Note 2"), note.Message)
 | 
				
			||||||
	err = GetNote(repo, "ba0a96fa63532d6c5087ecef070b0250ed72fa47", ¬e)
 | 
						err = GetNote(context.Background(), repo, "ba0a96fa63532d6c5087ecef070b0250ed72fa47", ¬e)
 | 
				
			||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
	assert.Equal(t, []byte("Note 1"), note.Message)
 | 
						assert.Equal(t, []byte("Note 1"), note.Message)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,7 @@
 | 
				
			|||||||
package repository
 | 
					package repository
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
@@ -23,7 +24,7 @@ func getRefName(fullRefName string) string {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CacheRef cachhe last commit information of the branch or the tag
 | 
					// CacheRef cachhe last commit information of the branch or the tag
 | 
				
			||||||
func CacheRef(repo *models.Repository, gitRepo *git.Repository, fullRefName string) error {
 | 
					func CacheRef(ctx context.Context, repo *models.Repository, gitRepo *git.Repository, fullRefName string) error {
 | 
				
			||||||
	if !setting.CacheService.LastCommit.Enabled {
 | 
						if !setting.CacheService.LastCommit.Enabled {
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -43,5 +44,5 @@ func CacheRef(repo *models.Repository, gitRepo *git.Repository, fullRefName stri
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	commitCache := git.NewLastCommitCache(repo.FullName(), gitRepo, setting.LastCommitCacheTTLSeconds, cache.GetCache())
 | 
						commitCache := git.NewLastCommitCache(repo.FullName(), gitRepo, setting.LastCommitCacheTTLSeconds, cache.GetCache())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return commitCache.CacheCommit(commit)
 | 
						return commitCache.CacheCommit(ctx, commit)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -355,7 +355,7 @@ func Diff(ctx *context.Context) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	note := &git.Note{}
 | 
						note := &git.Note{}
 | 
				
			||||||
	err = git.GetNote(ctx.Repo.GitRepo, commitID, note)
 | 
						err = git.GetNote(ctx, ctx.Repo.GitRepo, commitID, note)
 | 
				
			||||||
	if err == nil {
 | 
						if err == nil {
 | 
				
			||||||
		ctx.Data["Note"] = string(charset.ToUTF8WithFallback(note.Message))
 | 
							ctx.Data["Note"] = string(charset.ToUTF8WithFallback(note.Message))
 | 
				
			||||||
		ctx.Data["NoteCommit"] = note.Commit
 | 
							ctx.Data["NoteCommit"] = note.Commit
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -146,7 +146,7 @@ func renderDirectory(ctx *context.Context, treeLink string) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var latestCommit *git.Commit
 | 
						var latestCommit *git.Commit
 | 
				
			||||||
	ctx.Data["Files"], latestCommit, err = entries.GetCommitsInfo(ctx.Repo.Commit, ctx.Repo.TreePath, c)
 | 
						ctx.Data["Files"], latestCommit, err = entries.GetCommitsInfo(ctx, ctx.Repo.Commit, ctx.Repo.TreePath, c)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		ctx.ServerError("GetCommitsInfo", err)
 | 
							ctx.ServerError("GetCommitsInfo", err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -208,7 +208,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
 | 
				
			|||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				// Cache for big repository
 | 
									// Cache for big repository
 | 
				
			||||||
				if err := repo_module.CacheRef(repo, gitRepo, opts.RefFullName); err != nil {
 | 
									if err := repo_module.CacheRef(graceful.GetManager().HammerContext(), repo, gitRepo, opts.RefFullName); err != nil {
 | 
				
			||||||
					log.Error("repo_module.CacheRef %s/%s failed: %v", repo.ID, branch, err)
 | 
										log.Error("repo_module.CacheRef %s/%s failed: %v", repo.ID, branch, err)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user