Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmd/admin.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ func runRepoSyncReleases(ctx context.Context, _ *cli.Command) error {
log.Trace("Processing next %d repos of %d", len(repos), count)
for _, repo := range repos {
log.Trace("Synchronizing repo %s with path %s", repo.FullName(), repo.RelativePath())
gitRepo, err := gitrepo.OpenRepository(ctx, repo)
gitRepo, err := gitrepo.OpenRepository(repo)
if err != nil {
log.Warn("OpenRepository: %v", err)
continue
Expand Down
4 changes: 2 additions & 2 deletions models/activities/repo_activity.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ func GetActivityStats(ctx context.Context, repo *repo_model.Repository, timeFrom
}
defer closer.Close()

code, err := gitRepo.GetCodeActivityStats(timeFrom, repo.DefaultBranch)
code, err := gitRepo.GetCodeActivityStats(ctx, timeFrom, repo.DefaultBranch)
if err != nil {
return nil, fmt.Errorf("FillFromGit: %w", err)
}
Expand All @@ -91,7 +91,7 @@ func GetActivityStatsTopAuthors(ctx context.Context, repo *repo_model.Repository
}
defer closer.Close()

code, err := gitRepo.GetCodeActivityStats(timeFrom, "")
code, err := gitRepo.GetCodeActivityStats(ctx, timeFrom, "")
if err != nil {
return nil, fmt.Errorf("FillFromGit: %w", err)
}
Expand Down
4 changes: 2 additions & 2 deletions models/git/commit_status_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -186,11 +186,11 @@ func TestFindRepoRecentCommitStatusContexts(t *testing.T) {

repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2})
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
gitRepo, err := gitrepo.OpenRepository(t.Context(), repo2)
gitRepo, err := gitrepo.OpenRepository(repo2)
assert.NoError(t, err)
defer gitRepo.Close()

commit, err := gitRepo.GetBranchCommit(repo2.DefaultBranch)
commit, err := gitRepo.GetBranchCommit(t.Context(), repo2.DefaultBranch)
assert.NoError(t, err)

defer func() {
Expand Down
6 changes: 3 additions & 3 deletions models/migrations/v1_14/v156.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,14 +109,14 @@ func FixPublisherIDforTagReleases(ctx context.Context, x *xorm.Engine) error {
return err
}
}
gitRepo, err = git.OpenRepository(ctx, repoPath(repo.OwnerName, repo.Name))
gitRepo, err = git.OpenRepository(repoPath(repo.OwnerName, repo.Name))
if err != nil {
log.Error("Error whilst opening git repo for [%d]%s/%s. Error: %v", repo.ID, repo.OwnerName, repo.Name, err)
return err
}
}

commit, err := gitRepo.GetTagCommit(release.TagName)
commit, err := gitRepo.GetTagCommit(ctx, release.TagName)
if err != nil {
if git.IsErrNotExist(err) {
log.Warn("Unable to find commit %s for Tag: %s in [%d]%s/%s. Cannot update publisher ID.", err.(git.ErrNotExist).ID, release.TagName, repo.ID, repo.OwnerName, repo.Name)
Expand All @@ -128,7 +128,7 @@ func FixPublisherIDforTagReleases(ctx context.Context, x *xorm.Engine) error {

if commit.Author.Email == "" {
log.Warn("Tag: %s in Repo[%d]%s/%s does not have a tagger.", release.TagName, repo.ID, repo.OwnerName, repo.Name)
commit, err = gitRepo.GetCommit(commit.ID.String())
commit, err = gitRepo.GetCommit(ctx, commit.ID.String())
if err != nil {
if git.IsErrNotExist(err) {
log.Warn("Unable to find commit %s for Tag: %s in [%d]%s/%s. Cannot update publisher ID.", err.(git.ErrNotExist).ID, release.TagName, repo.ID, repo.OwnerName, repo.Name)
Expand Down
4 changes: 2 additions & 2 deletions models/migrations/v1_9/v82.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,15 +99,15 @@ func FixReleaseSha1OnReleaseTable(ctx context.Context, x *xorm.Engine) error {
userCache[repo.OwnerID] = user
}

gitRepo, err = git.OpenRepository(ctx, RepoPath(user.Name, repo.Name))
gitRepo, err = git.OpenRepository(RepoPath(user.Name, repo.Name))
if err != nil {
return err
}
defer gitRepo.Close()
gitRepoCache[release.RepoID] = gitRepo
}

release.Sha1, err = gitRepo.GetTagCommitID(release.TagName)
release.Sha1, err = gitRepo.GetTagCommitID(ctx, release.TagName)
if err != nil && !git.IsErrNotExist(err) {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion models/renderhelper/commit_checker.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func (c *commitChecker) IsCommitIDExisting(commitID string) bool {
c.gitRepo, c.gitRepoCloser = r, closer
}

exist = c.gitRepo.IsReferenceExist(commitID) // Don't use IsObjectExist since it doesn't support short hashes with gogit edition.
exist = c.gitRepo.IsReferenceExist(c.ctx, commitID) // Don't use IsObjectExist since it doesn't support short hashes with gogit edition.
c.commitCache[commitID] = exist
return exist
}
46 changes: 24 additions & 22 deletions modules/actions/workflows.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ package actions

import (
"bytes"
"context"
"io"
"slices"
"strings"
Expand Down Expand Up @@ -44,12 +45,12 @@ func IsWorkflow(path string) bool {
return strings.HasPrefix(path, ".gitea/workflows") || strings.HasPrefix(path, ".github/workflows")
}

func ListWorkflows(commit *git.Commit) (string, git.Entries, error) {
func ListWorkflows(ctx context.Context, commit *git.Commit) (string, git.Entries, error) {
rpath := ".gitea/workflows"
tree, err := commit.SubTree(rpath)
tree, err := commit.SubTree(ctx, rpath)
if _, ok := err.(git.ErrNotExist); ok {
rpath = ".github/workflows"
tree, err = commit.SubTree(rpath)
tree, err = commit.SubTree(ctx, rpath)
}
if _, ok := err.(git.ErrNotExist); ok {
return "", nil, nil
Expand All @@ -58,7 +59,7 @@ func ListWorkflows(commit *git.Commit) (string, git.Entries, error) {
return "", nil, err
}

entries, err := tree.ListEntriesRecursiveFast()
entries, err := tree.ListEntriesRecursiveFast(ctx)
if err != nil {
return "", nil, err
}
Expand All @@ -72,8 +73,8 @@ func ListWorkflows(commit *git.Commit) (string, git.Entries, error) {
return rpath, ret, nil
}

func GetContentFromEntry(entry *git.TreeEntry) ([]byte, error) {
f, err := entry.Blob().DataAsync()
func GetContentFromEntry(ctx context.Context, entry *git.TreeEntry) ([]byte, error) {
f, err := entry.Blob().DataAsync(ctx)
if err != nil {
return nil, err
}
Expand All @@ -99,21 +100,22 @@ func GetEventsFromContent(content []byte) ([]*jobparser.Event, error) {
}

func DetectWorkflows(
ctx context.Context,
gitRepo *git.Repository,
commit *git.Commit,
triggedEvent webhook_module.HookEventType,
payload api.Payloader,
detectSchedule bool,
) ([]*DetectedWorkflow, []*DetectedWorkflow, error) {
_, entries, err := ListWorkflows(commit)
_, entries, err := ListWorkflows(ctx, commit)
if err != nil {
return nil, nil, err
}

workflows := make([]*DetectedWorkflow, 0, len(entries))
schedules := make([]*DetectedWorkflow, 0, len(entries))
for _, entry := range entries {
content, err := GetContentFromEntry(entry)
content, err := GetContentFromEntry(ctx, entry)
if err != nil {
return nil, nil, err
}
Expand All @@ -135,7 +137,7 @@ func DetectWorkflows(
}
schedules = append(schedules, dwf)
}
} else if detectMatched(gitRepo, commit, triggedEvent, payload, evt) {
} else if detectMatched(ctx, gitRepo, commit, triggedEvent, payload, evt) {
dwf := &DetectedWorkflow{
EntryName: entry.Name(),
TriggerEvent: evt,
Expand All @@ -149,15 +151,15 @@ func DetectWorkflows(
return workflows, schedules, nil
}

func DetectScheduledWorkflows(gitRepo *git.Repository, commit *git.Commit) ([]*DetectedWorkflow, error) {
_, entries, err := ListWorkflows(commit)
func DetectScheduledWorkflows(ctx context.Context, gitRepo *git.Repository, commit *git.Commit) ([]*DetectedWorkflow, error) {
_, entries, err := ListWorkflows(ctx, commit)
if err != nil {
return nil, err
}

wfs := make([]*DetectedWorkflow, 0, len(entries))
for _, entry := range entries {
content, err := GetContentFromEntry(entry)
content, err := GetContentFromEntry(ctx, entry)
if err != nil {
return nil, err
}
Expand All @@ -184,7 +186,7 @@ func DetectScheduledWorkflows(gitRepo *git.Repository, commit *git.Commit) ([]*D
return wfs, nil
}

func detectMatched(gitRepo *git.Repository, commit *git.Commit, triggedEvent webhook_module.HookEventType, payload api.Payloader, evt *jobparser.Event) bool {
func detectMatched(ctx context.Context, gitRepo *git.Repository, commit *git.Commit, triggedEvent webhook_module.HookEventType, payload api.Payloader, evt *jobparser.Event) bool {
if !canGithubEventMatch(evt.Name, triggedEvent) {
return false
}
Expand All @@ -204,7 +206,7 @@ func detectMatched(gitRepo *git.Repository, commit *git.Commit, triggedEvent web

case // push
webhook_module.HookEventPush:
return matchPushEvent(commit, payload.(*api.PushPayload), evt)
return matchPushEvent(ctx, commit, payload.(*api.PushPayload), evt)

case // issues
webhook_module.HookEventIssues,
Expand All @@ -227,7 +229,7 @@ func detectMatched(gitRepo *git.Repository, commit *git.Commit, triggedEvent web
webhook_module.HookEventPullRequestLabel,
webhook_module.HookEventPullRequestReviewRequest,
webhook_module.HookEventPullRequestMilestone:
return matchPullRequestEvent(gitRepo, commit, payload.(*api.PullRequestPayload), evt)
return matchPullRequestEvent(ctx, gitRepo, commit, payload.(*api.PullRequestPayload), evt)

case // pull_request_review
webhook_module.HookEventPullRequestReviewApproved,
Expand Down Expand Up @@ -256,7 +258,7 @@ func detectMatched(gitRepo *git.Repository, commit *git.Commit, triggedEvent web
}
}

func matchPushEvent(commit *git.Commit, pushPayload *api.PushPayload, evt *jobparser.Event) bool {
func matchPushEvent(ctx context.Context, commit *git.Commit, pushPayload *api.PushPayload, evt *jobparser.Event) bool {
// with no special filter parameters
if len(evt.Acts()) == 0 {
return true
Expand Down Expand Up @@ -322,7 +324,7 @@ func matchPushEvent(commit *git.Commit, pushPayload *api.PushPayload, evt *jobpa
matchTimes++
break
}
filesChanged, err := commit.GetFilesChangedSinceCommit(pushPayload.Before)
filesChanged, err := commit.GetFilesChangedSinceCommit(ctx, pushPayload.Before)
if err != nil {
log.Error("GetFilesChangedSinceCommit [commit_sha1: %s]: %v", commit.ID.String(), err)
} else {
Expand All @@ -339,7 +341,7 @@ func matchPushEvent(commit *git.Commit, pushPayload *api.PushPayload, evt *jobpa
matchTimes++
break
}
filesChanged, err := commit.GetFilesChangedSinceCommit(pushPayload.Before)
filesChanged, err := commit.GetFilesChangedSinceCommit(ctx, pushPayload.Before)
if err != nil {
log.Error("GetFilesChangedSinceCommit [commit_sha1: %s]: %v", commit.ID.String(), err)
} else {
Expand Down Expand Up @@ -410,7 +412,7 @@ func matchIssuesEvent(issuePayload *api.IssuePayload, evt *jobparser.Event) bool
return matchTimes == len(evt.Acts())
}

func matchPullRequestEvent(gitRepo *git.Repository, commit *git.Commit, prPayload *api.PullRequestPayload, evt *jobparser.Event) bool {
func matchPullRequestEvent(ctx context.Context, gitRepo *git.Repository, commit *git.Commit, prPayload *api.PullRequestPayload, evt *jobparser.Event) bool {
acts := evt.Acts()
activityTypeMatched := false
matchTimes := 0
Expand Down Expand Up @@ -454,7 +456,7 @@ func matchPullRequestEvent(gitRepo *git.Repository, commit *git.Commit, prPayloa
err error
)
if evt.Name == GithubEventPullRequestTarget && (len(acts["paths"]) > 0 || len(acts["paths-ignore"]) > 0) {
headCommit, err = gitRepo.GetCommit(prPayload.PullRequest.Head.Sha)
headCommit, err = gitRepo.GetCommit(ctx, prPayload.PullRequest.Head.Sha)
if err != nil {
log.Error("GetCommit [ref: %s]: %v", prPayload.PullRequest.Head.Sha, err)
return false
Expand Down Expand Up @@ -486,7 +488,7 @@ func matchPullRequestEvent(gitRepo *git.Repository, commit *git.Commit, prPayloa
matchTimes++
}
case "paths":
filesChanged, err := headCommit.GetFilesChangedSinceCommit(prPayload.PullRequest.MergeBase)
filesChanged, err := headCommit.GetFilesChangedSinceCommit(ctx, prPayload.PullRequest.MergeBase)
if err != nil {
log.Error("GetFilesChangedSinceCommit [commit_sha1: %s]: %v", headCommit.ID.String(), err)
} else {
Expand All @@ -499,7 +501,7 @@ func matchPullRequestEvent(gitRepo *git.Repository, commit *git.Commit, prPayloa
}
}
case "paths-ignore":
filesChanged, err := headCommit.GetFilesChangedSinceCommit(prPayload.PullRequest.MergeBase)
filesChanged, err := headCommit.GetFilesChangedSinceCommit(ctx, prPayload.PullRequest.MergeBase)
if err != nil {
log.Error("GetFilesChangedSinceCommit [commit_sha1: %s]: %v", headCommit.ID.String(), err)
} else {
Expand Down
2 changes: 1 addition & 1 deletion modules/actions/workflows_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ func TestDetectMatched(t *testing.T) {
evts, err := GetEventsFromContent([]byte(tc.yamlOn))
assert.NoError(t, err)
assert.Len(t, evts, 1)
assert.Equal(t, tc.expected, detectMatched(nil, tc.commit, tc.triggedEvent, tc.payload, evts[0]))
assert.Equal(t, tc.expected, detectMatched(t.Context(), nil, tc.commit, tc.triggedEvent, tc.payload, evts[0]))
})
}
}
Expand Down
5 changes: 3 additions & 2 deletions modules/cache/cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package cache

import (
"context"
"encoding/hex"
"errors"
"fmt"
Expand Down Expand Up @@ -96,9 +97,9 @@ func GetString(key string, getFunc func() (string, error)) (string, error) {
}

// GetInt64 returns key value from cache with callback when no key exists in cache
func GetInt64(key string, getFunc func() (int64, error)) (int64, error) {
func GetInt64(ctx context.Context, key string, getFunc func(ctx context.Context) (int64, error)) (int64, error) {
s, err := GetString(key, func() (string, error) {
v, err := getFunc()
v, err := getFunc(ctx)
return strconv.FormatInt(v, 10), err
})
if err != nil {
Expand Down
11 changes: 6 additions & 5 deletions modules/cache/cache_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package cache

import (
"context"
"errors"
"testing"
"time"
Expand Down Expand Up @@ -92,32 +93,32 @@ func TestGetString(t *testing.T) {
func TestGetInt64(t *testing.T) {
createTestCache()

data, err := GetInt64("key", func() (int64, error) {
data, err := GetInt64(t.Context(), "key", func(_ context.Context) (int64, error) {
return 0, errors.New("some error")
})
assert.Error(t, err)
assert.EqualValues(t, 0, data)

data, err = GetInt64("key", func() (int64, error) {
data, err = GetInt64(t.Context(), "key", func(_ context.Context) (int64, error) {
return 0, nil
})
assert.NoError(t, err)
assert.EqualValues(t, 0, data)

data, err = GetInt64("key", func() (int64, error) {
data, err = GetInt64(t.Context(), "key", func(_ context.Context) (int64, error) {
return 100, nil
})
assert.NoError(t, err)
assert.EqualValues(t, 0, data)
Remove("key")

data, err = GetInt64("key", func() (int64, error) {
data, err = GetInt64(t.Context(), "key", func(_ context.Context) (int64, error) {
return 100, nil
})
assert.NoError(t, err)
assert.EqualValues(t, 100, data)

data, err = GetInt64("key", func() (int64, error) {
data, err = GetInt64(t.Context(), "key", func(_ context.Context) (int64, error) {
return 0, errors.New("some error")
})
assert.NoError(t, err)
Expand Down
10 changes: 7 additions & 3 deletions modules/fileicon/entry.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@

package fileicon

import "code.gitea.io/gitea/modules/git"
import (
"context"

"code.gitea.io/gitea/modules/git"
)

type EntryInfo struct {
BaseName string
Expand All @@ -12,10 +16,10 @@ type EntryInfo struct {
IsOpen bool
}

func EntryInfoFromGitTreeEntry(commit *git.Commit, fullPath string, gitEntry *git.TreeEntry) *EntryInfo {
func EntryInfoFromGitTreeEntry(ctx context.Context, commit *git.Commit, fullPath string, gitEntry *git.TreeEntry) *EntryInfo {
ret := &EntryInfo{BaseName: gitEntry.Name(), EntryMode: gitEntry.Mode()}
if gitEntry.IsLink() {
if res, err := git.EntryFollowLink(commit, fullPath, gitEntry); err == nil && res.TargetEntry.IsDir() {
if res, err := git.EntryFollowLink(ctx, commit, fullPath, gitEntry); err == nil && res.TargetEntry.IsDir() {
ret.SymlinkToMode = res.TargetEntry.Mode()
}
}
Expand Down
Loading
Loading