diff options
author | puni9869 <80308335+puni9869@users.noreply.github.com> | 2023-08-14 15:26:14 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-14 11:56:14 +0200 |
commit | cafce3b4b5afb3f254a48e87f1516d7b5dc209b6 (patch) | |
tree | 2775b10c6b55ea659b87c5d22f30ecc45c5871e1 /models | |
parent | db7b0a1a4ef2222ca6209c190b2283f27061db55 (diff) | |
download | gitea-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')
-rw-r--r-- | models/fixtures/label.yml | 9 | ||||
-rw-r--r-- | models/issues/label.go | 18 | ||||
-rw-r--r-- | models/issues/label_test.go | 13 | ||||
-rw-r--r-- | models/migrations/migrations.go | 2 | ||||
-rw-r--r-- | models/migrations/v1_21/v271.go | 16 |
5 files changed, 52 insertions, 6 deletions
diff --git a/models/fixtures/label.yml b/models/fixtures/label.yml index ab4d5ef944..2242b90dcd 100644 --- a/models/fixtures/label.yml +++ b/models/fixtures/label.yml @@ -7,6 +7,7 @@ exclusive: false num_issues: 2 num_closed_issues: 0 + archived_unix: 0 - id: 2 @@ -17,6 +18,7 @@ exclusive: false num_issues: 1 num_closed_issues: 1 + archived_unix: 0 - id: 3 @@ -27,6 +29,7 @@ exclusive: false num_issues: 0 num_closed_issues: 0 + archived_unix: 0 - id: 4 @@ -37,6 +40,7 @@ exclusive: false num_issues: 1 num_closed_issues: 0 + archived_unix: 0 - id: 5 @@ -47,6 +51,7 @@ exclusive: false num_issues: 0 num_closed_issues: 0 + archived_unix: 0 - id: 6 @@ -57,6 +62,7 @@ exclusive: false num_issues: 0 num_closed_issues: 0 + archived_unix: 0 - id: 7 @@ -67,6 +73,7 @@ exclusive: true num_issues: 0 num_closed_issues: 0 + archived_unix: 0 - id: 8 @@ -77,6 +84,7 @@ exclusive: true num_issues: 0 num_closed_issues: 0 + archived_unix: 0 - id: 9 @@ -87,3 +95,4 @@ exclusive: true num_issues: 0 num_closed_issues: 0 + archived_unix: 0 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{}) } diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index 55107439b0..7a126593d1 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -522,6 +522,8 @@ var migrations = []Migration{ NewMigration("Drop deleted branch table", v1_21.DropDeletedBranchTable), // v270 -> v271 NewMigration("Fix PackageProperty typo", v1_21.FixPackagePropertyTypo), + // v271 -> v272 + NewMigration("Allow archiving labels", v1_21.AddArchivedUnixColumInLabelTable), } // GetCurrentDBVersion returns the current db version diff --git a/models/migrations/v1_21/v271.go b/models/migrations/v1_21/v271.go new file mode 100644 index 0000000000..098f6499d5 --- /dev/null +++ b/models/migrations/v1_21/v271.go @@ -0,0 +1,16 @@ +// Copyright 2023 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package v1_21 //nolint +import ( + "code.gitea.io/gitea/modules/timeutil" + + "xorm.io/xorm" +) + +func AddArchivedUnixColumInLabelTable(x *xorm.Engine) error { + type Label struct { + ArchivedUnix timeutil.TimeStamp `xorm:"DEFAULT NULL"` + } + return x.Sync(new(Label)) +} |