@@ -413,50 +413,45 @@ func GetTreeInformation(ctx context.Context, repo *repo_model.Repository, treePa
413413 return nil , err
414414 }
415415
416- var treeList []* TreeEntry
416+ var dir string
417+ var lastDirEntry * git.TreeEntry
418+ if treePath == "" {
419+ dir = treePath
420+ lastDirEntry = rootEntry
421+ } else {
422+ lastDirEntry , err = commit .GetTreeEntryByPath (treePath )
423+ if err != nil {
424+ return nil , err
425+ }
426+ dir = treePath
427+ if lastDirEntry .IsRegular () {
428+ dir = path .Dir (treePath )
429+ lastDirEntry , err = commit .GetTreeEntryByPath (dir )
430+ if err != nil {
431+ return nil , err
432+ }
433+ }
434+ }
435+
436+ treeList := make ([]* TreeEntry , 0 , len (rootEntries ))
437+ fields := strings .Split (dir , "/" )
417438 var parentEntry * TreeEntry
418- fields := strings .SplitN (treePath , "/" , 2 )
419439 for _ , entry := range rootEntries {
420440 treeEntry := & TreeEntry {
421441 Name : entry .Name (),
422442 IsFile : entry .Mode () != git .EntryModeTree ,
423443 Path : entry .Name (),
424444 }
425445 treeList = append (treeList , treeEntry )
426- if fields [0 ] == entry .Name () {
427- if len (fields ) == 1 {
428- if treeEntry .IsFile {
429- return treeList , nil
430- }
431- }
446+ if dir != "" && fields [0 ] == entry .Name () {
432447 parentEntry = treeEntry
433448 }
434449 }
435450
436- if treePath == "" || parentEntry == nil {
451+ if dir == "" || parentEntry == nil {
437452 return treeList , nil
438453 }
439454
440- listEntry , err := commit .GetTreeEntryByPath (treePath )
441- if err != nil {
442- return nil , err
443- }
444-
445- dir := treePath
446- // list current entry or parent entry if it's a file's children
447- // If the entry is a file, we return a FileContentResponse object
448- if listEntry .IsRegular () {
449- dir = path .Dir (treePath )
450- if dir == "" {
451- return treeList , nil
452- }
453- fields = fields [:len (fields )- 1 ]
454- listEntry , err = commit .GetTreeEntryByPath (dir )
455- if err != nil {
456- return nil , err
457- }
458- }
459-
460455 for i := 1 ; i < len (fields ); i ++ {
461456 parentEntry .Children = []* TreeEntry {
462457 {
@@ -468,7 +463,7 @@ func GetTreeInformation(ctx context.Context, repo *repo_model.Repository, treePa
468463 parentEntry = parentEntry .Children [0 ]
469464 }
470465
471- entries , err := listEntry .Tree ().ListEntries ()
466+ entries , err := lastDirEntry .Tree ().ListEntries ()
472467 if err != nil {
473468 return nil , err
474469 }
0 commit comments