mirror of
https://github.com/go-gitea/gitea
synced 2025-07-22 18:28:37 +00:00
Fix label count (#8267)
* fix label count * fix vendor * fix import order * update xorm to fix bug * fix tests * fix mssql bug
This commit is contained in:
@@ -760,11 +760,6 @@ func (issue *Issue) changeStatus(e *xorm.Session, doer *User, isClosed bool) (er
|
||||
return err
|
||||
}
|
||||
for idx := range issue.Labels {
|
||||
if issue.IsClosed {
|
||||
issue.Labels[idx].NumClosedIssues++
|
||||
} else {
|
||||
issue.Labels[idx].NumClosedIssues--
|
||||
}
|
||||
if err = updateLabel(e, issue.Labels[idx]); err != nil {
|
||||
return err
|
||||
}
|
||||
|
@@ -14,6 +14,7 @@ import (
|
||||
api "code.gitea.io/gitea/modules/structs"
|
||||
|
||||
"github.com/go-xorm/xorm"
|
||||
"xorm.io/builder"
|
||||
)
|
||||
|
||||
var labelColorPattern = regexp.MustCompile("#([a-fA-F0-9]{6})")
|
||||
@@ -294,7 +295,20 @@ func GetLabelsByIssueID(issueID int64) ([]*Label, error) {
|
||||
}
|
||||
|
||||
func updateLabel(e Engine, l *Label) error {
|
||||
_, err := e.ID(l.ID).AllCols().Update(l)
|
||||
_, err := e.ID(l.ID).
|
||||
SetExpr("num_issues",
|
||||
builder.Select("count(*)").From("issue_label").
|
||||
Where(builder.Eq{"label_id": l.ID}),
|
||||
).
|
||||
SetExpr("num_closed_issues",
|
||||
builder.Select("count(*)").From("issue_label").
|
||||
InnerJoin("issue", "issue_label.issue_id = issue.id").
|
||||
Where(builder.Eq{
|
||||
"issue_label.label_id": l.ID,
|
||||
"issue.is_closed": true,
|
||||
}),
|
||||
).
|
||||
AllCols().Update(l)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -375,10 +389,6 @@ func newIssueLabel(e *xorm.Session, issue *Issue, label *Label, doer *User) (err
|
||||
return err
|
||||
}
|
||||
|
||||
label.NumIssues++
|
||||
if issue.IsClosed {
|
||||
label.NumClosedIssues++
|
||||
}
|
||||
return updateLabel(e, label)
|
||||
}
|
||||
|
||||
@@ -448,10 +458,6 @@ func deleteIssueLabel(e *xorm.Session, issue *Issue, label *Label, doer *User) (
|
||||
return err
|
||||
}
|
||||
|
||||
label.NumIssues--
|
||||
if issue.IsClosed {
|
||||
label.NumClosedIssues--
|
||||
}
|
||||
return updateLabel(e, label)
|
||||
}
|
||||
|
||||
|
@@ -205,6 +205,7 @@ func TestNewIssueLabel(t *testing.T) {
|
||||
LabelID: label.ID,
|
||||
Content: "1",
|
||||
})
|
||||
label = AssertExistsAndLoadBean(t, &Label{ID: 2}).(*Label)
|
||||
assert.EqualValues(t, prevNumIssues+1, label.NumIssues)
|
||||
|
||||
// re-add existing IssueLabel
|
||||
|
Reference in New Issue
Block a user