forked from gitea/gitea
		
	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
					
				| @ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 JakobDev
						JakobDev