Skip to content

Commit 1649d46

Browse files
committed
Move and merge some functions about issue
1 parent 3a4a1bf commit 1649d46

File tree

17 files changed

+261
-261
lines changed

17 files changed

+261
-261
lines changed

models/issues/comment.go

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,33 +1136,16 @@ func UpdateCommentInvalidate(ctx context.Context, c *Comment) error {
11361136
}
11371137

11381138
// UpdateComment updates information of comment.
1139-
func UpdateComment(ctx context.Context, c *Comment, contentVersion int, doer *user_model.User) error {
1140-
ctx, committer, err := db.TxContext(ctx)
1141-
if err != nil {
1142-
return err
1143-
}
1144-
defer committer.Close()
1145-
sess := db.GetEngine(ctx)
1146-
1139+
func UpdateComment(ctx context.Context, c *Comment, contentVersion int) error {
11471140
c.ContentVersion = contentVersion + 1
11481141

1149-
affected, err := sess.ID(c.ID).AllCols().Where("content_version = ?", contentVersion).Update(c)
1142+
affected, err := db.GetEngine(ctx).ID(c.ID).AllCols().Where("content_version = ?", contentVersion).Update(c)
11501143
if err != nil {
11511144
return err
11521145
}
11531146
if affected == 0 {
11541147
return ErrCommentAlreadyChanged
11551148
}
1156-
if err := c.LoadIssue(ctx); err != nil {
1157-
return err
1158-
}
1159-
if err := c.AddCrossReferences(ctx, doer, true); err != nil {
1160-
return err
1161-
}
1162-
if err := committer.Commit(); err != nil {
1163-
return fmt.Errorf("Commit: %w", err)
1164-
}
1165-
11661149
return nil
11671150
}
11681151

@@ -1192,7 +1175,7 @@ func DeleteComment(ctx context.Context, comment *Comment) error {
11921175
return err
11931176
}
11941177

1195-
if err := comment.neuterCrossReferences(ctx); err != nil {
1178+
if err := neuterCrossReferences(ctx, comment.IssueID, comment.ID); err != nil {
11961179
return err
11971180
}
11981181

models/issues/issue.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,6 @@ func (err ErrIssueWasClosed) Error() string {
9494
return fmt.Sprintf("Issue [%d] %d was already closed", err.ID, err.Index)
9595
}
9696

97-
var ErrIssueAlreadyChanged = util.NewInvalidArgumentErrorf("the issue is already changed")
98-
9997
// Issue represents an issue or pull request of repository.
10098
type Issue struct {
10199
ID int64 `xorm:"pk autoincr"`

models/issues/issue_test.go

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,40 @@ func TestIssue_loadTotalTimes(t *testing.T) {
216216
assert.Equal(t, int64(3682), ms.TotalTrackedTime)
217217
}
218218

219+
// createIssue creates new issue with labels for repository.
220+
func createIssue(ctx context.Context, repo *repo_model.Repository, issue *issues_model.Issue, labelIDs []int64, uuids []string) (err error) {
221+
ctx, committer, err := db.TxContext(ctx)
222+
if err != nil {
223+
return err
224+
}
225+
defer committer.Close()
226+
227+
idx, err := db.GetNextResourceIndex(ctx, "issue_index", repo.ID)
228+
if err != nil {
229+
return fmt.Errorf("generate issue index failed: %w", err)
230+
}
231+
232+
issue.Index = idx
233+
234+
if err = issues_model.NewIssueWithIndex(ctx, issue.Poster, issues_model.NewIssueOptions{
235+
Repo: repo,
236+
Issue: issue,
237+
LabelIDs: labelIDs,
238+
Attachments: uuids,
239+
}); err != nil {
240+
if repo_model.IsErrUserDoesNotHaveAccessToRepo(err) || issues_model.IsErrNewIssueInsert(err) {
241+
return err
242+
}
243+
return fmt.Errorf("newIssue: %w", err)
244+
}
245+
246+
if err = committer.Commit(); err != nil {
247+
return fmt.Errorf("Commit: %w", err)
248+
}
249+
250+
return nil
251+
}
252+
219253
func testInsertIssue(t *testing.T, title, content string, expectIndex int64) *issues_model.Issue {
220254
var newIssue issues_model.Issue
221255
t.Run(title, func(t *testing.T) {
@@ -229,7 +263,7 @@ func testInsertIssue(t *testing.T, title, content string, expectIndex int64) *is
229263
Title: title,
230264
Content: content,
231265
}
232-
err := issues_model.NewIssue(db.DefaultContext, repo, &issue, nil, nil)
266+
err := createIssue(db.DefaultContext, repo, &issue, nil, nil)
233267
assert.NoError(t, err)
234268

235269
has, err := db.GetEngine(db.DefaultContext).ID(issue.ID).Get(&newIssue)

models/issues/issue_update.go

Lines changed: 6 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func UpdateIssueCols(ctx context.Context, issue *Issue, cols ...string) error {
3333
return nil
3434
}
3535

36-
func changeIssueStatus(ctx context.Context, issue *Issue, doer *user_model.User, isClosed, isMergePull bool) (*Comment, error) {
36+
func ChangeIssuePullStatus(ctx context.Context, issue *Issue, doer *user_model.User, isClosed, isMergePull bool) (*Comment, error) {
3737
// Reload the issue
3838
currentIssue, err := GetIssueByID(ctx, issue.ID)
3939
if err != nil {
@@ -127,41 +127,7 @@ func ChangeIssueStatus(ctx context.Context, issue *Issue, doer *user_model.User,
127127
return nil, err
128128
}
129129

130-
return changeIssueStatus(ctx, issue, doer, isClosed, false)
131-
}
132-
133-
// ChangeIssueTitle changes the title of this issue, as the given user.
134-
func ChangeIssueTitle(ctx context.Context, issue *Issue, doer *user_model.User, oldTitle string) (err error) {
135-
ctx, committer, err := db.TxContext(ctx)
136-
if err != nil {
137-
return err
138-
}
139-
defer committer.Close()
140-
141-
if err = UpdateIssueCols(ctx, issue, "name"); err != nil {
142-
return fmt.Errorf("updateIssueCols: %w", err)
143-
}
144-
145-
if err = issue.LoadRepo(ctx); err != nil {
146-
return fmt.Errorf("loadRepo: %w", err)
147-
}
148-
149-
opts := &CreateCommentOptions{
150-
Type: CommentTypeChangeTitle,
151-
Doer: doer,
152-
Repo: issue.Repo,
153-
Issue: issue,
154-
OldTitle: oldTitle,
155-
NewTitle: issue.Title,
156-
}
157-
if _, err = CreateComment(ctx, opts); err != nil {
158-
return fmt.Errorf("createComment: %w", err)
159-
}
160-
if err = issue.AddCrossReferences(ctx, doer, true); err != nil {
161-
return err
162-
}
163-
164-
return committer.Commit()
130+
return ChangeIssuePullStatus(ctx, issue, doer, isClosed, false)
165131
}
166132

167133
// ChangeIssueRef changes the branch of this issue, as the given user.
@@ -234,48 +200,6 @@ func UpdateIssueAttachments(ctx context.Context, issueID int64, uuids []string)
234200
return committer.Commit()
235201
}
236202

237-
// ChangeIssueContent changes issue content, as the given user.
238-
func ChangeIssueContent(ctx context.Context, issue *Issue, doer *user_model.User, content string, contentVersion int) (err error) {
239-
ctx, committer, err := db.TxContext(ctx)
240-
if err != nil {
241-
return err
242-
}
243-
defer committer.Close()
244-
245-
hasContentHistory, err := HasIssueContentHistory(ctx, issue.ID, 0)
246-
if err != nil {
247-
return fmt.Errorf("HasIssueContentHistory: %w", err)
248-
}
249-
if !hasContentHistory {
250-
if err = SaveIssueContentHistory(ctx, issue.PosterID, issue.ID, 0,
251-
issue.CreatedUnix, issue.Content, true); err != nil {
252-
return fmt.Errorf("SaveIssueContentHistory: %w", err)
253-
}
254-
}
255-
256-
issue.Content = content
257-
issue.ContentVersion = contentVersion + 1
258-
259-
affected, err := db.GetEngine(ctx).ID(issue.ID).Cols("content", "content_version").Where("content_version = ?", contentVersion).Update(issue)
260-
if err != nil {
261-
return err
262-
}
263-
if affected == 0 {
264-
return ErrIssueAlreadyChanged
265-
}
266-
267-
if err = SaveIssueContentHistory(ctx, doer.ID, issue.ID, 0,
268-
timeutil.TimeStampNow(), issue.Content, false); err != nil {
269-
return fmt.Errorf("SaveIssueContentHistory: %w", err)
270-
}
271-
272-
if err = issue.AddCrossReferences(ctx, doer, true); err != nil {
273-
return fmt.Errorf("addCrossReferences: %w", err)
274-
}
275-
276-
return committer.Commit()
277-
}
278-
279203
// NewIssueOptions represents the options of a new issue.
280204
type NewIssueOptions struct {
281205
Repo *repo_model.Repository
@@ -365,6 +289,10 @@ func NewIssueWithIndex(ctx context.Context, doer *user_model.User, opts NewIssue
365289
return err
366290
}
367291

292+
if err := UpdateIssueAttachments(ctx, opts.Issue.ID, opts.Attachments); err != nil {
293+
return err
294+
}
295+
368296
if len(opts.Attachments) > 0 {
369297
attachments, err := repo_model.GetAttachmentsByUUIDs(ctx, opts.Attachments)
370298
if err != nil {
@@ -385,40 +313,6 @@ func NewIssueWithIndex(ctx context.Context, doer *user_model.User, opts NewIssue
385313
return opts.Issue.AddCrossReferences(ctx, doer, false)
386314
}
387315

388-
// NewIssue creates new issue with labels for repository.
389-
func NewIssue(ctx context.Context, repo *repo_model.Repository, issue *Issue, labelIDs []int64, uuids []string) (err error) {
390-
ctx, committer, err := db.TxContext(ctx)
391-
if err != nil {
392-
return err
393-
}
394-
defer committer.Close()
395-
396-
idx, err := db.GetNextResourceIndex(ctx, "issue_index", repo.ID)
397-
if err != nil {
398-
return fmt.Errorf("generate issue index failed: %w", err)
399-
}
400-
401-
issue.Index = idx
402-
403-
if err = NewIssueWithIndex(ctx, issue.Poster, NewIssueOptions{
404-
Repo: repo,
405-
Issue: issue,
406-
LabelIDs: labelIDs,
407-
Attachments: uuids,
408-
}); err != nil {
409-
if repo_model.IsErrUserDoesNotHaveAccessToRepo(err) || IsErrNewIssueInsert(err) {
410-
return err
411-
}
412-
return fmt.Errorf("newIssue: %w", err)
413-
}
414-
415-
if err = committer.Commit(); err != nil {
416-
return fmt.Errorf("Commit: %w", err)
417-
}
418-
419-
return nil
420-
}
421-
422316
// UpdateIssueMentions updates issue-user relations for mentioned users.
423317
func UpdateIssueMentions(ctx context.Context, issueID int64, mentions []*user_model.User) error {
424318
if len(mentions) == 0 {

models/issues/issue_xref.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,10 @@ func (issue *Issue) AddCrossReferences(stdCtx context.Context, doer *user_model.
6868
OrigIssue: issue,
6969
RemoveOld: removeOld,
7070
}
71-
return issue.createCrossReferences(stdCtx, ctx, issue.Title, issue.Content)
71+
return createCrossReferences(stdCtx, ctx, issue.Title, issue.Content)
7272
}
7373

74-
func (issue *Issue) createCrossReferences(stdCtx context.Context, ctx *crossReferencesContext, plaincontent, mdcontent string) error {
74+
func createCrossReferences(stdCtx context.Context, ctx *crossReferencesContext, plaincontent, mdcontent string) error {
7575
xreflist, err := ctx.OrigIssue.getCrossReferences(stdCtx, ctx, plaincontent, mdcontent)
7676
if err != nil {
7777
return err
@@ -248,11 +248,7 @@ func (c *Comment) AddCrossReferences(stdCtx context.Context, doer *user_model.Us
248248
OrigComment: c,
249249
RemoveOld: removeOld,
250250
}
251-
return c.Issue.createCrossReferences(stdCtx, ctx, "", c.Content)
252-
}
253-
254-
func (c *Comment) neuterCrossReferences(ctx context.Context) error {
255-
return neuterCrossReferences(ctx, c.IssueID, c.ID)
251+
return createCrossReferences(stdCtx, ctx, "", c.Content)
256252
}
257253

258254
// LoadRefComment loads comment that created this reference from database

models/issues/issue_xref_test.go

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package issues_test
55

66
import (
7+
"context"
78
"fmt"
89
"testing"
910

@@ -81,15 +82,53 @@ func TestXRef_NeuterCrossReferences(t *testing.T) {
8182
assert.Equal(t, issues_model.CommentTypeIssueRef, ref.Type)
8283
assert.Equal(t, references.XRefActionNone, ref.RefAction)
8384

84-
d := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
85-
i.Title = "title2, no mentions"
86-
assert.NoError(t, issues_model.ChangeIssueTitle(db.DefaultContext, i, d, title))
87-
8885
ref = unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{IssueID: itarget.ID, RefIssueID: i.ID, RefCommentID: 0})
8986
assert.Equal(t, issues_model.CommentTypeIssueRef, ref.Type)
9087
assert.Equal(t, references.XRefActionNeutered, ref.RefAction)
9188
}
9289

90+
// newPullRequest creates new pull request with labels for repository.
91+
func newPullRequest(ctx context.Context, repo *repo_model.Repository, issue *issues_model.Issue, labelIDs []int64, uuids []string, pr *issues_model.PullRequest) (err error) {
92+
ctx, committer, err := db.TxContext(ctx)
93+
if err != nil {
94+
return err
95+
}
96+
defer committer.Close()
97+
98+
idx, err := db.GetNextResourceIndex(ctx, "issue_index", repo.ID)
99+
if err != nil {
100+
return fmt.Errorf("generate pull request index failed: %w", err)
101+
}
102+
103+
issue.Index = idx
104+
105+
if err = issues_model.NewIssueWithIndex(ctx, issue.Poster, issues_model.NewIssueOptions{
106+
Repo: repo,
107+
Issue: issue,
108+
LabelIDs: labelIDs,
109+
Attachments: uuids,
110+
IsPull: true,
111+
}); err != nil {
112+
if repo_model.IsErrUserDoesNotHaveAccessToRepo(err) || issues_model.IsErrNewIssueInsert(err) {
113+
return err
114+
}
115+
return fmt.Errorf("newIssue: %w", err)
116+
}
117+
118+
pr.Index = issue.Index
119+
pr.BaseRepo = repo
120+
pr.IssueID = issue.ID
121+
if err = db.Insert(ctx, pr); err != nil {
122+
return fmt.Errorf("insert pull repo: %w", err)
123+
}
124+
125+
if err = committer.Commit(); err != nil {
126+
return fmt.Errorf("Commit: %w", err)
127+
}
128+
129+
return nil
130+
}
131+
93132
func TestXRef_ResolveCrossReferences(t *testing.T) {
94133
assert.NoError(t, unittest.PrepareTestDatabase())
95134

@@ -163,7 +202,7 @@ func testCreatePR(t *testing.T, repo, doer int64, title, content string) *issues
163202
d := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: doer})
164203
i := &issues_model.Issue{RepoID: r.ID, PosterID: d.ID, Poster: d, Title: title, Content: content, IsPull: true}
165204
pr := &issues_model.PullRequest{HeadRepoID: repo, BaseRepoID: repo, HeadBranch: "head", BaseBranch: "base", Status: issues_model.PullRequestStatusMergeable}
166-
assert.NoError(t, issues_model.NewPullRequest(db.DefaultContext, r, i, nil, nil, pr))
205+
assert.NoError(t, newPullRequest(db.DefaultContext, r, i, nil, nil, pr))
167206
pr.Issue = i
168207
return pr
169208
}

0 commit comments

Comments
 (0)