mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-03 21:08:25 +00:00 
			
		
		
		
	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   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>
This commit is contained in:
		@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user