You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

treelist.go 1.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package repo
  4. import (
  5. "net/http"
  6. "code.gitea.io/gitea/modules/base"
  7. "code.gitea.io/gitea/modules/context"
  8. "code.gitea.io/gitea/modules/git"
  9. "github.com/go-enry/go-enry/v2"
  10. )
  11. // TreeList get all files' entries of a repository
  12. func TreeList(ctx *context.Context) {
  13. tree, err := ctx.Repo.Commit.SubTree("/")
  14. if err != nil {
  15. ctx.ServerError("Repo.Commit.SubTree", err)
  16. return
  17. }
  18. entries, err := tree.ListEntriesRecursiveFast()
  19. if err != nil {
  20. ctx.ServerError("ListEntriesRecursiveFast", err)
  21. return
  22. }
  23. entries.CustomSort(base.NaturalSortLess)
  24. files := make([]string, 0, len(entries))
  25. for _, entry := range entries {
  26. if !isExcludedEntry(entry) {
  27. files = append(files, entry.Name())
  28. }
  29. }
  30. ctx.JSON(http.StatusOK, files)
  31. }
  32. func isExcludedEntry(entry *git.TreeEntry) bool {
  33. if entry.IsDir() {
  34. return true
  35. }
  36. if entry.IsSubModule() {
  37. return true
  38. }
  39. if enry.IsVendor(entry.Name()) {
  40. return true
  41. }
  42. return false
  43. }