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.

milestone.go 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // Copyright 2019 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package issue
  4. import (
  5. "context"
  6. "fmt"
  7. "code.gitea.io/gitea/models/db"
  8. issues_model "code.gitea.io/gitea/models/issues"
  9. user_model "code.gitea.io/gitea/models/user"
  10. notify_service "code.gitea.io/gitea/services/notify"
  11. )
  12. func changeMilestoneAssign(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, oldMilestoneID int64) error {
  13. // Only check if milestone exists if we don't remove it.
  14. if issue.MilestoneID > 0 {
  15. has, err := issues_model.HasMilestoneByRepoID(ctx, issue.RepoID, issue.MilestoneID)
  16. if err != nil {
  17. return fmt.Errorf("HasMilestoneByRepoID: %w", err)
  18. }
  19. if !has {
  20. return fmt.Errorf("HasMilestoneByRepoID: issue doesn't exist")
  21. }
  22. }
  23. if err := issues_model.UpdateIssueCols(ctx, issue, "milestone_id"); err != nil {
  24. return err
  25. }
  26. if oldMilestoneID > 0 {
  27. if err := issues_model.UpdateMilestoneCounters(ctx, oldMilestoneID); err != nil {
  28. return err
  29. }
  30. }
  31. if issue.MilestoneID > 0 {
  32. if err := issues_model.UpdateMilestoneCounters(ctx, issue.MilestoneID); err != nil {
  33. return err
  34. }
  35. }
  36. if oldMilestoneID > 0 || issue.MilestoneID > 0 {
  37. if err := issue.LoadRepo(ctx); err != nil {
  38. return err
  39. }
  40. opts := &issues_model.CreateCommentOptions{
  41. Type: issues_model.CommentTypeMilestone,
  42. Doer: doer,
  43. Repo: issue.Repo,
  44. Issue: issue,
  45. OldMilestoneID: oldMilestoneID,
  46. MilestoneID: issue.MilestoneID,
  47. }
  48. if _, err := issues_model.CreateComment(ctx, opts); err != nil {
  49. return err
  50. }
  51. }
  52. return nil
  53. }
  54. // ChangeMilestoneAssign changes assignment of milestone for issue.
  55. func ChangeMilestoneAssign(issue *issues_model.Issue, doer *user_model.User, oldMilestoneID int64) (err error) {
  56. ctx, committer, err := db.TxContext(db.DefaultContext)
  57. if err != nil {
  58. return err
  59. }
  60. defer committer.Close()
  61. if err = changeMilestoneAssign(ctx, doer, issue, oldMilestoneID); err != nil {
  62. return err
  63. }
  64. if err = committer.Commit(); err != nil {
  65. return fmt.Errorf("Commit: %w", err)
  66. }
  67. notify_service.IssueChangeMilestone(db.DefaultContext, doer, issue, oldMilestoneID)
  68. return nil
  69. }