From 09000c4ce9d4a78aeac5829dbc2980bd3b1bc28f Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 2 Jan 2025 23:52:01 -0800 Subject: [PATCH] Fix bug --- routers/web/repo/tree.go | 6 +-- services/repository/files/tree.go | 15 ++++--- services/repository/files/tree_test.go | 57 +++++++++++++++----------- 3 files changed, 46 insertions(+), 32 deletions(-) diff --git a/routers/web/repo/tree.go b/routers/web/repo/tree.go index 245eeace3f..c5be127bfe 100644 --- a/routers/web/repo/tree.go +++ b/routers/web/repo/tree.go @@ -56,7 +56,7 @@ func isExcludedEntry(entry *git.TreeEntry) bool { } func Tree(ctx *context.Context) { - dir := ctx.PathParam("*") + treePath := ctx.PathParam("*") ref := ctx.FormTrim("ref") recursive := ctx.FormBool("recursive") @@ -70,9 +70,9 @@ func Tree(ctx *context.Context) { refName := gitRepo.UnstableGuessRefByShortName(ref) var results []*files_service.TreeEntry if !recursive { - results, err = files_service.GetTreeList(ctx, ctx.Repo.Repository, dir, refName, false) + results, err = files_service.GetTreeList(ctx, ctx.Repo.Repository, treePath, refName, false) } else { - results, err = files_service.GetTreeInformation(ctx, ctx.Repo.Repository, dir, refName) + results, err = files_service.GetTreeInformation(ctx, ctx.Repo.Repository, treePath, refName) } if err != nil { ctx.ServerError("GetTreeInformation", err) diff --git a/services/repository/files/tree.go b/services/repository/files/tree.go index 720e0e2051..22a32555b2 100644 --- a/services/repository/files/tree.go +++ b/services/repository/files/tree.go @@ -416,14 +416,19 @@ func GetTreeInformation(ctx context.Context, repo *repo_model.Repository, treePa var treeList []*TreeEntry var parentEntry *TreeEntry fields := strings.SplitN(treePath, "/", 2) - for _, rootEntry := range rootEntries { + for _, entry := range rootEntries { treeEntry := &TreeEntry{ - Name: rootEntry.Name(), - IsFile: rootEntry.Mode() != git.EntryModeTree, - Path: rootEntry.Name(), + Name: entry.Name(), + IsFile: entry.Mode() != git.EntryModeTree, + Path: entry.Name(), } treeList = append(treeList, treeEntry) - if fields[0] == rootEntry.Name() { + if fields[0] == entry.Name() { + if len(fields) == 1 { + if treeEntry.IsFile { + return treeList, nil + } + } parentEntry = treeEntry } } diff --git a/services/repository/files/tree_test.go b/services/repository/files/tree_test.go index 216dcdf4c9..075bacebaf 100644 --- a/services/repository/files/tree_test.go +++ b/services/repository/files/tree_test.go @@ -118,6 +118,14 @@ func Test_GetTreeInformation(t *testing.T) { assert.True(t, treeList[0].IsFile) assert.Empty(t, treeList[0].Children) + treeList, err = GetTreeInformation(ctx1, ctx1.Repo.Repository, "README.md", refName) + assert.NoError(t, err) + assert.Len(t, treeList, 1) + assert.EqualValues(t, "README.md", treeList[0].Name) + assert.EqualValues(t, "README.md", treeList[0].Path) + assert.True(t, treeList[0].IsFile) + assert.Empty(t, treeList[0].Children) + ctx2, _ := contexttest.MockContext(t, "org3/repo3") contexttest.LoadRepo(t, ctx2, 3) contexttest.LoadRepoCommit(t, ctx2) @@ -143,36 +151,37 @@ func Test_GetTreeInformation(t *testing.T) { treeList, err = GetTreeInformation(ctx2, ctx2.Repo.Repository, "doc", refName) assert.NoError(t, err) assert.Len(t, treeList, 2) - assert.EqualValues(t, "README.md", treeList[0].Name) - assert.EqualValues(t, "README.md", treeList[0].Path) - assert.True(t, treeList[0].IsFile) - assert.Empty(t, treeList[0].Children) + assert.EqualValues(t, "doc", treeList[0].Name) + assert.EqualValues(t, "doc", treeList[0].Path) + assert.False(t, treeList[0].IsFile) + assert.Len(t, treeList[0].Children, 1) - assert.EqualValues(t, "doc", treeList[1].Name) - assert.EqualValues(t, "doc", treeList[1].Path) - assert.False(t, treeList[1].IsFile) - assert.Len(t, treeList[1].Children, 1) + assert.EqualValues(t, "doc.md", treeList[0].Children[0].Name) + assert.EqualValues(t, "doc/doc.md", treeList[0].Children[0].Path) + assert.True(t, treeList[0].Children[0].IsFile) + assert.Empty(t, treeList[0].Children[0].Children) - assert.EqualValues(t, "doc.md", treeList[1].Children[0].Name) - assert.EqualValues(t, "doc/doc.md", treeList[1].Children[0].Path) - assert.True(t, treeList[1].Children[0].IsFile) - assert.Empty(t, treeList[1].Children[0].Children) + assert.EqualValues(t, "README.md", treeList[1].Name) + assert.EqualValues(t, "README.md", treeList[1].Path) + assert.True(t, treeList[1].IsFile) + assert.Empty(t, treeList[1].Children) treeList, err = GetTreeInformation(ctx2, ctx2.Repo.Repository, "doc/doc.md", refName) assert.NoError(t, err) assert.Len(t, treeList, 2) - assert.EqualValues(t, "README.md", treeList[0].Name) - assert.EqualValues(t, "README.md", treeList[0].Path) - assert.True(t, treeList[0].IsFile) - assert.Empty(t, treeList[0].Children) - assert.EqualValues(t, "doc", treeList[1].Name) - assert.EqualValues(t, "doc", treeList[1].Path) - assert.False(t, treeList[1].IsFile) - assert.Len(t, treeList[1].Children, 1) + assert.EqualValues(t, "doc", treeList[0].Name) + assert.EqualValues(t, "doc", treeList[0].Path) + assert.False(t, treeList[0].IsFile) + assert.Len(t, treeList[0].Children, 1) - assert.EqualValues(t, "doc.md", treeList[1].Children[0].Name) - assert.EqualValues(t, "doc/doc.md", treeList[1].Children[0].Path) - assert.True(t, treeList[1].Children[0].IsFile) - assert.Empty(t, treeList[1].Children[0].Children) + assert.EqualValues(t, "doc.md", treeList[0].Children[0].Name) + assert.EqualValues(t, "doc/doc.md", treeList[0].Children[0].Path) + assert.True(t, treeList[0].Children[0].IsFile) + assert.Empty(t, treeList[0].Children[0].Children) + + assert.EqualValues(t, "README.md", treeList[1].Name) + assert.EqualValues(t, "README.md", treeList[1].Path) + assert.True(t, treeList[1].IsFile) + assert.Empty(t, treeList[1].Children) }