diff --git a/services/repository/files/tree.go b/services/repository/files/tree.go index 5fd73b00fa..94eec833d1 100644 --- a/services/repository/files/tree.go +++ b/services/repository/files/tree.go @@ -441,6 +441,7 @@ func GetTreeInformation(ctx context.Context, repo *repo_model.Repository, treePa if dir == "" { return treeList, nil } + fields = fields[:len(fields)-1] listEntry, err = commit.GetTreeEntryByPath(dir) if err != nil { return nil, err @@ -467,7 +468,7 @@ func GetTreeInformation(ctx context.Context, repo *repo_model.Repository, treePa parentEntry.Children = append(parentEntry.Children, &TreeEntry{ Name: entry.Name(), IsFile: entry.Mode() != git.EntryModeTree, - Path: path.Join(treePath, entry.Name()), + Path: path.Join(dir, entry.Name()), }) } return treeList, nil diff --git a/services/repository/files/tree_test.go b/services/repository/files/tree_test.go index 49188b72e7..83d6cae4d2 100644 --- a/services/repository/files/tree_test.go +++ b/services/repository/files/tree_test.go @@ -98,3 +98,81 @@ func Test_GetTreeList(t *testing.T) { assert.True(t, treeList[1].Children[0].IsFile) assert.Empty(t, treeList[1].Children[0].Children) } + +func Test_GetTreeInformation(t *testing.T) { + unittest.PrepareTestEnv(t) + ctx1, _ := contexttest.MockContext(t, "user2/repo1") + contexttest.LoadRepo(t, ctx1, 1) + contexttest.LoadRepoCommit(t, ctx1) + contexttest.LoadUser(t, ctx1, 2) + contexttest.LoadGitRepo(t, ctx1) + defer ctx1.Repo.GitRepo.Close() + + refName := git.RefNameFromBranch(ctx1.Repo.Repository.DefaultBranch) + + treeList, err := GetTreeInformation(ctx1, ctx1.Repo.Repository, "", 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) + contexttest.LoadUser(t, ctx2, 2) + contexttest.LoadGitRepo(t, ctx2) + defer ctx2.Repo.GitRepo.Close() + + refName = git.RefNameFromBranch(ctx2.Repo.Repository.DefaultBranch) + + treeList, err = GetTreeInformation(ctx2, ctx2.Repo.Repository, "", 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, 0) + + 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[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[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) + + 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.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) +}