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. ![grafik](https://user-images.githubusercontent.com/15185051/234315187-7db5763e-d96e-4080-b894-9be178bfb6e1.png) --------- Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>tags/v1.20.0-rc0
@@ -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 |
@@ -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" .}} |
@@ -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" |