Skip to content

Commit ec7ffbf

Browse files
committed
add context to getTree
1 parent fa34fff commit ec7ffbf

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+111
-104
lines changed

modules/actions/workflows.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ func IsWorkflow(path string) bool {
4444
return strings.HasPrefix(path, ".gitea/workflows") || strings.HasPrefix(path, ".github/workflows")
4545
}
4646

47-
func ListWorkflows(commit *git.Commit) (git.Entries, error) {
48-
tree, err := commit.SubTree(".gitea/workflows")
47+
func ListWorkflows(ctx context.Context, commit *git.Commit) (git.Entries, error) {
48+
tree, err := commit.SubTree(ctx, ".gitea/workflows")
4949
if _, ok := err.(git.ErrNotExist); ok {
50-
tree, err = commit.SubTree(".github/workflows")
50+
tree, err = commit.SubTree(ctx, ".github/workflows")
5151
}
5252
if _, ok := err.(git.ErrNotExist); ok {
5353
return nil, nil
@@ -104,7 +104,7 @@ func DetectWorkflows(
104104
payload api.Payloader,
105105
detectSchedule bool,
106106
) ([]*DetectedWorkflow, []*DetectedWorkflow, error) {
107-
entries, err := ListWorkflows(commit)
107+
entries, err := ListWorkflows(ctx, commit)
108108
if err != nil {
109109
return nil, nil, err
110110
}
@@ -149,7 +149,7 @@ func DetectWorkflows(
149149
}
150150

151151
func DetectScheduledWorkflows(ctx context.Context, gitRepo *git.Repository, commit *git.Commit) ([]*DetectedWorkflow, error) {
152-
entries, err := ListWorkflows(commit)
152+
entries, err := ListWorkflows(ctx, commit)
153153
if err != nil {
154154
return nil, err
155155
}

modules/git/blame.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ func CreateBlameReader(ctx context.Context, objectFormat ObjectFormat, repoPath
181181
}
182182

183183
func tryCreateBlameIgnoreRevsFile(ctx context.Context, commit *Commit) *string {
184-
entry, err := commit.GetTreeEntryByPath(".git-blame-ignore-revs")
184+
entry, err := commit.GetTreeEntryByPath(ctx, ".git-blame-ignore-revs")
185185
if err != nil {
186186
return nil
187187
}

modules/git/commit.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -319,8 +319,8 @@ func (c *Commit) FileChangedSinceCommit(ctx context.Context, filename, pastCommi
319319

320320
// HasFile returns true if the file given exists on this commit
321321
// This does only mean it's there - it does not mean the file was changed during the commit.
322-
func (c *Commit) HasFile(filename string) (bool, error) {
323-
_, err := c.GetBlobByPath(filename)
322+
func (c *Commit) HasFile(ctx context.Context, filename string) (bool, error) {
323+
_, err := c.GetBlobByPath(ctx, filename)
324324
if err != nil {
325325
return false, err
326326
}
@@ -329,7 +329,7 @@ func (c *Commit) HasFile(filename string) (bool, error) {
329329

330330
// GetFileContent reads a file content as a string or returns false if this was not possible
331331
func (c *Commit) GetFileContent(ctx context.Context, filename string, limit int) (string, error) {
332-
entry, err := c.GetTreeEntryByPath(filename)
332+
entry, err := c.GetTreeEntryByPath(ctx, filename)
333333
if err != nil {
334334
return "", err
335335
}

modules/git/commit_info_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func testGetCommitsInfo(t *testing.T, repo1 *Repository) {
6464
assert.NotNil(t, commit.Tree)
6565
assert.NotNil(t, commit.Tree.repo)
6666

67-
tree, err := commit.Tree.SubTree(testCase.Path)
67+
tree, err := commit.Tree.SubTree(t.Context(), testCase.Path)
6868
if err != nil {
6969
assert.NoError(t, err, "Unable to get subtree: %s of commit: %s from testcase due to error: %v", testCase.Path, testCase.CommitID, err)
7070
// no point trying to do anything else for this test.

modules/git/commit_submodule.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ func (c *Commit) GetSubModules(ctx context.Context) (*ObjectCache[*SubModule], e
1515
return c.submoduleCache, nil
1616
}
1717

18-
entry, err := c.GetTreeEntryByPath(".gitmodules")
18+
entry, err := c.GetTreeEntryByPath(ctx, ".gitmodules")
1919
if err != nil {
2020
if _, ok := err.(ErrNotExist); ok {
2121
return nil, nil

modules/git/last_commit_cache_gogit.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ func (c *Commit) recursiveCache(ctx context.Context, index cgobject.CommitNode,
5151

5252
for entry := range commits {
5353
if entryMap[entry].IsDir() {
54-
subTree, err := tree.SubTree(entry)
54+
subTree, err := tree.SubTree(ctx, entry)
5555
if err != nil {
5656
return err
5757
}

modules/git/last_commit_cache_nogogit.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func (c *Commit) recursiveCache(ctx context.Context, tree *Tree, treePath string
4040
for _, treeEntry := range entries {
4141
// entryMap won't contain "" therefore skip this.
4242
if treeEntry.IsDir() {
43-
subTree, err := tree.SubTree(treeEntry.Name())
43+
subTree, err := tree.SubTree(ctx, treeEntry.Name())
4444
if err != nil {
4545
return err
4646
}

modules/git/log_name_status.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ func (g *LogNameStatusRepoParser) Close() {
295295
func WalkGitLog(ctx context.Context, repo *Repository, head *Commit, treepath string, paths ...string) (map[string]string, error) {
296296
headRef := head.ID.String()
297297

298-
tree, err := head.SubTree(treepath)
298+
tree, err := head.SubTree(ctx, treepath)
299299
if err != nil {
300300
return nil, err
301301
}

modules/git/notes_nogogit.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@ func GetNote(ctx context.Context, repo *Repository, commitID string, note *Note)
3434
var entry *TreeEntry
3535
originalCommitID := commitID
3636
for len(commitID) > 2 {
37-
entry, err = tree.GetTreeEntryByPath(commitID)
37+
entry, err = tree.GetTreeEntryByPath(ctx, commitID)
3838
if err == nil {
3939
path += commitID
4040
break
4141
}
4242
if IsErrNotExist(err) {
43-
tree, err = tree.SubTree(commitID[0:2])
43+
tree, err = tree.SubTree(ctx, commitID[0:2])
4444
path += commitID[0:2] + "/"
4545
commitID = commitID[2:]
4646
}

modules/git/repo.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ type GPGSettings struct {
3232
const prettyLogFormat = `--pretty=format:%H`
3333

3434
// GetAllCommitsCount returns count of all commits in repository
35-
func (repo *Repository) GetAllCommitsCount() (int64, error) {
36-
return AllCommitsCount(repo.Ctx, repo.Path, false)
35+
func (repo *Repository) GetAllCommitsCount(ctx context.Context) (int64, error) {
36+
return AllCommitsCount(ctx, repo.Path, false)
3737
}
3838

3939
func (repo *Repository) parsePrettyFormatLogToList(logs []byte) ([]*Commit, error) {

modules/git/repo_tree_gogit.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
"github.com/go-git/go-git/v5/plumbing"
1414
)
1515

16-
func (repo *Repository) getTree(id ObjectID) (*Tree, error) {
16+
func (repo *Repository) getTree(ctx context.Context, id ObjectID) (*Tree, error) {
1717
gogitTree, err := repo.gogitRepo.TreeObject(plumbing.Hash(id.RawValue()))
1818
if err != nil {
1919
if errors.Is(err, plumbing.ErrObjectNotFound) {
@@ -54,7 +54,7 @@ func (repo *Repository) GetTree(ctx context.Context, idStr string) (*Tree, error
5454
if err == nil {
5555
id = ParseGogitHash(commitObject.TreeHash)
5656
}
57-
treeObject, err := repo.getTree(id)
57+
treeObject, err := repo.getTree(ctx, id)
5858
if err != nil {
5959
return nil, err
6060
}

modules/git/repo_tree_nogogit.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import (
1010
"io"
1111
)
1212

13-
func (repo *Repository) getTree(id ObjectID) (*Tree, error) {
14-
wr, rd, cancel, err := repo.CatFileBatch(repo.Ctx)
13+
func (repo *Repository) getTree(ctx context.Context, id ObjectID) (*Tree, error) {
14+
wr, rd, cancel, err := repo.CatFileBatch(ctx)
1515
if err != nil {
1616
return nil, err
1717
}
@@ -76,7 +76,7 @@ func (repo *Repository) getTree(id ObjectID) (*Tree, error) {
7676
}
7777

7878
// GetTree find the tree object in the repository.
79-
func (repo *Repository) GetTree(_ context.Context,idStr string) (*Tree, error) {
79+
func (repo *Repository) GetTree(ctx context.Context, idStr string) (*Tree, error) {
8080
objectFormat, err := repo.GetObjectFormat()
8181
if err != nil {
8282
return nil, err
@@ -95,5 +95,5 @@ func (repo *Repository) GetTree(_ context.Context,idStr string) (*Tree, error) {
9595
return nil, err
9696
}
9797

98-
return repo.getTree(id)
98+
return repo.getTree(ctx, id)
9999
}

modules/git/tree.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ func NewTree(repo *Repository, id ObjectID) *Tree {
1919
}
2020

2121
// SubTree get a subtree by the sub dir path
22-
func (t *Tree) SubTree(rpath string) (*Tree, error) {
22+
func (t *Tree) SubTree(ctx context.Context, rpath string) (*Tree, error) {
2323
if len(rpath) == 0 {
2424
return t, nil
2525
}
@@ -32,12 +32,12 @@ func (t *Tree) SubTree(rpath string) (*Tree, error) {
3232
te *TreeEntry
3333
)
3434
for _, name := range paths {
35-
te, err = p.GetTreeEntryByPath(name)
35+
te, err = p.GetTreeEntryByPath(ctx, name)
3636
if err != nil {
3737
return nil, err
3838
}
3939

40-
g, err = t.repo.getTree(te.ID)
40+
g, err = t.repo.getTree(ctx, te.ID)
4141
if err != nil {
4242
return nil, err
4343
}

modules/git/tree_blob.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44

55
package git
66

7+
import "context"
8+
79
// GetBlobByPath get the blob object according the path
8-
func (t *Tree) GetBlobByPath(relpath string) (*Blob, error) {
9-
entry, err := t.GetTreeEntryByPath(relpath)
10+
func (t *Tree) GetBlobByPath(ctx context.Context, relpath string) (*Blob, error) {
11+
entry, err := t.GetTreeEntryByPath(ctx, relpath)
1012
if err != nil {
1113
return nil, err
1214
}

modules/git/tree_blob_gogit.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
package git
88

99
import (
10+
"context"
1011
"path"
1112
"strings"
1213

@@ -16,7 +17,7 @@ import (
1617
)
1718

1819
// GetTreeEntryByPath get the tree entries according the sub dir
19-
func (t *Tree) GetTreeEntryByPath(relpath string) (*TreeEntry, error) {
20+
func (t *Tree) GetTreeEntryByPath(ctx context.Context, relpath string) (*TreeEntry, error) {
2021
if len(relpath) == 0 {
2122
return &TreeEntry{
2223
ID: t.ID,
@@ -50,7 +51,7 @@ func (t *Tree) GetTreeEntryByPath(relpath string) (*TreeEntry, error) {
5051
}
5152
}
5253
} else {
53-
tree, err = tree.SubTree(name)
54+
tree, err = tree.SubTree(ctx, name)
5455
if err != nil {
5556
if err == plumbing.ErrObjectNotFound {
5657
return nil, ErrNotExist{

modules/git/tree_blob_nogogit.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@
66
package git
77

88
import (
9+
"context"
910
"path"
1011
"strings"
1112
)
1213

1314
// GetTreeEntryByPath get the tree entries according the sub dir
14-
func (t *Tree) GetTreeEntryByPath(relpath string) (*TreeEntry, error) {
15+
func (t *Tree) GetTreeEntryByPath(ctx context.Context, relpath string) (*TreeEntry, error) {
1516
if len(relpath) == 0 {
1617
return &TreeEntry{
1718
ptree: t,
@@ -38,7 +39,7 @@ func (t *Tree) GetTreeEntryByPath(relpath string) (*TreeEntry, error) {
3839
}
3940
}
4041
} else {
41-
tree, err = tree.SubTree(name)
42+
tree, err = tree.SubTree(ctx, name)
4243
if err != nil {
4344
return nil, err
4445
}

modules/git/tree_entry.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func (te *TreeEntry) FollowLink(ctx context.Context) (*TreeEntry, error) {
6060
return nil, ErrBadLink{te.Name(), "points outside of repo"}
6161
}
6262

63-
target, err := t.GetTreeEntryByPath(lnk)
63+
target, err := t.GetTreeEntryByPath(ctx, lnk)
6464
if err != nil {
6565
if IsErrNotExist(err) {
6666
return nil, ErrBadLink{te.Name(), "broken link"}
@@ -103,8 +103,8 @@ func (te *TreeEntry) FollowLinks(ctx context.Context) (*TreeEntry, error) {
103103
}
104104

105105
// returns the Tree pointed to by this TreeEntry, or nil if this is not a tree
106-
func (te *TreeEntry) Tree() *Tree {
107-
t, err := te.ptree.repo.getTree(te.ID)
106+
func (te *TreeEntry) Tree(ctx context.Context) *Tree {
107+
t, err := te.ptree.repo.getTree(ctx, te.ID)
108108
if err != nil {
109109
return nil
110110
}
@@ -113,17 +113,17 @@ func (te *TreeEntry) Tree() *Tree {
113113
}
114114

115115
// GetSubJumpablePathName return the full path of subdirectory jumpable ( contains only one directory )
116-
func (te *TreeEntry) GetSubJumpablePathName() string {
116+
func (te *TreeEntry) GetSubJumpablePathName(ctx context.Context) string {
117117
if te.IsSubModule() || !te.IsDir() {
118118
return ""
119119
}
120-
tree, err := te.ptree.SubTree(te.Name())
120+
tree, err := te.ptree.SubTree(ctx, te.Name())
121121
if err != nil {
122122
return te.Name()
123123
}
124124
entries, _ := tree.ListEntries()
125125
if len(entries) == 1 && entries[0].IsDir() {
126-
name := entries[0].GetSubJumpablePathName()
126+
name := entries[0].GetSubJumpablePathName(ctx)
127127
if name != "" {
128128
return te.Name() + "/" + name
129129
}

modules/git/tree_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ func TestSubTree_Issue29101(t *testing.T) {
2020

2121
// old code could produce a different error if called multiple times
2222
for i := 0; i < 10; i++ {
23-
_, err = commit.SubTree("file1.txt")
23+
_, err = commit.SubTree(t.Context(), "file1.txt")
2424
assert.Error(t, err)
2525
assert.True(t, IsErrNotExist(err))
2626
}

modules/issue/template/unmarshal.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func UnmarshalFromEntry(ctx context.Context, entry *git.TreeEntry, dir string) (
4949

5050
// UnmarshalFromCommit parses out a valid template from the commit
5151
func UnmarshalFromCommit(ctx context.Context, commit *git.Commit, filename string) (*api.IssueTemplate, error) {
52-
entry, err := commit.GetTreeEntryByPath(filename)
52+
entry, err := commit.GetTreeEntryByPath(ctx, filename)
5353
if err != nil {
5454
return nil, fmt.Errorf("get entry for %q: %w", filename, err)
5555
}

routers/api/v1/repo/file.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ func GetRawFileOrLFS(ctx *context.APIContext) {
226226
}
227227

228228
func getBlobForEntry(ctx *context.APIContext) (blob *git.Blob, entry *git.TreeEntry, lastModified *time.Time) {
229-
entry, err := ctx.Repo.Commit.GetTreeEntryByPath(ctx.Repo.TreePath)
229+
entry, err := ctx.Repo.Commit.GetTreeEntryByPath(ctx, ctx.Repo.TreePath)
230230
if err != nil {
231231
if git.IsErrNotExist(err) {
232232
ctx.APIErrorNotFound()

routers/api/v1/repo/wiki.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package repo
55

66
import (
7+
gocontext "context"
78
"encoding/base64"
89
"fmt"
910
"net/http"
@@ -456,8 +457,8 @@ func ListPageRevisions(ctx *context.APIContext) {
456457
}
457458

458459
// findEntryForFile finds the tree entry for a target filepath.
459-
func findEntryForFile(commit *git.Commit, target string) (*git.TreeEntry, error) {
460-
entry, err := commit.GetTreeEntryByPath(target)
460+
func findEntryForFile(ctx gocontext.Context, commit *git.Commit, target string) (*git.TreeEntry, error) {
461+
entry, err := commit.GetTreeEntryByPath(ctx, target)
461462
if err != nil {
462463
return nil, err
463464
}
@@ -470,7 +471,7 @@ func findEntryForFile(commit *git.Commit, target string) (*git.TreeEntry, error)
470471
if unescapedTarget, err = url.QueryUnescape(target); err != nil {
471472
return nil, err
472473
}
473-
return commit.GetTreeEntryByPath(unescapedTarget)
474+
return commit.GetTreeEntryByPath(ctx, unescapedTarget)
474475
}
475476

476477
// findWikiRepoCommit opens the wiki repo and returns the latest commit, writing to context on error.
@@ -517,7 +518,7 @@ func wikiContentsByEntry(ctx *context.APIContext, entry *git.TreeEntry) string {
517518
// indicating whether the page exists. Writes to ctx if an error occurs.
518519
func wikiContentsByName(ctx *context.APIContext, commit *git.Commit, wikiName wiki_service.WebPath, isSidebarOrFooter bool) (string, string) {
519520
gitFilename := wiki_service.WebPathToGitPath(wikiName)
520-
entry, err := findEntryForFile(commit, gitFilename)
521+
entry, err := findEntryForFile(ctx, commit, gitFilename)
521522
if err != nil {
522523
if git.IsErrNotExist(err) {
523524
if !isSidebarOrFooter {

routers/web/repo/actions/actions.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ func prepareWorkflowDispatchTemplate(ctx *context.Context, commit *git.Commit) (
121121

122122
var curWorkflow *model.Workflow
123123

124-
entries, err := actions.ListWorkflows(commit)
124+
entries, err := actions.ListWorkflows(ctx, commit)
125125
if err != nil {
126126
ctx.ServerError("ListWorkflows", err)
127127
return nil

routers/web/repo/blame.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func RefBlame(ctx *context.Context) {
7070
}
7171

7272
// Get current entry user currently looking at.
73-
entry, err := ctx.Repo.Commit.GetTreeEntryByPath(ctx.Repo.TreePath)
73+
entry, err := ctx.Repo.Commit.GetTreeEntryByPath(ctx, ctx.Repo.TreePath)
7474
if err != nil {
7575
HandleGitError(ctx, "Repo.Commit.GetTreeEntryByPath", err)
7676
return

0 commit comments

Comments
 (0)