Display when a repo was archived (#22664)
This adds the date a repo is archived to Gitea and shows it in the UI and API. A feature, that GitHub has been [introduced recently](https://github.blog/changelog/2022-11-23-repository-archive-date-now-shown-in-ui/). I currently don't know how to correctly deal with the Date in the template, as different languages have different ways of writing a date.  --------- Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
		
					parent
					
						
							
								61d08f446a
							
						
					
				
			
			
				commit
				
					
						c41bc4f127
					
				
			
		
					 11 changed files with 59 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -487,6 +487,8 @@ var migrations = []Migration{
 | 
			
		|||
	NewMigration("Fix ExternalTracker and ExternalWiki accessMode in owner and admin team", v1_20.FixExternalTrackerAndExternalWikiAccessModeInOwnerAndAdminTeam),
 | 
			
		||||
	// v254 -> v255
 | 
			
		||||
	NewMigration("Add ActionTaskOutput table", v1_20.AddActionTaskOutputTable),
 | 
			
		||||
	// v255 -> v256
 | 
			
		||||
	NewMigration("Add ArchivedUnix Column", v1_20.AddArchivedUnixToRepository),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetCurrentDBVersion returns the current db version
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										23
									
								
								models/migrations/v1_20/v255.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								models/migrations/v1_20/v255.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,23 @@
 | 
			
		|||
// Copyright 2023 The Gitea Authors. All rights reserved.
 | 
			
		||||
// SPDX-License-Identifier: MIT
 | 
			
		||||
 | 
			
		||||
package v1_20 //nolint
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"code.gitea.io/gitea/modules/timeutil"
 | 
			
		||||
 | 
			
		||||
	"xorm.io/xorm"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func AddArchivedUnixToRepository(x *xorm.Engine) error {
 | 
			
		||||
	type Repository struct {
 | 
			
		||||
		ArchivedUnix timeutil.TimeStamp `xorm:"DEFAULT 0"`
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := x.Sync(new(Repository)); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_, err := x.Exec("UPDATE repository SET archived_unix = updated_unix WHERE is_archived = ? AND archived_unix = 0", true)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -146,6 +146,13 @@ func FindRepoArchives(opts FindRepoArchiversOption) ([]*RepoArchiver, error) {
 | 
			
		|||
// SetArchiveRepoState sets if a repo is archived
 | 
			
		||||
func SetArchiveRepoState(repo *Repository, isArchived bool) (err error) {
 | 
			
		||||
	repo.IsArchived = isArchived
 | 
			
		||||
	_, err = db.GetEngine(db.DefaultContext).Where("id = ?", repo.ID).Cols("is_archived").NoAutoTime().Update(repo)
 | 
			
		||||
 | 
			
		||||
	if isArchived {
 | 
			
		||||
		repo.ArchivedUnix = timeutil.TimeStampNow()
 | 
			
		||||
	} else {
 | 
			
		||||
		repo.ArchivedUnix = timeutil.TimeStamp(0)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_, err = db.GetEngine(db.DefaultContext).ID(repo.ID).Cols("is_archived", "archived_unix").NoAutoTime().Update(repo)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -174,8 +174,9 @@ type Repository struct {
 | 
			
		|||
	// Avatar: ID(10-20)-md5(32) - must fit into 64 symbols
 | 
			
		||||
	Avatar string `xorm:"VARCHAR(64)"`
 | 
			
		||||
 | 
			
		||||
	CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
 | 
			
		||||
	UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"`
 | 
			
		||||
	CreatedUnix  timeutil.TimeStamp `xorm:"INDEX created"`
 | 
			
		||||
	UpdatedUnix  timeutil.TimeStamp `xorm:"INDEX updated"`
 | 
			
		||||
	ArchivedUnix timeutil.TimeStamp `xorm:"DEFAULT 0"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -80,6 +80,7 @@ type Repository struct {
 | 
			
		|||
	Created time.Time `json:"created_at"`
 | 
			
		||||
	// swagger:strfmt date-time
 | 
			
		||||
	Updated                       time.Time        `json:"updated_at"`
 | 
			
		||||
	ArchivedAt                    time.Time        `json:"archived_at"`
 | 
			
		||||
	Permissions                   *Permission      `json:"permissions,omitempty"`
 | 
			
		||||
	HasIssues                     bool             `json:"has_issues"`
 | 
			
		||||
	InternalTracker               *InternalTracker `json:"internal_tracker,omitempty"`
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -992,6 +992,7 @@ template.one_item = Must select at least one template item
 | 
			
		|||
template.invalid = Must select a template repository
 | 
			
		||||
 | 
			
		||||
archive.title = This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
 | 
			
		||||
archive.title_date = This repository has been archived on %s. You can view files and clone it, but cannot push or open issues/pull-requests.
 | 
			
		||||
archive.issue.nocomment = This repo is archived. You cannot comment on issues.
 | 
			
		||||
archive.pull.nocomment = This repo is archived. You cannot comment on pull requests.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -183,6 +183,7 @@ func innerToRepo(ctx context.Context, repo *repo_model.Repository, mode perm.Acc
 | 
			
		|||
		DefaultBranch:                 repo.DefaultBranch,
 | 
			
		||||
		Created:                       repo.CreatedUnix.AsTime(),
 | 
			
		||||
		Updated:                       repo.UpdatedUnix.AsTime(),
 | 
			
		||||
		ArchivedAt:                    repo.ArchivedUnix.AsTime(),
 | 
			
		||||
		Permissions:                   permission,
 | 
			
		||||
		HasIssues:                     hasIssues,
 | 
			
		||||
		ExternalTracker:               externalTracker,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -219,7 +219,11 @@
 | 
			
		|||
				</div>
 | 
			
		||||
			{{else if .Repository.IsArchived}}
 | 
			
		||||
				<div class="ui warning message">
 | 
			
		||||
					{{.locale.Tr "repo.archive.title"}}
 | 
			
		||||
					{{if .Repository.ArchivedUnix.IsZero}}
 | 
			
		||||
						{{.locale.Tr "repo.archive.title"}}
 | 
			
		||||
					{{else}}
 | 
			
		||||
						{{.locale.Tr "repo.archive.title_date" (DateTime "long" .Repository.ArchivedUnix) | Safe}}
 | 
			
		||||
					{{end}}
 | 
			
		||||
				</div>
 | 
			
		||||
			{{end}}
 | 
			
		||||
			{{if $.IsSigned}}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,11 @@
 | 
			
		|||
				{{template "base/alert" .}}
 | 
			
		||||
				{{if .Repository.IsArchived}}
 | 
			
		||||
					<div class="ui warning message">
 | 
			
		||||
						{{.locale.Tr "repo.archive.title"}}
 | 
			
		||||
						{{if .Repository.ArchivedUnix.IsZero}}
 | 
			
		||||
							{{.locale.Tr "repo.archive.title"}}
 | 
			
		||||
						{{else}}
 | 
			
		||||
							{{.locale.Tr "repo.archive.title_date" (DateTime "long" .Repository.ArchivedUnix) | Safe}}
 | 
			
		||||
						{{end}}
 | 
			
		||||
					</div>
 | 
			
		||||
				{{end}}
 | 
			
		||||
				{{if .Repository.IsBroken}}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,7 +53,11 @@
 | 
			
		|||
		{{end}}
 | 
			
		||||
		{{if .Repository.IsArchived}}
 | 
			
		||||
			<div class="ui warning message">
 | 
			
		||||
				{{.locale.Tr "repo.archive.title"}}
 | 
			
		||||
				{{if .Repository.ArchivedUnix.IsZero}}
 | 
			
		||||
					{{.locale.Tr "repo.archive.title"}}
 | 
			
		||||
				{{else}}
 | 
			
		||||
					{{.locale.Tr "repo.archive.title_date" (DateTime "long" .Repository.ArchivedUnix) | Safe}}
 | 
			
		||||
				{{end}}
 | 
			
		||||
			</div>
 | 
			
		||||
		{{end}}
 | 
			
		||||
		{{template "repo/sub_menu" .}}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										5
									
								
								templates/swagger/v1_json.tmpl
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										5
									
								
								templates/swagger/v1_json.tmpl
									
										
									
										generated
									
									
									
								
							| 
						 | 
				
			
			@ -20221,6 +20221,11 @@
 | 
			
		|||
          "type": "boolean",
 | 
			
		||||
          "x-go-name": "Archived"
 | 
			
		||||
        },
 | 
			
		||||
        "archived_at": {
 | 
			
		||||
          "type": "string",
 | 
			
		||||
          "format": "date-time",
 | 
			
		||||
          "x-go-name": "ArchivedAt"
 | 
			
		||||
        },
 | 
			
		||||
        "avatar_url": {
 | 
			
		||||
          "type": "string",
 | 
			
		||||
          "x-go-name": "AvatarURL"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue