mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-25 08:59:31 -05: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. ![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>
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),
|
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
|
||||||
}
|
}
|
||||||
|
|
|
@ -174,8 +174,9 @@ type Repository struct {
|
||||||
// Avatar: ID(10-20)-md5(32) - must fit into 64 symbols
|
// Avatar: ID(10-20)-md5(32) - must fit into 64 symbols
|
||||||
Avatar string `xorm:"VARCHAR(64)"`
|
Avatar string `xorm:"VARCHAR(64)"`
|
||||||
|
|
||||||
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">
|
||||||
{{.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>
|
</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">
|
||||||
{{.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>
|
</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">
|
||||||
{{.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>
|
</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"
|
||||||
|
|
Loading…
Reference in a new issue