diff options
author | Lauris BH <lauris@nix.lv> | 2018-02-19 04:39:26 +0200 |
---|---|---|
committer | Bo-Yi Wu <appleboy.tw@gmail.com> | 2018-02-19 10:39:26 +0800 |
commit | 58893384e848b54687c21d6d2ca38b70b3036ae2 (patch) | |
tree | 343c231b40e378ccd089fc7796401f1459fdc1a2 | |
parent | fb2c176491ebc0f18e6ef25038ca84db561539e2 (diff) | |
download | gitea-58893384e848b54687c21d6d2ca38b70b3036ae2.tar.gz gitea-58893384e848b54687c21d6d2ca38b70b3036ae2.zip |
Add issue closed time column to fix activity closed issues list (#3537)
Signed-off-by: Lauris Bukšis-Haberkorns <lauris@nix.lv>
-rw-r--r-- | models/issue.go | 8 | ||||
-rw-r--r-- | models/issue_milestone_test.go | 6 | ||||
-rw-r--r-- | models/migrations/migrations.go | 2 | ||||
-rw-r--r-- | models/migrations/v57.go | 30 | ||||
-rw-r--r-- | models/repo_activity.go | 8 | ||||
-rw-r--r-- | templates/repo/activity.tmpl | 2 |
6 files changed, 50 insertions, 6 deletions
diff --git a/models/issue.go b/models/issue.go index d10c521db6..9106db281a 100644 --- a/models/issue.go +++ b/models/issue.go @@ -49,6 +49,7 @@ type Issue struct { DeadlineUnix util.TimeStamp `xorm:"INDEX"` CreatedUnix util.TimeStamp `xorm:"INDEX created"` UpdatedUnix util.TimeStamp `xorm:"INDEX updated"` + ClosedUnix util.TimeStamp `xorm:"INDEX"` Attachments []*Attachment `xorm:"-"` Comments []*Comment `xorm:"-"` @@ -612,8 +613,13 @@ func (issue *Issue) changeStatus(e *xorm.Session, doer *User, repo *Repository, return nil } issue.IsClosed = isClosed + if isClosed { + issue.ClosedUnix = util.TimeStampNow() + } else { + issue.ClosedUnix = 0 + } - if err = updateIssueCols(e, issue, "is_closed"); err != nil { + if err = updateIssueCols(e, issue, "is_closed", "closed_unix"); err != nil { return err } diff --git a/models/issue_milestone_test.go b/models/issue_milestone_test.go index f7987d45ad..c57f92439e 100644 --- a/models/issue_milestone_test.go +++ b/models/issue_milestone_test.go @@ -214,13 +214,15 @@ func TestChangeMilestoneIssueStats(t *testing.T) { "is_closed=0").(*Issue) issue.IsClosed = true - _, err := x.Cols("is_closed").Update(issue) + issue.ClosedUnix = util.TimeStampNow() + _, err := x.Cols("is_closed", "closed_unix").Update(issue) assert.NoError(t, err) assert.NoError(t, changeMilestoneIssueStats(x.NewSession(), issue)) CheckConsistencyFor(t, &Milestone{}) issue.IsClosed = false - _, err = x.Cols("is_closed").Update(issue) + issue.ClosedUnix = 0 + _, err = x.Cols("is_closed", "closed_unix").Update(issue) assert.NoError(t, err) assert.NoError(t, changeMilestoneIssueStats(x.NewSession(), issue)) CheckConsistencyFor(t, &Milestone{}) diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index d79d403712..dfaef2c78d 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -166,6 +166,8 @@ var migrations = []Migration{ NewMigration("add writable deploy keys", addModeToDeploKeys), // v56 -> v57 NewMigration("remove is_owner, num_teams columns from org_user", removeIsOwnerColumnFromOrgUser), + // v57 -> v58 + NewMigration("add closed_unix column for issues", addIssueClosedTime), } // Migrate database to current version diff --git a/models/migrations/v57.go b/models/migrations/v57.go new file mode 100644 index 0000000000..3a79a5cca7 --- /dev/null +++ b/models/migrations/v57.go @@ -0,0 +1,30 @@ +// Copyright 2017 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 migrations + +import ( + "fmt" + + "code.gitea.io/gitea/modules/util" + + "github.com/go-xorm/xorm" +) + +func addIssueClosedTime(x *xorm.Engine) error { + // Issue see models/issue.go + type Issue struct { + ClosedUnix util.TimeStamp `xorm:"INDEX"` + } + + if err := x.Sync2(new(Issue)); err != nil { + return fmt.Errorf("Sync2: %v", err) + } + + if _, err := x.Exec("UPDATE `issue` SET `closed_unix` = `updated_unix` WHERE `is_closed` = ?", true); err != nil { + return err + } + + return nil +} diff --git a/models/repo_activity.go b/models/repo_activity.go index 839a74a7e6..c3017e8e39 100644 --- a/models/repo_activity.go +++ b/models/repo_activity.go @@ -176,7 +176,7 @@ func (stats *ActivityStats) FillIssues(repoID int64, fromTime time.Time) error { // Closed issues sess := issuesForActivityStatement(repoID, fromTime, true, false) - sess.OrderBy("issue.updated_unix DESC") + sess.OrderBy("issue.closed_unix DESC") stats.ClosedIssues = make(IssueList, 0) if err = sess.Find(&stats.ClosedIssues); err != nil { return err @@ -228,7 +228,11 @@ func issuesForActivityStatement(repoID int64, fromTime time.Time, closed, unreso if !unresolved { sess.And("issue.is_pull = ?", false) - sess.And("issue.created_unix >= ?", fromTime.Unix()) + if closed { + sess.And("issue.closed_unix >= ?", fromTime.Unix()) + } else { + sess.And("issue.created_unix >= ?", fromTime.Unix()) + } } else { sess.And("issue.created_unix < ?", fromTime.Unix()) sess.And("issue.updated_unix >= ?", fromTime.Unix()) diff --git a/templates/repo/activity.tmpl b/templates/repo/activity.tmpl index cd528582fb..f5454afb93 100644 --- a/templates/repo/activity.tmpl +++ b/templates/repo/activity.tmpl @@ -134,7 +134,7 @@ <p class="desc"> <div class="ui red label">{{$.i18n.Tr "repo.activity.closed_issue_label"}}</div> #{{.Index}} <a class="title has-emoji" href="{{$.Repository.HTMLURL}}/issues/{{.Index}}">{{.Title}}</a> - {{TimeSinceUnix .UpdatedUnix $.Lang}} + {{TimeSinceUnix .ClosedUnix $.Lang}} </p> {{end}} </div> |