Skip to content

Commit e8015a5

Browse files
authored
Add issue closed time column to fix activity closed issues list (#3537) (#3540)
Signed-off-by: Lauris Bukšis-Haberkorns <[email protected]>
1 parent 8327300 commit e8015a5

File tree

6 files changed

+50
-6
lines changed

6 files changed

+50
-6
lines changed

models/issue.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ type Issue struct {
4949
DeadlineUnix util.TimeStamp `xorm:"INDEX"`
5050
CreatedUnix util.TimeStamp `xorm:"INDEX created"`
5151
UpdatedUnix util.TimeStamp `xorm:"INDEX updated"`
52+
ClosedUnix util.TimeStamp `xorm:"INDEX"`
5253

5354
Attachments []*Attachment `xorm:"-"`
5455
Comments []*Comment `xorm:"-"`
@@ -612,8 +613,13 @@ func (issue *Issue) changeStatus(e *xorm.Session, doer *User, repo *Repository,
612613
return nil
613614
}
614615
issue.IsClosed = isClosed
616+
if isClosed {
617+
issue.ClosedUnix = util.TimeStampNow()
618+
} else {
619+
issue.ClosedUnix = 0
620+
}
615621

616-
if err = updateIssueCols(e, issue, "is_closed"); err != nil {
622+
if err = updateIssueCols(e, issue, "is_closed", "closed_unix"); err != nil {
617623
return err
618624
}
619625

models/issue_milestone_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,13 +214,15 @@ func TestChangeMilestoneIssueStats(t *testing.T) {
214214
"is_closed=0").(*Issue)
215215

216216
issue.IsClosed = true
217-
_, err := x.Cols("is_closed").Update(issue)
217+
issue.ClosedUnix = util.TimeStampNow()
218+
_, err := x.Cols("is_closed", "closed_unix").Update(issue)
218219
assert.NoError(t, err)
219220
assert.NoError(t, changeMilestoneIssueStats(x.NewSession(), issue))
220221
CheckConsistencyFor(t, &Milestone{})
221222

222223
issue.IsClosed = false
223-
_, err = x.Cols("is_closed").Update(issue)
224+
issue.ClosedUnix = 0
225+
_, err = x.Cols("is_closed", "closed_unix").Update(issue)
224226
assert.NoError(t, err)
225227
assert.NoError(t, changeMilestoneIssueStats(x.NewSession(), issue))
226228
CheckConsistencyFor(t, &Milestone{})

models/migrations/migrations.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,8 @@ var migrations = []Migration{
166166
NewMigration("add writable deploy keys", addModeToDeploKeys),
167167
// v56 -> v57
168168
NewMigration("remove is_owner, num_teams columns from org_user", removeIsOwnerColumnFromOrgUser),
169+
// v57 -> v58
170+
NewMigration("add closed_unix column for issues", addIssueClosedTime),
169171
}
170172

171173
// Migrate database to current version

models/migrations/v57.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// Copyright 2017 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package migrations
6+
7+
import (
8+
"fmt"
9+
10+
"code.gitea.io/gitea/modules/util"
11+
12+
"github.com/go-xorm/xorm"
13+
)
14+
15+
func addIssueClosedTime(x *xorm.Engine) error {
16+
// Issue see models/issue.go
17+
type Issue struct {
18+
ClosedUnix util.TimeStamp `xorm:"INDEX"`
19+
}
20+
21+
if err := x.Sync2(new(Issue)); err != nil {
22+
return fmt.Errorf("Sync2: %v", err)
23+
}
24+
25+
if _, err := x.Exec("UPDATE `issue` SET `closed_unix` = `updated_unix` WHERE `is_closed` = ?", true); err != nil {
26+
return err
27+
}
28+
29+
return nil
30+
}

models/repo_activity.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ func (stats *ActivityStats) FillIssues(repoID int64, fromTime time.Time) error {
176176

177177
// Closed issues
178178
sess := issuesForActivityStatement(repoID, fromTime, true, false)
179-
sess.OrderBy("issue.updated_unix DESC")
179+
sess.OrderBy("issue.closed_unix DESC")
180180
stats.ClosedIssues = make(IssueList, 0)
181181
if err = sess.Find(&stats.ClosedIssues); err != nil {
182182
return err
@@ -228,7 +228,11 @@ func issuesForActivityStatement(repoID int64, fromTime time.Time, closed, unreso
228228

229229
if !unresolved {
230230
sess.And("issue.is_pull = ?", false)
231-
sess.And("issue.created_unix >= ?", fromTime.Unix())
231+
if closed {
232+
sess.And("issue.closed_unix >= ?", fromTime.Unix())
233+
} else {
234+
sess.And("issue.created_unix >= ?", fromTime.Unix())
235+
}
232236
} else {
233237
sess.And("issue.created_unix < ?", fromTime.Unix())
234238
sess.And("issue.updated_unix >= ?", fromTime.Unix())

templates/repo/activity.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@
134134
<p class="desc">
135135
<div class="ui red label">{{$.i18n.Tr "repo.activity.closed_issue_label"}}</div>
136136
#{{.Index}} <a class="title has-emoji" href="{{$.Repository.HTMLURL}}/issues/{{.Index}}">{{.Title}}</a>
137-
{{TimeSinceUnix .UpdatedUnix $.Lang}}
137+
{{TimeSinceUnix .ClosedUnix $.Lang}}
138138
</p>
139139
{{end}}
140140
</div>

0 commit comments

Comments
 (0)