mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 01:34:27 +00:00 
			
		
		
		
	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:
		@@ -487,6 +487,8 @@ var migrations = []Migration{
 | 
				
			|||||||
	NewMigration("Fix ExternalTracker and ExternalWiki accessMode in owner and admin team", v1_20.FixExternalTrackerAndExternalWikiAccessModeInOwnerAndAdminTeam),
 | 
						NewMigration("Fix ExternalTracker and ExternalWiki accessMode in owner and admin team", v1_20.FixExternalTrackerAndExternalWikiAccessModeInOwnerAndAdminTeam),
 | 
				
			||||||
	// v254 -> v255
 | 
						// v254 -> v255
 | 
				
			||||||
	NewMigration("Add ActionTaskOutput table", v1_20.AddActionTaskOutputTable),
 | 
						NewMigration("Add ActionTaskOutput table", v1_20.AddActionTaskOutputTable),
 | 
				
			||||||
 | 
						// v255 -> v256
 | 
				
			||||||
 | 
						NewMigration("Add ArchivedUnix Column", v1_20.AddArchivedUnixToRepository),
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetCurrentDBVersion returns the current db version
 | 
					// 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
 | 
					// SetArchiveRepoState sets if a repo is archived
 | 
				
			||||||
func SetArchiveRepoState(repo *Repository, isArchived bool) (err error) {
 | 
					func SetArchiveRepoState(repo *Repository, isArchived bool) (err error) {
 | 
				
			||||||
	repo.IsArchived = isArchived
 | 
						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
 | 
						return err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -176,6 +176,7 @@ type Repository struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	CreatedUnix  timeutil.TimeStamp `xorm:"INDEX created"`
 | 
						CreatedUnix  timeutil.TimeStamp `xorm:"INDEX created"`
 | 
				
			||||||
	UpdatedUnix  timeutil.TimeStamp `xorm:"INDEX updated"`
 | 
						UpdatedUnix  timeutil.TimeStamp `xorm:"INDEX updated"`
 | 
				
			||||||
 | 
						ArchivedUnix timeutil.TimeStamp `xorm:"DEFAULT 0"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func init() {
 | 
					func init() {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -80,6 +80,7 @@ type Repository struct {
 | 
				
			|||||||
	Created time.Time `json:"created_at"`
 | 
						Created time.Time `json:"created_at"`
 | 
				
			||||||
	// swagger:strfmt date-time
 | 
						// swagger:strfmt date-time
 | 
				
			||||||
	Updated                       time.Time        `json:"updated_at"`
 | 
						Updated                       time.Time        `json:"updated_at"`
 | 
				
			||||||
 | 
						ArchivedAt                    time.Time        `json:"archived_at"`
 | 
				
			||||||
	Permissions                   *Permission      `json:"permissions,omitempty"`
 | 
						Permissions                   *Permission      `json:"permissions,omitempty"`
 | 
				
			||||||
	HasIssues                     bool             `json:"has_issues"`
 | 
						HasIssues                     bool             `json:"has_issues"`
 | 
				
			||||||
	InternalTracker               *InternalTracker `json:"internal_tracker,omitempty"`
 | 
						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
 | 
					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 = 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.issue.nocomment = This repo is archived. You cannot comment on issues.
 | 
				
			||||||
archive.pull.nocomment = This repo is archived. You cannot comment on pull requests.
 | 
					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,
 | 
							DefaultBranch:                 repo.DefaultBranch,
 | 
				
			||||||
		Created:                       repo.CreatedUnix.AsTime(),
 | 
							Created:                       repo.CreatedUnix.AsTime(),
 | 
				
			||||||
		Updated:                       repo.UpdatedUnix.AsTime(),
 | 
							Updated:                       repo.UpdatedUnix.AsTime(),
 | 
				
			||||||
 | 
							ArchivedAt:                    repo.ArchivedUnix.AsTime(),
 | 
				
			||||||
		Permissions:                   permission,
 | 
							Permissions:                   permission,
 | 
				
			||||||
		HasIssues:                     hasIssues,
 | 
							HasIssues:                     hasIssues,
 | 
				
			||||||
		ExternalTracker:               externalTracker,
 | 
							ExternalTracker:               externalTracker,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -219,7 +219,11 @@
 | 
				
			|||||||
				</div>
 | 
									</div>
 | 
				
			||||||
			{{else if .Repository.IsArchived}}
 | 
								{{else if .Repository.IsArchived}}
 | 
				
			||||||
				<div class="ui warning message">
 | 
									<div class="ui warning message">
 | 
				
			||||||
 | 
										{{if .Repository.ArchivedUnix.IsZero}}
 | 
				
			||||||
						{{.locale.Tr "repo.archive.title"}}
 | 
											{{.locale.Tr "repo.archive.title"}}
 | 
				
			||||||
 | 
										{{else}}
 | 
				
			||||||
 | 
											{{.locale.Tr "repo.archive.title_date" (DateTime "long" .Repository.ArchivedUnix) | Safe}}
 | 
				
			||||||
 | 
										{{end}}
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
			{{end}}
 | 
								{{end}}
 | 
				
			||||||
			{{if $.IsSigned}}
 | 
								{{if $.IsSigned}}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,11 @@
 | 
				
			|||||||
				{{template "base/alert" .}}
 | 
									{{template "base/alert" .}}
 | 
				
			||||||
				{{if .Repository.IsArchived}}
 | 
									{{if .Repository.IsArchived}}
 | 
				
			||||||
					<div class="ui warning message">
 | 
										<div class="ui warning message">
 | 
				
			||||||
 | 
											{{if .Repository.ArchivedUnix.IsZero}}
 | 
				
			||||||
							{{.locale.Tr "repo.archive.title"}}
 | 
												{{.locale.Tr "repo.archive.title"}}
 | 
				
			||||||
 | 
											{{else}}
 | 
				
			||||||
 | 
												{{.locale.Tr "repo.archive.title_date" (DateTime "long" .Repository.ArchivedUnix) | Safe}}
 | 
				
			||||||
 | 
											{{end}}
 | 
				
			||||||
					</div>
 | 
										</div>
 | 
				
			||||||
				{{end}}
 | 
									{{end}}
 | 
				
			||||||
				{{if .Repository.IsBroken}}
 | 
									{{if .Repository.IsBroken}}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,7 +53,11 @@
 | 
				
			|||||||
		{{end}}
 | 
							{{end}}
 | 
				
			||||||
		{{if .Repository.IsArchived}}
 | 
							{{if .Repository.IsArchived}}
 | 
				
			||||||
			<div class="ui warning message">
 | 
								<div class="ui warning message">
 | 
				
			||||||
 | 
									{{if .Repository.ArchivedUnix.IsZero}}
 | 
				
			||||||
					{{.locale.Tr "repo.archive.title"}}
 | 
										{{.locale.Tr "repo.archive.title"}}
 | 
				
			||||||
 | 
									{{else}}
 | 
				
			||||||
 | 
										{{.locale.Tr "repo.archive.title_date" (DateTime "long" .Repository.ArchivedUnix) | Safe}}
 | 
				
			||||||
 | 
									{{end}}
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
		{{end}}
 | 
							{{end}}
 | 
				
			||||||
		{{template "repo/sub_menu" .}}
 | 
							{{template "repo/sub_menu" .}}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										5
									
								
								templates/swagger/v1_json.tmpl
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										5
									
								
								templates/swagger/v1_json.tmpl
									
									
									
										generated
									
									
									
								
							@@ -20221,6 +20221,11 @@
 | 
				
			|||||||
          "type": "boolean",
 | 
					          "type": "boolean",
 | 
				
			||||||
          "x-go-name": "Archived"
 | 
					          "x-go-name": "Archived"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "archived_at": {
 | 
				
			||||||
 | 
					          "type": "string",
 | 
				
			||||||
 | 
					          "format": "date-time",
 | 
				
			||||||
 | 
					          "x-go-name": "ArchivedAt"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "avatar_url": {
 | 
					        "avatar_url": {
 | 
				
			||||||
          "type": "string",
 | 
					          "type": "string",
 | 
				
			||||||
          "x-go-name": "AvatarURL"
 | 
					          "x-go-name": "AvatarURL"
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user