Skip to content

Commit 3de4b0e

Browse files
committed
move change issue title from models to issue service package
1 parent 9ff9f5a commit 3de4b0e

File tree

10 files changed

+106
-99
lines changed

10 files changed

+106
-99
lines changed

integrations/api_pull_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"code.gitea.io/gitea/modules/auth"
1414
"code.gitea.io/gitea/modules/setting"
1515
api "code.gitea.io/gitea/modules/structs"
16+
issue_service "code.gitea.io/gitea/services/issue"
1617

1718
"github.com/stretchr/testify/assert"
1819
)
@@ -40,7 +41,7 @@ func TestAPIMergePullWIP(t *testing.T) {
4041
owner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User)
4142
pr := models.AssertExistsAndLoadBean(t, &models.PullRequest{Status: models.PullRequestStatusMergeable}, models.Cond("has_merged = ?", false)).(*models.PullRequest)
4243
pr.LoadIssue()
43-
pr.Issue.ChangeTitle(owner, setting.Repository.PullRequest.WorkInProgressPrefixes[0]+" "+pr.Issue.Title)
44+
issue_service.ChangeTitle(pr.Issue, owner, setting.Repository.PullRequest.WorkInProgressPrefixes[0]+" "+pr.Issue.Title)
4445

4546
// force reload
4647
pr.LoadAttributes()

models/issue.go

+4-82
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ func (issue *Issue) IsOverdue() bool {
9595
}
9696

9797
// LoadRepo loads issue's repository
98-
func (issue *Issue) LoadRepo() error {
99-
return issue.loadRepo(x)
98+
func (issue *Issue) LoadRepo(ctx DBContext) error {
99+
return issue.loadRepo(ctx.e)
100100
}
101101

102102
func (issue *Issue) loadRepo(e Engine) (err error) {
@@ -715,8 +715,8 @@ func updateIssueCols(e Engine, issue *Issue, cols ...string) error {
715715
}
716716

717717
// UpdateIssueCols only updates values of specific columns for given issue.
718-
func UpdateIssueCols(issue *Issue, cols ...string) error {
719-
return updateIssueCols(x, issue, cols...)
718+
func UpdateIssueCols(ctx DBContext, issue *Issue, cols ...string) error {
719+
return updateIssueCols(ctx.e, issue, cols...)
720720
}
721721

722722
func (issue *Issue) changeStatus(e *xorm.Session, doer *User, isClosed bool) (err error) {
@@ -843,84 +843,6 @@ func (issue *Issue) ChangeStatus(doer *User, isClosed bool) (err error) {
843843
return nil
844844
}
845845

846-
// ChangeTitle changes the title of this issue, as the given user.
847-
func (issue *Issue) ChangeTitle(doer *User, title string) (err error) {
848-
oldTitle := issue.Title
849-
issue.Title = title
850-
sess := x.NewSession()
851-
defer sess.Close()
852-
853-
if err = sess.Begin(); err != nil {
854-
return err
855-
}
856-
857-
if err = updateIssueCols(sess, issue, "name"); err != nil {
858-
return fmt.Errorf("updateIssueCols: %v", err)
859-
}
860-
861-
if err = issue.loadRepo(sess); err != nil {
862-
return fmt.Errorf("loadRepo: %v", err)
863-
}
864-
865-
if _, err = createChangeTitleComment(sess, doer, issue.Repo, issue, oldTitle, title); err != nil {
866-
return fmt.Errorf("createChangeTitleComment: %v", err)
867-
}
868-
869-
if err = issue.neuterCrossReferences(sess); err != nil {
870-
return err
871-
}
872-
873-
if err = issue.addCrossReferences(sess, doer); err != nil {
874-
return err
875-
}
876-
877-
if err = sess.Commit(); err != nil {
878-
return err
879-
}
880-
sess.Close()
881-
882-
mode, _ := AccessLevel(issue.Poster, issue.Repo)
883-
if issue.IsPull {
884-
if err = issue.loadPullRequest(sess); err != nil {
885-
return fmt.Errorf("loadPullRequest: %v", err)
886-
}
887-
issue.PullRequest.Issue = issue
888-
err = PrepareWebhooks(issue.Repo, HookEventPullRequest, &api.PullRequestPayload{
889-
Action: api.HookIssueEdited,
890-
Index: issue.Index,
891-
Changes: &api.ChangesPayload{
892-
Title: &api.ChangesFromPayload{
893-
From: oldTitle,
894-
},
895-
},
896-
PullRequest: issue.PullRequest.APIFormat(),
897-
Repository: issue.Repo.APIFormat(mode),
898-
Sender: doer.APIFormat(),
899-
})
900-
} else {
901-
err = PrepareWebhooks(issue.Repo, HookEventIssues, &api.IssuePayload{
902-
Action: api.HookIssueEdited,
903-
Index: issue.Index,
904-
Changes: &api.ChangesPayload{
905-
Title: &api.ChangesFromPayload{
906-
From: oldTitle,
907-
},
908-
},
909-
Issue: issue.APIFormat(),
910-
Repository: issue.Repo.APIFormat(mode),
911-
Sender: issue.Poster.APIFormat(),
912-
})
913-
}
914-
915-
if err != nil {
916-
log.Error("PrepareWebhooks [is_pull: %v]: %v", issue.IsPull, err)
917-
} else {
918-
go HookQueue.Add(issue.RepoID)
919-
}
920-
921-
return nil
922-
}
923-
924846
// AddDeletePRBranchComment adds delete branch comment for pull request issue
925847
func AddDeletePRBranchComment(doer *User, repo *Repository, issueID int64, branchName string) error {
926848
issue, err := getIssueByID(x, issueID)

models/issue_comment.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -468,7 +468,7 @@ func (c *Comment) CodeCommentURL() string {
468468
return fmt.Sprintf("%s/files#%s", c.Issue.HTMLURL(), c.HashTag())
469469
}
470470

471-
func createComment(e *xorm.Session, opts *CreateCommentOptions) (_ *Comment, err error) {
471+
func createComment(e Engine, opts *CreateCommentOptions) (_ *Comment, err error) {
472472
var LabelID int64
473473
if opts.Label != nil {
474474
LabelID = opts.Label.ID
@@ -519,7 +519,7 @@ func createComment(e *xorm.Session, opts *CreateCommentOptions) (_ *Comment, err
519519
return comment, nil
520520
}
521521

522-
func sendCreateCommentAction(e *xorm.Session, opts *CreateCommentOptions, comment *Comment) (err error) {
522+
func sendCreateCommentAction(e Engine, opts *CreateCommentOptions, comment *Comment) (err error) {
523523
// Compose comment action, could be plain comment, close or reopen issue/pull request.
524524
// This object will be used to notify watchers in the end of function.
525525
act := &Action{
@@ -690,8 +690,9 @@ func createDeadlineComment(e *xorm.Session, doer *User, issue *Issue, newDeadlin
690690
})
691691
}
692692

693-
func createChangeTitleComment(e *xorm.Session, doer *User, repo *Repository, issue *Issue, oldTitle, newTitle string) (*Comment, error) {
694-
return createComment(e, &CreateCommentOptions{
693+
// CreateChangeTitleComment created a change title comment for issue
694+
func CreateChangeTitleComment(ctx DBContext, doer *User, repo *Repository, issue *Issue, oldTitle, newTitle string) (*Comment, error) {
695+
return createComment(ctx.e, &CreateCommentOptions{
695696
Type: CommentTypeChangeTitle,
696697
Doer: doer,
697698
Repo: repo,

models/issue_lock.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func updateIssueLock(opts *IssueLockOptions, lock bool) error {
3636
commentType = CommentTypeUnlock
3737
}
3838

39-
if err := UpdateIssueCols(opts.Issue, "is_locked"); err != nil {
39+
if err := UpdateIssueCols(DefaultDBContext(), opts.Issue, "is_locked"); err != nil {
4040
return err
4141
}
4242

models/issue_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ func TestUpdateIssueCols(t *testing.T) {
160160
issue.Content = "This should have no effect"
161161

162162
now := time.Now().Unix()
163-
assert.NoError(t, UpdateIssueCols(issue, "name"))
163+
assert.NoError(t, UpdateIssueCols(DefaultDBContext(), issue, "name"))
164164
then := time.Now().Unix()
165165

166166
updatedIssue := AssertExistsAndLoadBean(t, &Issue{ID: issue.ID}).(*Issue)

models/issue_xref.go

+15-6
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010

1111
"code.gitea.io/gitea/modules/log"
1212

13-
"github.com/go-xorm/xorm"
1413
"github.com/unknwon/com"
1514
)
1615

@@ -51,7 +50,7 @@ type crossReferencesContext struct {
5150
OrigComment *Comment
5251
}
5352

54-
func newCrossReference(e *xorm.Session, ctx *crossReferencesContext, xref *crossReference) error {
53+
func newCrossReference(e Engine, ctx *crossReferencesContext, xref *crossReference) error {
5554
var refCommentID int64
5655
if ctx.OrigComment != nil {
5756
refCommentID = ctx.OrigComment.ID
@@ -98,7 +97,12 @@ func neuterCrossReferences(e Engine, issueID int64, commentID int64) error {
9897
// \/ \/ \/
9998
//
10099

101-
func (issue *Issue) addCrossReferences(e *xorm.Session, doer *User) error {
100+
// AddCrossReferences adds issues cross references
101+
func (issue *Issue) AddCrossReferences(ctx DBContext, doer *User) error {
102+
return issue.addCrossReferences(ctx.e, doer)
103+
}
104+
105+
func (issue *Issue) addCrossReferences(e Engine, doer *User) error {
102106
var commentType CommentType
103107
if issue.IsPull {
104108
commentType = CommentTypePullRef
@@ -113,7 +117,7 @@ func (issue *Issue) addCrossReferences(e *xorm.Session, doer *User) error {
113117
return issue.createCrossReferences(e, ctx, issue.Title+"\n"+issue.Content)
114118
}
115119

116-
func (issue *Issue) createCrossReferences(e *xorm.Session, ctx *crossReferencesContext, content string) error {
120+
func (issue *Issue) createCrossReferences(e Engine, ctx *crossReferencesContext, content string) error {
117121
xreflist, err := ctx.OrigIssue.getCrossReferences(e, ctx, content)
118122
if err != nil {
119123
return err
@@ -126,7 +130,7 @@ func (issue *Issue) createCrossReferences(e *xorm.Session, ctx *crossReferencesC
126130
return nil
127131
}
128132

129-
func (issue *Issue) getCrossReferences(e *xorm.Session, ctx *crossReferencesContext, content string) ([]*crossReference, error) {
133+
func (issue *Issue) getCrossReferences(e Engine, ctx *crossReferencesContext, content string) ([]*crossReference, error) {
130134
xreflist := make([]*crossReference, 0, 5)
131135
var xref *crossReference
132136

@@ -212,6 +216,11 @@ func (issue *Issue) isValidCommentReference(e Engine, ctx *crossReferencesContex
212216
}, nil
213217
}
214218

219+
// NeuterCrossReferences updated issues' cross references
220+
func (issue *Issue) NeuterCrossReferences(ctx DBContext) error {
221+
return issue.neuterCrossReferences(ctx.e)
222+
}
223+
215224
func (issue *Issue) neuterCrossReferences(e Engine) error {
216225
return neuterCrossReferences(e, issue.ID, 0)
217226
}
@@ -224,7 +233,7 @@ func (issue *Issue) neuterCrossReferences(e Engine) error {
224233
// \/ \/ \/ \/ \/
225234
//
226235

227-
func (comment *Comment) addCrossReferences(e *xorm.Session, doer *User) error {
236+
func (comment *Comment) addCrossReferences(e Engine, doer *User) error {
228237
if comment.Type != CommentTypeCode && comment.Type != CommentTypeComment {
229238
return nil
230239
}

routers/repo/issue.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -757,7 +757,7 @@ func ViewIssue(ctx *context.Context) {
757757
ctx.ServerError("GetIssueByID", err)
758758
return
759759
}
760-
if err = otherIssue.LoadRepo(); err != nil {
760+
if err = otherIssue.LoadRepo(models.DefaultDBContext()); err != nil {
761761
ctx.ServerError("LoadRepo", err)
762762
return
763763
}
@@ -1044,7 +1044,7 @@ func UpdateIssueTitle(ctx *context.Context) {
10441044
}
10451045

10461046
oldTitle := issue.Title
1047-
if err := issue.ChangeTitle(ctx.User, title); err != nil {
1047+
if err := issue_service.ChangeTitle(issue, ctx.User, title); err != nil {
10481048
ctx.ServerError("ChangeTitle", err)
10491049
return
10501050
}

services/issue/issue.go

+74
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,77 @@ func NewIssue(repo *models.Repository, issue *models.Issue, labelIDs []int64, as
4545

4646
return nil
4747
}
48+
49+
// ChangeTitle changes the title of this issue, as the given user.
50+
func ChangeTitle(issue *models.Issue, doer *models.User, title string) (err error) {
51+
oldTitle := issue.Title
52+
issue.Title = title
53+
54+
err = models.WithTx(func(ctx models.DBContext) error {
55+
if err = models.UpdateIssueCols(ctx, issue, "name"); err != nil {
56+
return fmt.Errorf("updateIssueCols: %v", err)
57+
}
58+
59+
if err = issue.LoadRepo(ctx); err != nil {
60+
return fmt.Errorf("loadRepo: %v", err)
61+
}
62+
63+
if _, err = models.CreateChangeTitleComment(ctx, doer, issue.Repo, issue, oldTitle, title); err != nil {
64+
return fmt.Errorf("CreateChangeTitleComment: %v", err)
65+
}
66+
67+
if err = issue.NeuterCrossReferences(ctx); err != nil {
68+
return err
69+
}
70+
71+
if err = issue.AddCrossReferences(ctx, doer); err != nil {
72+
return err
73+
}
74+
return nil
75+
})
76+
77+
if err != nil {
78+
return
79+
}
80+
81+
mode, _ := models.AccessLevel(issue.Poster, issue.Repo)
82+
if issue.IsPull {
83+
if err = issue.LoadPullRequest(); err != nil {
84+
return fmt.Errorf("loadPullRequest: %v", err)
85+
}
86+
issue.PullRequest.Issue = issue
87+
err = models.PrepareWebhooks(issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{
88+
Action: api.HookIssueEdited,
89+
Index: issue.Index,
90+
Changes: &api.ChangesPayload{
91+
Title: &api.ChangesFromPayload{
92+
From: oldTitle,
93+
},
94+
},
95+
PullRequest: issue.PullRequest.APIFormat(),
96+
Repository: issue.Repo.APIFormat(mode),
97+
Sender: doer.APIFormat(),
98+
})
99+
} else {
100+
err = models.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{
101+
Action: api.HookIssueEdited,
102+
Index: issue.Index,
103+
Changes: &api.ChangesPayload{
104+
Title: &api.ChangesFromPayload{
105+
From: oldTitle,
106+
},
107+
},
108+
Issue: issue.APIFormat(),
109+
Repository: issue.Repo.APIFormat(mode),
110+
Sender: issue.Poster.APIFormat(),
111+
})
112+
}
113+
114+
if err != nil {
115+
log.Error("PrepareWebhooks [is_pull: %v]: %v", issue.IsPull, err)
116+
} else {
117+
go models.HookQueue.Add(issue.RepoID)
118+
}
119+
120+
return nil
121+
}

services/mailer/mail.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ func composeIssueCommentMessage(issue *models.Issue, doer *models.User, content
170170
} else {
171171
subject = mailSubject(issue)
172172
}
173-
err := issue.LoadRepo()
173+
err := issue.LoadRepo(models.DefaultDBContext())
174174
if err != nil {
175175
log.Error("LoadRepo: %v", err)
176176
}

services/mailer/mail_issue.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ func mailIssueCommentToParticipants(issue *models.Issue, doer *models.User, cont
8888
names = append(names, participants[i].Name)
8989
}
9090

91-
if err := issue.LoadRepo(); err != nil {
91+
if err := issue.LoadRepo(models.DefaultDBContext()); err != nil {
9292
return err
9393
}
9494

0 commit comments

Comments
 (0)