gitea源码

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. // Copyright 2021 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package private
  4. import (
  5. "fmt"
  6. "net/http"
  7. repo_model "code.gitea.io/gitea/models/repo"
  8. "code.gitea.io/gitea/modules/gitrepo"
  9. "code.gitea.io/gitea/modules/log"
  10. "code.gitea.io/gitea/modules/private"
  11. gitea_context "code.gitea.io/gitea/services/context"
  12. )
  13. // This file contains common functions relating to setting the Repository for the internal routes
  14. // RepoAssignment assigns the repository and git repository to the private context
  15. func RepoAssignment(ctx *gitea_context.PrivateContext) {
  16. ownerName := ctx.PathParam("owner")
  17. repoName := ctx.PathParam("repo")
  18. repo := loadRepository(ctx, ownerName, repoName)
  19. if ctx.Written() {
  20. // Error handled in loadRepository
  21. return
  22. }
  23. gitRepo, err := gitrepo.RepositoryFromRequestContextOrOpen(ctx, repo)
  24. if err != nil {
  25. log.Error("Failed to open repository: %s/%s Error: %v", ownerName, repoName, err)
  26. ctx.JSON(http.StatusInternalServerError, private.Response{
  27. Err: fmt.Sprintf("Failed to open repository: %s/%s Error: %v", ownerName, repoName, err),
  28. })
  29. return
  30. }
  31. ctx.Repo = &gitea_context.Repository{
  32. Repository: repo,
  33. GitRepo: gitRepo,
  34. }
  35. }
  36. func loadRepository(ctx *gitea_context.PrivateContext, ownerName, repoName string) *repo_model.Repository {
  37. repo, err := repo_model.GetRepositoryByOwnerAndName(ctx, ownerName, repoName)
  38. if err != nil {
  39. log.Error("Failed to get repository: %s/%s Error: %v", ownerName, repoName, err)
  40. ctx.JSON(http.StatusInternalServerError, private.Response{
  41. Err: fmt.Sprintf("Failed to get repository: %s/%s Error: %v", ownerName, repoName, err),
  42. })
  43. return nil
  44. }
  45. if repo.OwnerName == "" {
  46. repo.OwnerName = ownerName
  47. }
  48. return repo
  49. }