gitea源码

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // Copyright 2020 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package setting
  4. import (
  5. "path/filepath"
  6. repo_model "code.gitea.io/gitea/models/repo"
  7. user_model "code.gitea.io/gitea/models/user"
  8. "code.gitea.io/gitea/modules/setting"
  9. "code.gitea.io/gitea/modules/util"
  10. "code.gitea.io/gitea/services/context"
  11. repo_service "code.gitea.io/gitea/services/repository"
  12. )
  13. // AdoptOrDeleteRepository adopts or deletes a repository
  14. func AdoptOrDeleteRepository(ctx *context.Context) {
  15. ctx.Data["Title"] = ctx.Tr("settings.adopt")
  16. ctx.Data["PageIsSettingsRepos"] = true
  17. allowAdopt := ctx.IsUserSiteAdmin() || setting.Repository.AllowAdoptionOfUnadoptedRepositories
  18. ctx.Data["allowAdopt"] = allowAdopt
  19. allowDelete := ctx.IsUserSiteAdmin() || setting.Repository.AllowDeleteOfUnadoptedRepositories
  20. ctx.Data["allowDelete"] = allowDelete
  21. dir := ctx.FormString("id")
  22. action := ctx.FormString("action")
  23. ctxUser := ctx.Doer
  24. root := user_model.UserPath(ctxUser.LowerName)
  25. // check not a repo
  26. has, err := repo_model.IsRepositoryModelExist(ctx, ctxUser, dir)
  27. if err != nil {
  28. ctx.ServerError("IsRepositoryExist", err)
  29. return
  30. }
  31. isDir, err := util.IsDir(filepath.Join(root, dir+".git"))
  32. if err != nil {
  33. ctx.ServerError("IsDir", err)
  34. return
  35. }
  36. if has || !isDir {
  37. // Fallthrough to failure mode
  38. } else if action == "adopt" && allowAdopt {
  39. if _, err := repo_service.AdoptRepository(ctx, ctxUser, ctxUser, repo_service.CreateRepoOptions{
  40. Name: dir,
  41. IsPrivate: true,
  42. }); err != nil {
  43. ctx.ServerError("repository.AdoptRepository", err)
  44. return
  45. }
  46. ctx.Flash.Success(ctx.Tr("repo.adopt_preexisting_success", dir))
  47. } else if action == "delete" && allowDelete {
  48. if err := repo_service.DeleteUnadoptedRepository(ctx, ctxUser, ctxUser, dir); err != nil {
  49. ctx.ServerError("repository.AdoptRepository", err)
  50. return
  51. }
  52. ctx.Flash.Success(ctx.Tr("repo.delete_preexisting_success", dir))
  53. }
  54. ctx.Redirect(setting.AppSubURL + "/user/settings/repos")
  55. }