aboutsummaryrefslogtreecommitdiffstats
path: root/services/issue
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2022-04-08 17:11:15 +0800
committerGitHub <noreply@github.com>2022-04-08 17:11:15 +0800
commit1dfa26e00e8e1ce6f6125335871da1d402a63466 (patch)
treed39414fb085ae52d6633ae9d064aabab2e7f75f8 /services/issue
parent84ceaa98bd731431c7d3a7f65e59e7ad076a540f (diff)
downloadgitea-1dfa26e00e8e1ce6f6125335871da1d402a63466.tar.gz
gitea-1dfa26e00e8e1ce6f6125335871da1d402a63466.zip
Move milestone to models/issues/ (#19278)
* Move milestone to models/issues/ * Fix lint * Fix test * Fix lint * Fix lint
Diffstat (limited to 'services/issue')
-rw-r--r--services/issue/label.go3
-rw-r--r--services/issue/milestone.go57
-rw-r--r--services/issue/milestone_test.go35
3 files changed, 92 insertions, 3 deletions
diff --git a/services/issue/label.go b/services/issue/label.go
index 9971be326c..e72e1cb521 100644
--- a/services/issue/label.go
+++ b/services/issue/label.go
@@ -6,6 +6,7 @@ package issue
import (
"code.gitea.io/gitea/models"
+ "code.gitea.io/gitea/models/db"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/notification"
)
@@ -43,7 +44,7 @@ func AddLabels(issue *models.Issue, doer *user_model.User, labels []*models.Labe
// RemoveLabel removes a label from issue by given ID.
func RemoveLabel(issue *models.Issue, doer *user_model.User, label *models.Label) error {
- if err := issue.LoadRepo(); err != nil {
+ if err := issue.LoadRepo(db.DefaultContext); err != nil {
return err
}
diff --git a/services/issue/milestone.go b/services/issue/milestone.go
index 999da50844..287f8ae285 100644
--- a/services/issue/milestone.go
+++ b/services/issue/milestone.go
@@ -5,15 +5,68 @@
package issue
import (
+ "context"
+ "fmt"
+
"code.gitea.io/gitea/models"
+ "code.gitea.io/gitea/models/db"
+ issues_model "code.gitea.io/gitea/models/issues"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/notification"
)
+func changeMilestoneAssign(ctx context.Context, doer *user_model.User, issue *models.Issue, oldMilestoneID int64) error {
+ if err := models.UpdateIssueCols(ctx, issue, "milestone_id"); err != nil {
+ return err
+ }
+
+ if oldMilestoneID > 0 {
+ if err := issues_model.UpdateMilestoneCounters(ctx, oldMilestoneID); err != nil {
+ return err
+ }
+ }
+
+ if issue.MilestoneID > 0 {
+ if err := issues_model.UpdateMilestoneCounters(ctx, issue.MilestoneID); err != nil {
+ return err
+ }
+ }
+
+ if oldMilestoneID > 0 || issue.MilestoneID > 0 {
+ if err := issue.LoadRepo(ctx); err != nil {
+ return err
+ }
+
+ opts := &models.CreateCommentOptions{
+ Type: models.CommentTypeMilestone,
+ Doer: doer,
+ Repo: issue.Repo,
+ Issue: issue,
+ OldMilestoneID: oldMilestoneID,
+ MilestoneID: issue.MilestoneID,
+ }
+ if _, err := models.CreateCommentCtx(ctx, opts); err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
// ChangeMilestoneAssign changes assignment of milestone for issue.
func ChangeMilestoneAssign(issue *models.Issue, doer *user_model.User, oldMilestoneID int64) (err error) {
- if err = models.ChangeMilestoneAssign(issue, doer, oldMilestoneID); err != nil {
- return
+ ctx, committer, err := db.TxContext()
+ if err != nil {
+ return err
+ }
+ defer committer.Close()
+
+ if err = changeMilestoneAssign(ctx, doer, issue, oldMilestoneID); err != nil {
+ return err
+ }
+
+ if err = committer.Commit(); err != nil {
+ return fmt.Errorf("Commit: %v", err)
}
notification.NotifyIssueChangeMilestone(doer, issue, oldMilestoneID)
diff --git a/services/issue/milestone_test.go b/services/issue/milestone_test.go
new file mode 100644
index 0000000000..80e37a8acd
--- /dev/null
+++ b/services/issue/milestone_test.go
@@ -0,0 +1,35 @@
+// Copyright 2019 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package issue
+
+import (
+ "testing"
+
+ "code.gitea.io/gitea/models"
+ issues_model "code.gitea.io/gitea/models/issues"
+ "code.gitea.io/gitea/models/unittest"
+ user_model "code.gitea.io/gitea/models/user"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestChangeMilestoneAssign(t *testing.T) {
+ assert.NoError(t, unittest.PrepareTestDatabase())
+ issue := unittest.AssertExistsAndLoadBean(t, &models.Issue{RepoID: 1}).(*models.Issue)
+ doer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User)
+ assert.NotNil(t, issue)
+ assert.NotNil(t, doer)
+
+ oldMilestoneID := issue.MilestoneID
+ issue.MilestoneID = 2
+ assert.NoError(t, ChangeMilestoneAssign(issue, doer, oldMilestoneID))
+ unittest.AssertExistsAndLoadBean(t, &models.Comment{
+ IssueID: issue.ID,
+ Type: models.CommentTypeMilestone,
+ MilestoneID: issue.MilestoneID,
+ OldMilestoneID: oldMilestoneID,
+ })
+ unittest.CheckConsistencyFor(t, &issues_model.Milestone{}, &models.Issue{})
+}