summaryrefslogtreecommitdiffstats
path: root/models/issues
diff options
context:
space:
mode:
authorpuni9869 <80308335+puni9869@users.noreply.github.com>2023-08-14 15:26:14 +0530
committerGitHub <noreply@github.com>2023-08-14 11:56:14 +0200
commitcafce3b4b5afb3f254a48e87f1516d7b5dc209b6 (patch)
tree2775b10c6b55ea659b87c5d22f30ecc45c5871e1 /models/issues
parentdb7b0a1a4ef2222ca6209c190b2283f27061db55 (diff)
downloadgitea-cafce3b4b5afb3f254a48e87f1516d7b5dc209b6.tar.gz
gitea-cafce3b4b5afb3f254a48e87f1516d7b5dc209b6.zip
Allow to archive labels (#26478)
## Archived labels This adds the structure to allow for archived labels. Archived labels are, just like closed milestones or projects, a medium to hide information without deleting it. It is especially useful if there are outdated labels that should no longer be used without deleting the label entirely. ## Changes 1. UI and API have been equipped with the support to mark a label as archived 2. The time when a label has been archived will be stored in the DB ## Outsourced for the future There's no special handling for archived labels at the moment. This will be done in the future. ## Screenshots ![image](https://github.com/go-gitea/gitea/assets/80308335/208f95cd-42e4-4ed7-9a1f-cd2050a645d4) ![image](https://github.com/go-gitea/gitea/assets/80308335/746428e0-40bb-45b3-b992-85602feb371d) Part of https://github.com/go-gitea/gitea/issues/25237 --------- Co-authored-by: delvh <dev.lh@web.de> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Diffstat (limited to 'models/issues')
-rw-r--r--models/issues/label.go18
-rw-r--r--models/issues/label_test.go13
2 files changed, 25 insertions, 6 deletions
diff --git a/models/issues/label.go b/models/issues/label.go
index 57a2e67f8c..70906efb47 100644
--- a/models/issues/label.go
+++ b/models/issues/label.go
@@ -97,6 +97,8 @@ type Label struct {
QueryString string `xorm:"-"`
IsSelected bool `xorm:"-"`
IsExcluded bool `xorm:"-"`
+
+ ArchivedUnix timeutil.TimeStamp `xorm:"DEFAULT NULL"`
}
func init() {
@@ -109,6 +111,15 @@ func (l *Label) CalOpenIssues() {
l.NumOpenIssues = l.NumIssues - l.NumClosedIssues
}
+// SetArchived set the label as archived
+func (l *Label) SetArchived(isArchived bool) {
+ if isArchived && l.ArchivedUnix.IsZero() {
+ l.ArchivedUnix = timeutil.TimeStampNow()
+ } else {
+ l.ArchivedUnix = timeutil.TimeStamp(0)
+ }
+}
+
// CalOpenOrgIssues calculates the open issues of a label for a specific repo
func (l *Label) CalOpenOrgIssues(ctx context.Context, repoID, labelID int64) {
counts, _ := CountIssuesByRepo(ctx, &IssuesOptions{
@@ -153,6 +164,11 @@ func (l *Label) BelongsToOrg() bool {
return l.OrgID > 0
}
+// IsArchived returns true if label is an archived
+func (l *Label) IsArchived() bool {
+ return l.ArchivedUnix > 0
+}
+
// BelongsToRepo returns true if label is a repository label
func (l *Label) BelongsToRepo() bool {
return l.RepoID > 0
@@ -211,7 +227,7 @@ func UpdateLabel(l *Label) error {
}
l.Color = color
- return updateLabelCols(db.DefaultContext, l, "name", "description", "color", "exclusive")
+ return updateLabelCols(db.DefaultContext, l, "name", "description", "color", "exclusive", "archived_unix")
}
// DeleteLabel delete a label
diff --git a/models/issues/label_test.go b/models/issues/label_test.go
index 1bc5a1a935..3f0e980b31 100644
--- a/models/issues/label_test.go
+++ b/models/issues/label_test.go
@@ -11,6 +11,7 @@ import (
repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user"
+ "code.gitea.io/gitea/modules/timeutil"
"github.com/stretchr/testify/assert"
)
@@ -259,11 +260,12 @@ func TestUpdateLabel(t *testing.T) {
label := unittest.AssertExistsAndLoadBean(t, &issues_model.Label{ID: 1})
// make sure update wont overwrite it
update := &issues_model.Label{
- ID: label.ID,
- Color: "#ffff00",
- Name: "newLabelName",
- Description: label.Description,
- Exclusive: false,
+ ID: label.ID,
+ Color: "#ffff00",
+ Name: "newLabelName",
+ Description: label.Description,
+ Exclusive: false,
+ ArchivedUnix: timeutil.TimeStamp(0),
}
label.Color = update.Color
label.Name = update.Name
@@ -273,6 +275,7 @@ func TestUpdateLabel(t *testing.T) {
assert.EqualValues(t, label.Color, newLabel.Color)
assert.EqualValues(t, label.Name, newLabel.Name)
assert.EqualValues(t, label.Description, newLabel.Description)
+ assert.EqualValues(t, newLabel.ArchivedUnix, 0)
unittest.CheckConsistencyFor(t, &issues_model.Label{}, &repo_model.Repository{})
}