gitea源码

packages.go 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. // Copyright 2014 The Gogs Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package admin
  4. import (
  5. "net/http"
  6. "net/url"
  7. "time"
  8. "code.gitea.io/gitea/models/db"
  9. packages_model "code.gitea.io/gitea/models/packages"
  10. "code.gitea.io/gitea/modules/optional"
  11. "code.gitea.io/gitea/modules/setting"
  12. "code.gitea.io/gitea/modules/templates"
  13. "code.gitea.io/gitea/services/context"
  14. packages_service "code.gitea.io/gitea/services/packages"
  15. packages_cleanup_service "code.gitea.io/gitea/services/packages/cleanup"
  16. )
  17. const (
  18. tplPackagesList templates.TplName = "admin/packages/list"
  19. )
  20. // Packages shows all packages
  21. func Packages(ctx *context.Context) {
  22. page := max(ctx.FormInt("page"), 1)
  23. query := ctx.FormTrim("q")
  24. packageType := ctx.FormTrim("type")
  25. sort := ctx.FormTrim("sort")
  26. pvs, total, err := packages_model.SearchVersions(ctx, &packages_model.PackageSearchOptions{
  27. Type: packages_model.Type(packageType),
  28. Name: packages_model.SearchValue{Value: query},
  29. Sort: sort,
  30. IsInternal: optional.Some(false),
  31. Paginator: &db.ListOptions{
  32. PageSize: setting.UI.PackagesPagingNum,
  33. Page: page,
  34. },
  35. })
  36. if err != nil {
  37. ctx.ServerError("SearchVersions", err)
  38. return
  39. }
  40. pds, err := packages_model.GetPackageDescriptors(ctx, pvs)
  41. if err != nil {
  42. ctx.ServerError("GetPackageDescriptors", err)
  43. return
  44. }
  45. totalBlobSize, err := packages_model.GetTotalBlobSize(ctx)
  46. if err != nil {
  47. ctx.ServerError("GetTotalBlobSize", err)
  48. return
  49. }
  50. totalUnreferencedBlobSize, err := packages_model.GetTotalUnreferencedBlobSize(ctx)
  51. if err != nil {
  52. ctx.ServerError("CalculateBlobSize", err)
  53. return
  54. }
  55. ctx.Data["Title"] = ctx.Tr("packages.title")
  56. ctx.Data["PageIsAdminPackages"] = true
  57. ctx.Data["Query"] = query
  58. ctx.Data["PackageType"] = packageType
  59. ctx.Data["AvailableTypes"] = packages_model.TypeList
  60. ctx.Data["SortType"] = sort
  61. ctx.Data["PackageDescriptors"] = pds
  62. ctx.Data["TotalCount"] = total
  63. ctx.Data["TotalBlobSize"] = totalBlobSize - totalUnreferencedBlobSize
  64. ctx.Data["TotalUnreferencedBlobSize"] = totalUnreferencedBlobSize
  65. pager := context.NewPagination(int(total), setting.UI.PackagesPagingNum, page, 5)
  66. pager.AddParamFromRequest(ctx.Req)
  67. ctx.Data["Page"] = pager
  68. ctx.HTML(http.StatusOK, tplPackagesList)
  69. }
  70. // DeletePackageVersion deletes a package version
  71. func DeletePackageVersion(ctx *context.Context) {
  72. pv, err := packages_model.GetVersionByID(ctx, ctx.FormInt64("id"))
  73. if err != nil {
  74. ctx.ServerError("GetRepositoryByID", err)
  75. return
  76. }
  77. if err := packages_service.RemovePackageVersion(ctx, ctx.Doer, pv); err != nil {
  78. ctx.ServerError("RemovePackageVersion", err)
  79. return
  80. }
  81. ctx.Flash.Success(ctx.Tr("packages.settings.delete.success"))
  82. ctx.JSONRedirect(setting.AppSubURL + "/-/admin/packages?page=" + url.QueryEscape(ctx.FormString("page")) + "&q=" + url.QueryEscape(ctx.FormString("q")) + "&type=" + url.QueryEscape(ctx.FormString("type")))
  83. }
  84. func CleanupExpiredData(ctx *context.Context) {
  85. if err := packages_cleanup_service.CleanupExpiredData(ctx, time.Duration(0)); err != nil {
  86. ctx.ServerError("CleanupExpiredData", err)
  87. return
  88. }
  89. ctx.Flash.Success(ctx.Tr("admin.packages.cleanup.success"))
  90. ctx.Redirect(setting.AppSubURL + "/-/admin/packages")
  91. }