From e5c26f30c01ba3baddc3d368e4f8659d46b8f3a1 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sun, 29 Dec 2019 03:49:26 +0100 Subject: [PATCH 01/19] dont insert "-1" in any case to issue.poster_id --- models/issue.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/models/issue.go b/models/issue.go index 75f7bd818aa6..b6f542f77117 100644 --- a/models/issue.go +++ b/models/issue.go @@ -1569,6 +1569,12 @@ func SearchIssueIDsByKeyword(kw string, repoIDs []int64, limit, start int) (int6 } func updateIssue(e Engine, issue *Issue) error { + if issue.PosterID <= 0 { + _, err := e.Table("`issue`").Where("id = ?", issue.ID).Select("poster_id").Get(&issue.PosterID) + if err != nil { + return err + } + } _, err := e.ID(issue.ID).AllCols().Update(issue) if err != nil { return err From 4c8c595ebd898a75d50523819c75583621776de5 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sun, 29 Dec 2019 13:14:14 +0100 Subject: [PATCH 02/19] Make sure API cant override importand fields --- models/issue.go | 26 +++++++++++++++----------- models/user.go | 5 +++++ routers/api/v1/repo/issue.go | 4 ++-- routers/api/v1/repo/pull.go | 4 ++-- 4 files changed, 24 insertions(+), 15 deletions(-) diff --git a/models/issue.go b/models/issue.go index b6f542f77117..e6151a3dad33 100644 --- a/models/issue.go +++ b/models/issue.go @@ -1,4 +1,5 @@ // Copyright 2014 The Gogs Authors. All rights reserved. +// 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. @@ -1568,14 +1569,8 @@ func SearchIssueIDsByKeyword(kw string, repoIDs []int64, limit, start int) (int6 return total, ids, nil } -func updateIssue(e Engine, issue *Issue) error { - if issue.PosterID <= 0 { - _, err := e.Table("`issue`").Where("id = ?", issue.ID).Select("poster_id").Get(&issue.PosterID) - if err != nil { - return err - } - } - _, err := e.ID(issue.ID).AllCols().Update(issue) +func updateIssueByCols(e Engine, issue *Issue, columns ...string) error { + _, err := e.ID(issue.ID).Cols(columns...).Update(issue) if err != nil { return err } @@ -1583,16 +1578,25 @@ func updateIssue(e Engine, issue *Issue) error { } // UpdateIssue updates all fields of given issue. -func UpdateIssue(issue *Issue) error { +func UpdateIssueByAPI(issue *Issue) error { + // allowed fields to update + columns := []string{"name", "is_closed", "content", "milestone_id", + "priority", "num_comments", "ref", "deadline_unix", "created_unix", + "updated_unix", "closed_unix", "is_locked"} + sess := x.NewSession() defer sess.Close() if err := sess.Begin(); err != nil { return err } - if err := updateIssue(sess, issue); err != nil { + if err := issue.loadPoster(sess); err != nil { return err } - if err := issue.loadPoster(sess); err != nil { + if !issue.Poster.IsGhost() { + columns = append(columns, "") + } + + if err := updateIssueByCols(sess, issue, columns...); err != nil { return err } if err := issue.addCrossReferences(sess, issue.Poster, true); err != nil { diff --git a/models/user.go b/models/user.go index e832c2ed519b..347729246db9 100644 --- a/models/user.go +++ b/models/user.go @@ -791,6 +791,11 @@ func NewGhostUser() *User { } } +// IsGhost check if user is fake user for a deleted account +func (u *User) IsGhost() bool { + return u.ID == -1 && u.Name == "Ghost" +} + var ( reservedUsernames = []string{ "attachments", diff --git a/routers/api/v1/repo/issue.go b/routers/api/v1/repo/issue.go index 4396e6faaebe..f23ac762c2da 100644 --- a/routers/api/v1/repo/issue.go +++ b/routers/api/v1/repo/issue.go @@ -524,8 +524,8 @@ func EditIssue(ctx *context.APIContext, form api.EditIssueOption) { } } - if err = models.UpdateIssue(issue); err != nil { - ctx.Error(http.StatusInternalServerError, "UpdateIssue", err) + if err = models.UpdateIssueByAPI(issue); err != nil { + ctx.Error(http.StatusInternalServerError, "UpdateIssueByAPI", err) return } if form.State != nil { diff --git a/routers/api/v1/repo/pull.go b/routers/api/v1/repo/pull.go index 0392eb8e8c48..d0551320fdbc 100644 --- a/routers/api/v1/repo/pull.go +++ b/routers/api/v1/repo/pull.go @@ -450,8 +450,8 @@ func EditPullRequest(ctx *context.APIContext, form api.EditPullRequestOption) { } } - if err = models.UpdateIssue(issue); err != nil { - ctx.Error(http.StatusInternalServerError, "UpdateIssue", err) + if err = models.UpdateIssueByAPI(issue); err != nil { + ctx.Error(http.StatusInternalServerError, "UpdateIssueByAPI", err) return } if form.State != nil { From 27ceb654f2d0d059a74ac2d25e16aa68feb47490 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sun, 29 Dec 2019 13:15:22 +0100 Subject: [PATCH 03/19] code format --- models/issue.go | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/models/issue.go b/models/issue.go index e6151a3dad33..d3eeccb9b6d4 100644 --- a/models/issue.go +++ b/models/issue.go @@ -1569,12 +1569,9 @@ func SearchIssueIDsByKeyword(kw string, repoIDs []int64, limit, start int) (int6 return total, ids, nil } -func updateIssueByCols(e Engine, issue *Issue, columns ...string) error { - _, err := e.ID(issue.ID).Cols(columns...).Update(issue) - if err != nil { - return err - } - return nil +func updateIssueByCols(e Engine, issue *Issue, columns ...string) (err error) { + _, err = e.ID(issue.ID).Cols(columns...).Update(issue) + return } // UpdateIssue updates all fields of given issue. From c6b0666b61a89e43b6f4e0590800fa2eabfd3f00 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sun, 29 Dec 2019 13:16:52 +0100 Subject: [PATCH 04/19] fix lint --- models/issue.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/issue.go b/models/issue.go index d3eeccb9b6d4..b62524b9fc4e 100644 --- a/models/issue.go +++ b/models/issue.go @@ -1574,7 +1574,7 @@ func updateIssueByCols(e Engine, issue *Issue, columns ...string) (err error) { return } -// UpdateIssue updates all fields of given issue. +// UpdateIssueByAPI updates all allowed fields of given issue. func UpdateIssueByAPI(issue *Issue) error { // allowed fields to update columns := []string{"name", "is_closed", "content", "milestone_id", From 65c3f67adf3fad5739313117f1811b770bd0129d Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sun, 29 Dec 2019 14:58:17 +0100 Subject: [PATCH 05/19] WIP test --- integrations/api_issue_test.go | 31 +++++++++++++++++++++++++++++++ models/fixtures/issue.yml | 14 +++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/integrations/api_issue_test.go b/integrations/api_issue_test.go index f412f5af085d..e17304ce69ed 100644 --- a/integrations/api_issue_test.go +++ b/integrations/api_issue_test.go @@ -62,3 +62,34 @@ func TestAPICreateIssue(t *testing.T) { Title: title, }) } + +func TestAPIEditIssue(t *testing.T) { + defer prepareTestEnv(t)() + + repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 2}).(*models.Repository) + owner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User) + issueBefore := models.AssertExistsAndLoadBean(t, &models.Issue{ID: 10}).(*models.Issue) + + session := loginUser(t, owner.Name) + token := getTokenForLoggedInUser(t, session) + + issueState := "closed" + + urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d?token=%s", owner.Name, repo.Name, issueBefore.Index, token) + req := NewRequestWithJSON(t, "PATCH", urlStr, api.EditIssueOption{ + State: &issueState, + // ToDo change more + }) + resp := session.MakeRequest(t, req, http.StatusCreated) + var apiIssue api.Issue + DecodeJSON(t, resp, &apiIssue) + + issueAfter := models.AssertExistsAndLoadBean(t, &models.Issue{ID: 10}).(*models.Issue) + + assert.Equal(t, api.StateOpen, issueBefore.State()) + assert.Equal(t, api.StateClosed, issueAfter.State()) + // check deleted user + assert.Equal(t, 100, issueBefore.Poster.ID) + assert.Equal(t, 100, apiIssue.Poster.ID) + assert.Equal(t, 100, issueAfter.Poster.ID) +} diff --git a/models/fixtures/issue.yml b/models/fixtures/issue.yml index 6b57268a7a02..29bfe93eb5df 100644 --- a/models/fixtures/issue.yml +++ b/models/fixtures/issue.yml @@ -108,4 +108,16 @@ is_closed: false is_pull: true created_unix: 946684820 - updated_unix: 978307180 \ No newline at end of file + updated_unix: 978307180 + +- + id: 10 + repo_id: 2 + index: 3 + poster_id: 100 + name: issue from deleted account + content: content from deleted account + is_closed: false + is_pull: false + created_unix: 946684830 + updated_unix: 999307200 From 6d84cb1eeb6e5d36f67bbfa4f1e68634d74d31a8 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sun, 29 Dec 2019 17:36:08 +0100 Subject: [PATCH 06/19] add missing poster_id --- models/issue.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/issue.go b/models/issue.go index b62524b9fc4e..601e2b86571a 100644 --- a/models/issue.go +++ b/models/issue.go @@ -1590,7 +1590,7 @@ func UpdateIssueByAPI(issue *Issue) error { return err } if !issue.Poster.IsGhost() { - columns = append(columns, "") + columns = append(columns, "poster_id") } if err := updateIssueByCols(sess, issue, columns...); err != nil { From e7ef8d691075df4b624001472f92b4f992d689af Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sun, 29 Dec 2019 20:00:48 +0100 Subject: [PATCH 07/19] fix test --- integrations/api_issue_test.go | 14 +++++++++----- models/fixtures/issue.yml | 8 ++++---- models/fixtures/repository.yml | 8 ++++---- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/integrations/api_issue_test.go b/integrations/api_issue_test.go index e17304ce69ed..c862b39c4a6a 100644 --- a/integrations/api_issue_test.go +++ b/integrations/api_issue_test.go @@ -66,9 +66,10 @@ func TestAPICreateIssue(t *testing.T) { func TestAPIEditIssue(t *testing.T) { defer prepareTestEnv(t)() - repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 2}).(*models.Repository) - owner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User) issueBefore := models.AssertExistsAndLoadBean(t, &models.Issue{ID: 10}).(*models.Issue) + repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: issueBefore.RepoID}).(*models.Repository) + owner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User) + assert.NoError(t, issueBefore.LoadAttributes()) session := loginUser(t, owner.Name) token := getTokenForLoggedInUser(t, session) @@ -89,7 +90,10 @@ func TestAPIEditIssue(t *testing.T) { assert.Equal(t, api.StateOpen, issueBefore.State()) assert.Equal(t, api.StateClosed, issueAfter.State()) // check deleted user - assert.Equal(t, 100, issueBefore.Poster.ID) - assert.Equal(t, 100, apiIssue.Poster.ID) - assert.Equal(t, 100, issueAfter.Poster.ID) + assert.Equal(t, int64(500), issueAfter.PosterID) + assert.NoError(t, issueAfter.LoadAttributes()) + assert.Equal(t, int64(-1), issueAfter.PosterID) + assert.Equal(t, int64(-1), issueBefore.PosterID) + assert.Equal(t, int64(-1), apiIssue.Poster.ID) + } diff --git a/models/fixtures/issue.yml b/models/fixtures/issue.yml index 29bfe93eb5df..853b96eaa16d 100644 --- a/models/fixtures/issue.yml +++ b/models/fixtures/issue.yml @@ -112,11 +112,11 @@ - id: 10 - repo_id: 2 - index: 3 - poster_id: 100 + repo_id: 42 + index: 1 + poster_id: 500 name: issue from deleted account - content: content from deleted account + content: content from deleted account is_closed: false is_pull: false created_unix: 946684830 diff --git a/models/fixtures/repository.yml b/models/fixtures/repository.yml index feec0b5fafb9..f817845e9cd5 100644 --- a/models/fixtures/repository.yml +++ b/models/fixtures/repository.yml @@ -547,7 +547,7 @@ is_private: false num_stars: 0 num_forks: 0 - num_issues: 0 + num_issues: 1 is_mirror: false - @@ -588,7 +588,7 @@ is_mirror: false status: 0 -- +- id: 46 owner_id: 26 lower_name: repo_external_tracker @@ -600,7 +600,7 @@ is_mirror: false status: 0 -- +- id: 47 owner_id: 26 lower_name: repo_external_tracker_numeric @@ -612,7 +612,7 @@ is_mirror: false status: 0 -- +- id: 48 owner_id: 26 lower_name: repo_external_tracker_alpha From 695ca42e8e23bbd979252a6d91707f7da32ef0e6 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sun, 29 Dec 2019 22:52:43 +0100 Subject: [PATCH 08/19] user.IsGhost handle nil --- models/user.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/models/user.go b/models/user.go index 347729246db9..a8f2c6fd2233 100644 --- a/models/user.go +++ b/models/user.go @@ -793,6 +793,9 @@ func NewGhostUser() *User { // IsGhost check if user is fake user for a deleted account func (u *User) IsGhost() bool { + if u == nil { + return false + } return u.ID == -1 && u.Name == "Ghost" } From aa0d09de5c280aa739dd6a3ed74fd995d00c7e89 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sun, 29 Dec 2019 23:31:21 +0100 Subject: [PATCH 09/19] CI.restart() From cb949427c677a2137748bc227e468291dc813998 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 30 Dec 2019 00:34:56 +0100 Subject: [PATCH 10/19] make sure no -1 is realy added --- models/issue.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/models/issue.go b/models/issue.go index 601e2b86571a..537f65865a87 100644 --- a/models/issue.go +++ b/models/issue.go @@ -1590,6 +1590,9 @@ func UpdateIssueByAPI(issue *Issue) error { return err } if !issue.Poster.IsGhost() { + if issue.PosterID <= 0 { + return fmt.Errorf("Issue %d can't be updated with PosterID %d", issue.Index, issue.PosterID) + } columns = append(columns, "poster_id") } From 2244b58e1c54ac3bcba8ea879b7183b4ceb7b174 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sun, 29 Dec 2019 23:31:21 +0100 Subject: [PATCH 11/19] CI.restart() From 1cc1831b1db4c510ad0ef947cf901d41040e916a Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 30 Dec 2019 03:33:03 +0100 Subject: [PATCH 12/19] @lunny suggestion remove some not allowed fields --- models/issue.go | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/models/issue.go b/models/issue.go index 537f65865a87..97a8665b4c05 100644 --- a/models/issue.go +++ b/models/issue.go @@ -1577,24 +1577,14 @@ func updateIssueByCols(e Engine, issue *Issue, columns ...string) (err error) { // UpdateIssueByAPI updates all allowed fields of given issue. func UpdateIssueByAPI(issue *Issue) error { // allowed fields to update - columns := []string{"name", "is_closed", "content", "milestone_id", - "priority", "num_comments", "ref", "deadline_unix", "created_unix", - "updated_unix", "closed_unix", "is_locked"} + columns := []string{"name", "is_closed", "content", "milestone_id", "priority", + "deadline_unix", "updated_unix", "closed_unix", "is_locked"} sess := x.NewSession() defer sess.Close() if err := sess.Begin(); err != nil { return err } - if err := issue.loadPoster(sess); err != nil { - return err - } - if !issue.Poster.IsGhost() { - if issue.PosterID <= 0 { - return fmt.Errorf("Issue %d can't be updated with PosterID %d", issue.Index, issue.PosterID) - } - columns = append(columns, "poster_id") - } if err := updateIssueByCols(sess, issue, columns...); err != nil { return err From 64422056afbd8dcb543f2970270f8f45f71ce8fd Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 30 Dec 2019 05:40:49 +0100 Subject: [PATCH 13/19] seperate issue.LoadMilestone --- models/issue.go | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/models/issue.go b/models/issue.go index 97a8665b4c05..11dbcff8321a 100644 --- a/models/issue.go +++ b/models/issue.go @@ -240,6 +240,16 @@ func (issue *Issue) loadReactions(e Engine) (err error) { return nil } +func (issue *Issue) loadMilestone(e Engine) (err error) { + if issue.Milestone == nil && issue.MilestoneID > 0 { + issue.Milestone, err = getMilestoneByRepoID(e, issue.RepoID, issue.MilestoneID) + if err != nil && !IsErrMilestoneNotExist(err) { + return fmt.Errorf("getMilestoneByRepoID [repo_id: %d, milestone_id: %d]: %v", issue.RepoID, issue.MilestoneID, err) + } + } + return nil +} + func (issue *Issue) loadAttributes(e Engine) (err error) { if err = issue.loadRepo(e); err != nil { return @@ -253,11 +263,8 @@ func (issue *Issue) loadAttributes(e Engine) (err error) { return } - if issue.Milestone == nil && issue.MilestoneID > 0 { - issue.Milestone, err = getMilestoneByRepoID(e, issue.RepoID, issue.MilestoneID) - if err != nil && !IsErrMilestoneNotExist(err) { - return fmt.Errorf("getMilestoneByRepoID [repo_id: %d, milestone_id: %d]: %v", issue.RepoID, issue.MilestoneID, err) - } + if err = issue.loadMilestone(e); err != nil { + return } if err = issue.loadAssignees(e); err != nil { @@ -297,6 +304,11 @@ func (issue *Issue) LoadAttributes() error { return issue.loadAttributes(x) } +// LoadMilestone load milestone of this issue. +func (issue *Issue) LoadMilestone() error { + return issue.loadMilestone(x) +} + // GetIsRead load the `IsRead` field of the issue func (issue *Issue) GetIsRead(userID int64) error { issueUser := &IssueUser{IssueID: issue.ID, UID: userID} From 66422865ec6e0e26762d10e33051c50415816db9 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 30 Dec 2019 05:42:25 +0100 Subject: [PATCH 14/19] load milestone and return it on IssueEdit via API --- routers/api/v1/repo/issue.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/routers/api/v1/repo/issue.go b/routers/api/v1/repo/issue.go index f23ac762c2da..ad82d53e7a19 100644 --- a/routers/api/v1/repo/issue.go +++ b/routers/api/v1/repo/issue.go @@ -542,7 +542,11 @@ func EditIssue(ctx *context.APIContext, form api.EditIssueOption) { // Refetch from database to assign some automatic values issue, err = models.GetIssueByID(issue.ID) if err != nil { - ctx.Error(http.StatusInternalServerError, "GetIssueByID", err) + ctx.InternalServerError(err) + return + } + if err = issue.LoadMilestone(); err != nil { + ctx.InternalServerError(err) return } ctx.JSON(http.StatusCreated, issue.APIFormat()) From 45d892149a16b7a6179a148c2de740d393e94529 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 30 Dec 2019 05:49:40 +0100 Subject: [PATCH 15/19] extend Test for TestAPIEditIssue --- integrations/api_issue_test.go | 29 ++++++++++++++++++++++++++--- models/fixtures/issue.yml | 1 + models/fixtures/milestone.yml | 8 ++++++++ 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/integrations/api_issue_test.go b/integrations/api_issue_test.go index c862b39c4a6a..382fe606bf35 100644 --- a/integrations/api_issue_test.go +++ b/integrations/api_issue_test.go @@ -70,15 +70,27 @@ func TestAPIEditIssue(t *testing.T) { repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: issueBefore.RepoID}).(*models.Repository) owner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User) assert.NoError(t, issueBefore.LoadAttributes()) + assert.Equal(t, int64(1019307200), int64(issueBefore.DeadlineUnix)) + assert.Equal(t, api.StateOpen, issueBefore.State()) session := loginUser(t, owner.Name) token := getTokenForLoggedInUser(t, session) + // update values of issue issueState := "closed" + removeDeadline := true + milestone := int64(4) + body := "new content!" + title := "new title from api set" urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d?token=%s", owner.Name, repo.Name, issueBefore.Index, token) req := NewRequestWithJSON(t, "PATCH", urlStr, api.EditIssueOption{ - State: &issueState, + State: &issueState, + RemoveDeadline: &removeDeadline, + Milestone: &milestone, + Body: &body, + Title: title, + // ToDo change more }) resp := session.MakeRequest(t, req, http.StatusCreated) @@ -87,8 +99,6 @@ func TestAPIEditIssue(t *testing.T) { issueAfter := models.AssertExistsAndLoadBean(t, &models.Issue{ID: 10}).(*models.Issue) - assert.Equal(t, api.StateOpen, issueBefore.State()) - assert.Equal(t, api.StateClosed, issueAfter.State()) // check deleted user assert.Equal(t, int64(500), issueAfter.PosterID) assert.NoError(t, issueAfter.LoadAttributes()) @@ -96,4 +106,17 @@ func TestAPIEditIssue(t *testing.T) { assert.Equal(t, int64(-1), issueBefore.PosterID) assert.Equal(t, int64(-1), apiIssue.Poster.ID) + // API response + assert.Equal(t, api.StateClosed, apiIssue.State) + assert.Equal(t, milestone, apiIssue.Milestone.ID) + assert.Equal(t, body, apiIssue.Body) + assert.True(t, apiIssue.Deadline == nil) + assert.Equal(t, title, apiIssue.Title) + + // in database + assert.Equal(t, api.StateClosed, issueAfter.State()) + assert.Equal(t, milestone, issueAfter.MilestoneID) + assert.Equal(t, int64(0), int64(issueAfter.DeadlineUnix)) + assert.Equal(t, body, issueAfter.Content) + assert.Equal(t, title, issueAfter.Title) } diff --git a/models/fixtures/issue.yml b/models/fixtures/issue.yml index 853b96eaa16d..ecee7499f6f0 100644 --- a/models/fixtures/issue.yml +++ b/models/fixtures/issue.yml @@ -121,3 +121,4 @@ is_pull: false created_unix: 946684830 updated_unix: 999307200 + deadline_unix: 1019307200 diff --git a/models/fixtures/milestone.yml b/models/fixtures/milestone.yml index 15f422fc3b5c..a9ecb4ee6a6e 100644 --- a/models/fixtures/milestone.yml +++ b/models/fixtures/milestone.yml @@ -21,3 +21,11 @@ content: content3 is_closed: true num_issues: 0 + +- + id: 4 + repo_id: 42 + name: milestone of repo42 + content: content random + is_closed: false + num_issues: 0 From 245dd3cbe123506fe324bfd2a17e00d0ba62a419 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 30 Dec 2019 17:21:54 +0100 Subject: [PATCH 16/19] fix fixtures --- models/fixtures/repository.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/models/fixtures/repository.yml b/models/fixtures/repository.yml index f817845e9cd5..c7f4d4d1096a 100644 --- a/models/fixtures/repository.yml +++ b/models/fixtures/repository.yml @@ -548,6 +548,7 @@ num_stars: 0 num_forks: 0 num_issues: 1 + num_milestones: 1 is_mirror: false - From 6cbeb66a4876d685b9a8d444b793ffcbdaa4da5d Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 30 Dec 2019 23:57:05 +0100 Subject: [PATCH 17/19] declare allowedColumnsUpdateIssueByAPI only once --- models/issue.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/models/issue.go b/models/issue.go index 11dbcff8321a..81767d512d59 100644 --- a/models/issue.go +++ b/models/issue.go @@ -1586,19 +1586,21 @@ func updateIssueByCols(e Engine, issue *Issue, columns ...string) (err error) { return } +// allowed fields to update for a issue by API +var allowedColumnsUpdateIssueByAPI = []string{ + "name", "is_closed", "content", "milestone_id", "priority", + "deadline_unix", "updated_unix", "closed_unix", "is_locked", +} + // UpdateIssueByAPI updates all allowed fields of given issue. func UpdateIssueByAPI(issue *Issue) error { - // allowed fields to update - columns := []string{"name", "is_closed", "content", "milestone_id", "priority", - "deadline_unix", "updated_unix", "closed_unix", "is_locked"} - sess := x.NewSession() defer sess.Close() if err := sess.Begin(); err != nil { return err } - if err := updateIssueByCols(sess, issue, columns...); err != nil { + if err := updateIssueByCols(sess, issue, allowedColumnsUpdateIssueByAPI...); err != nil { return err } if err := issue.addCrossReferences(sess, issue.Poster, true); err != nil { From 58a56d0ea356810982bd7b413a7eb7fe2acfe07f Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Wed, 1 Jan 2020 19:19:10 +0100 Subject: [PATCH 18/19] Update Year --- models/issue.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/issue.go b/models/issue.go index 81767d512d59..bf94f1b57433 100644 --- a/models/issue.go +++ b/models/issue.go @@ -1,5 +1,5 @@ // Copyright 2014 The Gogs Authors. All rights reserved. -// Copyright 2019 The Gitea Authors. All rights reserved. +// Copyright 2020 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. From 342f54280fee8131bd88138e9f457d960a882aa9 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Wed, 1 Jan 2020 19:25:50 +0100 Subject: [PATCH 19/19] no var just write id drecty into func cal --- models/issue.go | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/models/issue.go b/models/issue.go index bf94f1b57433..c832b9d01447 100644 --- a/models/issue.go +++ b/models/issue.go @@ -1581,17 +1581,6 @@ func SearchIssueIDsByKeyword(kw string, repoIDs []int64, limit, start int) (int6 return total, ids, nil } -func updateIssueByCols(e Engine, issue *Issue, columns ...string) (err error) { - _, err = e.ID(issue.ID).Cols(columns...).Update(issue) - return -} - -// allowed fields to update for a issue by API -var allowedColumnsUpdateIssueByAPI = []string{ - "name", "is_closed", "content", "milestone_id", "priority", - "deadline_unix", "updated_unix", "closed_unix", "is_locked", -} - // UpdateIssueByAPI updates all allowed fields of given issue. func UpdateIssueByAPI(issue *Issue) error { sess := x.NewSession() @@ -1600,7 +1589,10 @@ func UpdateIssueByAPI(issue *Issue) error { return err } - if err := updateIssueByCols(sess, issue, allowedColumnsUpdateIssueByAPI...); err != nil { + if _, err := sess.ID(issue.ID).Cols( + "name", "is_closed", "content", "milestone_id", "priority", + "deadline_unix", "updated_unix", "closed_unix", "is_locked"). + Update(issue); err != nil { return err } if err := issue.addCrossReferences(sess, issue.Poster, true); err != nil {