gitea源码

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // Copyright 2021 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package private
  4. import (
  5. "errors"
  6. "net/http"
  7. issues_model "code.gitea.io/gitea/models/issues"
  8. user_model "code.gitea.io/gitea/models/user"
  9. "code.gitea.io/gitea/modules/git"
  10. "code.gitea.io/gitea/modules/log"
  11. "code.gitea.io/gitea/modules/private"
  12. "code.gitea.io/gitea/modules/web"
  13. "code.gitea.io/gitea/services/agit"
  14. gitea_context "code.gitea.io/gitea/services/context"
  15. )
  16. // HookProcReceive proc-receive hook - only handles agit Proc-Receive requests at present
  17. func HookProcReceive(ctx *gitea_context.PrivateContext) {
  18. opts := web.GetForm(ctx).(*private.HookOptions)
  19. if !git.DefaultFeatures().SupportProcReceive {
  20. ctx.Status(http.StatusNotFound)
  21. return
  22. }
  23. results, err := agit.ProcReceive(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, opts)
  24. if err != nil {
  25. if errors.Is(err, issues_model.ErrMustCollaborator) {
  26. ctx.JSON(http.StatusUnauthorized, private.Response{
  27. Err: err.Error(), UserMsg: "You must be a collaborator to create pull request.",
  28. })
  29. } else if errors.Is(err, user_model.ErrBlockedUser) {
  30. ctx.JSON(http.StatusUnauthorized, private.Response{
  31. Err: err.Error(), UserMsg: "Cannot create pull request because you are blocked by the repository owner.",
  32. })
  33. } else {
  34. log.Error("agit.ProcReceive failed: %v", err)
  35. ctx.JSON(http.StatusInternalServerError, private.Response{
  36. Err: err.Error(),
  37. })
  38. }
  39. return
  40. }
  41. ctx.JSON(http.StatusOK, private.HookProcReceiveResult{
  42. Results: results,
  43. })
  44. }