This commit is contained in:
Lunny Xiao 2025-01-02 23:52:01 -08:00
parent fe63c5fbc1
commit 09000c4ce9
No known key found for this signature in database
GPG Key ID: C3B7C91B632F738A
3 changed files with 46 additions and 32 deletions

View File

@ -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)

View File

@ -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
}
}

View File

@ -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)
}