Skip to content

Commit 0b51072

Browse files
kolaentetechknowlogick
authored andcommittedJan 23, 2019
Feature: Archive repos (go-gitea#5009)
1 parent 6ad834e commit 0b51072

30 files changed

+436
-243
lines changed
 

‎models/repo.go

+11-2
Original file line numberDiff line numberDiff line change
@@ -186,8 +186,9 @@ type Repository struct {
186186
NumOpenMilestones int `xorm:"-"`
187187
NumReleases int `xorm:"-"`
188188

189-
IsPrivate bool `xorm:"INDEX"`
190-
IsEmpty bool `xorm:"INDEX"`
189+
IsPrivate bool `xorm:"INDEX"`
190+
IsEmpty bool `xorm:"INDEX"`
191+
IsArchived bool `xorm:"INDEX"`
191192

192193
IsMirror bool `xorm:"INDEX"`
193194
*Mirror `xorm:"-"`
@@ -292,6 +293,7 @@ func (repo *Repository) innerAPIFormat(e Engine, mode AccessMode, isParent bool)
292293
Description: repo.Description,
293294
Private: repo.IsPrivate,
294295
Empty: repo.IsEmpty,
296+
Archived: repo.IsArchived,
295297
Size: int(repo.Size / 1024),
296298
Fork: repo.IsFork,
297299
Parent: parent,
@@ -2341,6 +2343,13 @@ func CheckRepoStats() {
23412343
// ***** END: Repository.NumForks *****
23422344
}
23432345

2346+
// SetArchiveRepoState sets if a repo is archived
2347+
func (repo *Repository) SetArchiveRepoState(isArchived bool) (err error) {
2348+
repo.IsArchived = isArchived
2349+
_, err = x.Where("id = ?", repo.ID).Cols("is_archived").Update(repo)
2350+
return
2351+
}
2352+
23442353
// ___________ __
23452354
// \_ _____/__________| | __
23462355
// | __)/ _ \_ __ \ |/ /

‎modules/auth/repo_form.go

+1
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ type RepoSettingForm struct {
117117
EnableTimetracker bool
118118
AllowOnlyContributorsToTrackTime bool
119119
EnableIssueDependencies bool
120+
IsArchived bool
120121

121122
// Admin settings
122123
EnableHealthCheck bool

‎modules/context/repo.go

+10-1
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,23 @@ type Repository struct {
5656

5757
// CanEnableEditor returns true if repository is editable and user has proper access level.
5858
func (r *Repository) CanEnableEditor() bool {
59-
return r.Permission.CanWrite(models.UnitTypeCode) && r.Repository.CanEnableEditor() && r.IsViewBranch
59+
return r.Permission.CanWrite(models.UnitTypeCode) && r.Repository.CanEnableEditor() && r.IsViewBranch && !r.Repository.IsArchived
6060
}
6161

6262
// CanCreateBranch returns true if repository is editable and user has proper access level.
6363
func (r *Repository) CanCreateBranch() bool {
6464
return r.Permission.CanWrite(models.UnitTypeCode) && r.Repository.CanCreateBranch()
6565
}
6666

67+
// RepoMustNotBeArchived checks if a repo is archived
68+
func RepoMustNotBeArchived() macaron.Handler {
69+
return func(ctx *Context) {
70+
if ctx.Repo.Repository.IsArchived {
71+
ctx.NotFound("IsArchived", fmt.Errorf(ctx.Tr("repo.archive.title")))
72+
}
73+
}
74+
}
75+
6776
// CanCommitToBranch returns true if repository is editable and user has proper access level
6877
// and branch is not protected for push
6978
func (r *Repository) CanCommitToBranch(doer *models.User) (bool, error) {

‎options/locale/locale_en-US.ini

+16
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,10 @@ forks = Forks
542542
pick_reaction = Pick your reaction
543543
reactions_more = and %d more
544544
545+
archive.title = This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
546+
archive.issue.nocomment = This repo is archived. You cannot comment on issues.
547+
archive.pull.nocomment = This repo is archived. You cannot comment on pull requests.
548+
545549
form.reach_limit_of_creation = You have already reached your limit of %d repositories.
546550
form.name_reserved = The repository name '%s' is reserved.
547551
form.name_pattern_not_allowed = The pattern '%s' is not allowed in a repository name.
@@ -1176,6 +1180,18 @@ settings.choose_branch = Choose a branch…
11761180
settings.no_protected_branch = There are no protected branches.
11771181
settings.edit_protected_branch = Edit
11781182
settings.protected_branch_required_approvals_min = Required approvals cannot be negative.
1183+
settings.archive.button = Archive Repo
1184+
settings.archive.header = Archive This Repo
1185+
settings.archive.text = Archiving the repo will make it entirely read-only. It is hidden from the dashboard, cannot be committed to and no issues or pull-requests can be created.
1186+
settings.archive.success = The repo was successfully archived.
1187+
settings.archive.error = An error occured while trying to archive the repo. See the log for more details.
1188+
settings.archive.error_ismirror = You cannot archive a mirrored repo.
1189+
settings.archive.branchsettings_unavailable = Branch settings are not available if the repo is archived.
1190+
settings.unarchive.button = Un-Archive Repo
1191+
settings.unarchive.header = Un-Archive This Repo
1192+
settings.unarchive.text = Un-Archiving the repo will restore its ability to recieve commits and pushes, as well as new issues and pull-requests.
1193+
settings.unarchive.success = The repo was successfully un-archived.
1194+
settings.unarchive.error = An error occured while trying to un-archive the repo. See the log for more details.
11791195
11801196
diff.browse_source = Browse Source
11811197
diff.parent = parent

‎public/css/index.css

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎public/less/_base.less

+8
Original file line numberDiff line numberDiff line change
@@ -629,3 +629,11 @@ footer {
629629
.heatmap-color-5 {
630630
background-color: #2f6b1b;
631631
}
632+
633+
.archived-icon{
634+
color: lighten(#000, 70%) !important;
635+
}
636+
637+
.archived-icon{
638+
color: lighten(#000, 70%) !important;
639+
}

‎routers/repo/http.go

+6
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,12 @@ func HTTP(ctx *context.Context) {
9595
return
9696
}
9797

98+
// Don't allow pushing if the repo is archived
99+
if repo.IsArchived && !isPull {
100+
ctx.HandleText(http.StatusForbidden, "This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.")
101+
return
102+
}
103+
98104
// Only public pull don't need auth.
99105
isPublicPull := !repo.IsPrivate && isPull
100106
var (

‎routers/repo/release.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func Releases(ctx *context.Context) {
6767
}
6868

6969
writeAccess := ctx.Repo.CanWrite(models.UnitTypeReleases)
70-
ctx.Data["CanCreateRelease"] = writeAccess
70+
ctx.Data["CanCreateRelease"] = writeAccess && !ctx.Repo.Repository.IsArchived
7171

7272
opts := models.FindReleasesOptions{
7373
IncludeDrafts: writeAccess,

‎routers/repo/setting.go

+41
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,47 @@ func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) {
354354
ctx.Flash.Success(ctx.Tr("repo.settings.wiki_deletion_success"))
355355
ctx.Redirect(ctx.Repo.RepoLink + "/settings")
356356

357+
case "archive":
358+
if !ctx.Repo.IsOwner() {
359+
ctx.Error(403)
360+
return
361+
}
362+
363+
if repo.IsMirror {
364+
ctx.Flash.Error(ctx.Tr("repo.settings.archive.error_ismirror"))
365+
ctx.Redirect(ctx.Repo.RepoLink + "/settings")
366+
return
367+
}
368+
369+
if err := repo.SetArchiveRepoState(true); err != nil {
370+
log.Error(4, "Tried to archive a repo: %s", err)
371+
ctx.Flash.Error(ctx.Tr("repo.settings.archive.error"))
372+
ctx.Redirect(ctx.Repo.RepoLink + "/settings")
373+
return
374+
}
375+
376+
ctx.Flash.Success(ctx.Tr("repo.settings.archive.success"))
377+
378+
log.Trace("Repository was archived: %s/%s", ctx.Repo.Owner.Name, repo.Name)
379+
ctx.Redirect(ctx.Repo.RepoLink + "/settings")
380+
case "unarchive":
381+
if !ctx.Repo.IsOwner() {
382+
ctx.Error(403)
383+
return
384+
}
385+
386+
if err := repo.SetArchiveRepoState(false); err != nil {
387+
log.Error(4, "Tried to unarchive a repo: %s", err)
388+
ctx.Flash.Error(ctx.Tr("repo.settings.unarchive.error"))
389+
ctx.Redirect(ctx.Repo.RepoLink + "/settings")
390+
return
391+
}
392+
393+
ctx.Flash.Success(ctx.Tr("repo.settings.unarchive.success"))
394+
395+
log.Trace("Repository was un-archived: %s/%s", ctx.Repo.Owner.Name, repo.Name)
396+
ctx.Redirect(ctx.Repo.RepoLink + "/settings")
397+
357398
default:
358399
ctx.NotFound("", nil)
359400
}

‎routers/repo/view.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,8 @@ func renderDirectory(ctx *context.Context, treeLink string) {
151151

152152
// Check permission to add or upload new file.
153153
if ctx.Repo.CanWrite(models.UnitTypeCode) && ctx.Repo.IsViewBranch {
154-
ctx.Data["CanAddFile"] = true
155-
ctx.Data["CanUploadFile"] = setting.Repository.Upload.Enabled
154+
ctx.Data["CanAddFile"] = !ctx.Repo.Repository.IsArchived
155+
ctx.Data["CanUploadFile"] = setting.Repository.Upload.Enabled && !ctx.Repo.Repository.IsArchived
156156
}
157157
}
158158

‎routers/repo/wiki.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ func renderWikiPage(ctx *context.Context, isViewPage bool) (*git.Repository, *gi
203203
// Wiki renders single wiki page
204204
func Wiki(ctx *context.Context) {
205205
ctx.Data["PageIsWiki"] = true
206-
ctx.Data["CanWriteWiki"] = ctx.Repo.CanWrite(models.UnitTypeWiki)
206+
ctx.Data["CanWriteWiki"] = ctx.Repo.CanWrite(models.UnitTypeWiki) && !ctx.Repo.Repository.IsArchived
207207

208208
if !ctx.Repo.Repository.HasWiki() {
209209
ctx.Data["Title"] = ctx.Tr("repo.wiki")
@@ -246,7 +246,7 @@ func WikiPages(ctx *context.Context) {
246246

247247
ctx.Data["Title"] = ctx.Tr("repo.wiki.pages")
248248
ctx.Data["PageIsWiki"] = true
249-
ctx.Data["CanWriteWiki"] = ctx.Repo.CanWrite(models.UnitTypeWiki)
249+
ctx.Data["CanWriteWiki"] = ctx.Repo.CanWrite(models.UnitTypeWiki) && !ctx.Repo.Repository.IsArchived
250250

251251
wikiRepo, commit, err := findWikiRepoCommit(ctx)
252252
if err != nil {

‎routers/routes/routes.go

+17-17
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@ func RegisterRoutes(m *macaron.Macaron) {
492492
m.Group("/branches", func() {
493493
m.Combo("").Get(repo.ProtectedBranch).Post(repo.ProtectedBranchPost)
494494
m.Combo("/*").Get(repo.SettingsProtectedBranch).
495-
Post(bindIgnErr(auth.ProtectBranchForm{}), repo.SettingsProtectedBranchPost)
495+
Post(bindIgnErr(auth.ProtectBranchForm{}), context.RepoMustNotBeArchived(), repo.SettingsProtectedBranchPost)
496496
}, repo.MustBeNotEmpty)
497497

498498
m.Group("/hooks", func() {
@@ -530,13 +530,13 @@ func RegisterRoutes(m *macaron.Macaron) {
530530
})
531531
}, reqSignIn, context.RepoAssignment(), reqRepoAdmin, context.UnitTypes(), context.RepoRef())
532532

533-
m.Get("/:username/:reponame/action/:action", reqSignIn, context.RepoAssignment(), repo.Action)
533+
m.Get("/:username/:reponame/action/:action", reqSignIn, context.RepoAssignment(), context.RepoMustNotBeArchived(), repo.Action)
534534

535535
m.Group("/:username/:reponame", func() {
536536
m.Group("/issues", func() {
537537
m.Combo("/new").Get(context.RepoRef(), repo.NewIssue).
538538
Post(bindIgnErr(auth.CreateIssueForm{}), repo.NewIssuePost)
539-
}, reqRepoIssueReader)
539+
}, context.RepoMustNotBeArchived(), reqRepoIssueReader)
540540
// FIXME: should use different URLs but mostly same logic for comments of issue and pull reuqest.
541541
// So they can apply their own enable/disable logic on routers.
542542
m.Group("/issues", func() {
@@ -557,32 +557,32 @@ func RegisterRoutes(m *macaron.Macaron) {
557557
})
558558
})
559559
m.Post("/reactions/:action", bindIgnErr(auth.ReactionForm{}), repo.ChangeIssueReaction)
560-
})
560+
}, context.RepoMustNotBeArchived())
561561

562562
m.Post("/labels", reqRepoIssuesOrPullsWriter, repo.UpdateIssueLabel)
563563
m.Post("/milestone", reqRepoIssuesOrPullsWriter, repo.UpdateIssueMilestone)
564564
m.Post("/assignee", reqRepoIssuesOrPullsWriter, repo.UpdateIssueAssignee)
565565
m.Post("/status", reqRepoIssuesOrPullsWriter, repo.UpdateIssueStatus)
566-
})
566+
}, context.RepoMustNotBeArchived())
567567
m.Group("/comments/:id", func() {
568568
m.Post("", repo.UpdateCommentContent)
569569
m.Post("/delete", repo.DeleteComment)
570570
m.Post("/reactions/:action", bindIgnErr(auth.ReactionForm{}), repo.ChangeCommentReaction)
571-
})
571+
}, context.RepoMustNotBeArchived())
572572
m.Group("/labels", func() {
573573
m.Post("/new", bindIgnErr(auth.CreateLabelForm{}), repo.NewLabel)
574574
m.Post("/edit", bindIgnErr(auth.CreateLabelForm{}), repo.UpdateLabel)
575575
m.Post("/delete", repo.DeleteLabel)
576576
m.Post("/initialize", bindIgnErr(auth.InitializeLabelsForm{}), repo.InitializeLabels)
577-
}, reqRepoIssuesOrPullsWriter, context.RepoRef())
577+
}, context.RepoMustNotBeArchived(), reqRepoIssuesOrPullsWriter, context.RepoRef())
578578
m.Group("/milestones", func() {
579579
m.Combo("/new").Get(repo.NewMilestone).
580580
Post(bindIgnErr(auth.CreateMilestoneForm{}), repo.NewMilestonePost)
581581
m.Get("/:id/edit", repo.EditMilestone)
582582
m.Post("/:id/edit", bindIgnErr(auth.CreateMilestoneForm{}), repo.EditMilestonePost)
583583
m.Get("/:id/:action", repo.ChangeMilestonStatus)
584584
m.Post("/delete", repo.DeleteMilestone)
585-
}, reqRepoIssuesOrPullsWriter, context.RepoRef())
585+
}, context.RepoMustNotBeArchived(), reqRepoIssuesOrPullsWriter, context.RepoRef())
586586
m.Group("/milestone", func() {
587587
m.Get("/:id", repo.MilestoneIssuesAndPulls)
588588
}, reqRepoIssuesOrPullsWriter, context.RepoRef())
@@ -607,7 +607,7 @@ func RegisterRoutes(m *macaron.Macaron) {
607607
m.Post("/upload-file", repo.UploadFileToServer)
608608
m.Post("/upload-remove", bindIgnErr(auth.RemoveUploadFileForm{}), repo.RemoveUploadFileFromServer)
609609
}, context.RepoRef(), repo.MustBeEditable, repo.MustBeAbleToUpload)
610-
}, reqRepoCodeWriter, repo.MustBeNotEmpty)
610+
}, context.RepoMustNotBeArchived(), reqRepoCodeWriter, repo.MustBeNotEmpty)
611611

612612
m.Group("/branches", func() {
613613
m.Group("/_new/", func() {
@@ -617,7 +617,7 @@ func RegisterRoutes(m *macaron.Macaron) {
617617
}, bindIgnErr(auth.NewBranchForm{}))
618618
m.Post("/delete", repo.DeleteBranchPost)
619619
m.Post("/restore", repo.RestoreBranchPost)
620-
}, reqRepoCodeWriter, repo.MustBeNotEmpty)
620+
}, context.RepoMustNotBeArchived(), reqRepoCodeWriter, repo.MustBeNotEmpty)
621621

622622
}, reqSignIn, context.RepoAssignment(), context.UnitTypes())
623623

@@ -630,11 +630,11 @@ func RegisterRoutes(m *macaron.Macaron) {
630630
m.Get("/new", repo.NewRelease)
631631
m.Post("/new", bindIgnErr(auth.NewReleaseForm{}), repo.NewReleasePost)
632632
m.Post("/delete", repo.DeleteRelease)
633-
}, reqSignIn, repo.MustBeNotEmpty, reqRepoReleaseWriter, context.RepoRef())
633+
}, reqSignIn, repo.MustBeNotEmpty, context.RepoMustNotBeArchived(), reqRepoReleaseWriter, context.RepoRef())
634634
m.Group("/releases", func() {
635635
m.Get("/edit/*", repo.EditRelease)
636636
m.Post("/edit/*", bindIgnErr(auth.EditReleaseForm{}), repo.EditReleasePost)
637-
}, reqSignIn, repo.MustBeNotEmpty, reqRepoReleaseWriter, func(ctx *context.Context) {
637+
}, reqSignIn, repo.MustBeNotEmpty, context.RepoMustNotBeArchived(), reqRepoReleaseWriter, func(ctx *context.Context) {
638638
var err error
639639
ctx.Repo.Commit, err = ctx.Repo.GitRepo.GetBranchCommit(ctx.Repo.Repository.DefaultBranch)
640640
if err != nil {
@@ -652,7 +652,7 @@ func RegisterRoutes(m *macaron.Macaron) {
652652

653653
m.Group("/:username/:reponame", func() {
654654
m.Post("/topics", repo.TopicsPost)
655-
}, context.RepoAssignment(), reqRepoAdmin)
655+
}, context.RepoMustNotBeArchived(), context.RepoAssignment(), reqRepoAdmin)
656656

657657
m.Group("/:username/:reponame", func() {
658658
m.Group("", func() {
@@ -672,7 +672,7 @@ func RegisterRoutes(m *macaron.Macaron) {
672672
m.Combo("/:page/_edit").Get(repo.EditWiki).
673673
Post(bindIgnErr(auth.NewWikiForm{}), repo.EditWikiPost)
674674
m.Post("/:page/delete", repo.DeleteWikiPagePost)
675-
}, reqSignIn, reqRepoWikiWriter)
675+
}, context.RepoMustNotBeArchived(), reqSignIn, reqRepoWikiWriter)
676676
}, repo.MustEnableWiki, context.RepoRef())
677677

678678
m.Group("/wiki", func() {
@@ -694,14 +694,14 @@ func RegisterRoutes(m *macaron.Macaron) {
694694
m.Get(".diff", repo.DownloadPullDiff)
695695
m.Get(".patch", repo.DownloadPullPatch)
696696
m.Get("/commits", context.RepoRef(), repo.ViewPullCommits)
697-
m.Post("/merge", reqRepoPullsWriter, bindIgnErr(auth.MergePullRequestForm{}), repo.MergePullRequest)
698-
m.Post("/cleanup", context.RepoRef(), repo.CleanUpPullRequest)
697+
m.Post("/merge", context.RepoMustNotBeArchived(), reqRepoPullsWriter, bindIgnErr(auth.MergePullRequestForm{}), repo.MergePullRequest)
698+
m.Post("/cleanup", context.RepoMustNotBeArchived(), context.RepoRef(), repo.CleanUpPullRequest)
699699
m.Group("/files", func() {
700700
m.Get("", context.RepoRef(), repo.SetEditorconfigIfExists, repo.SetDiffViewStyle, repo.SetWhitespaceBehavior, repo.ViewPullFiles)
701701
m.Group("/reviews", func() {
702702
m.Post("/comments", bindIgnErr(auth.CodeCommentForm{}), repo.CreateCodeComment)
703703
m.Post("/submit", bindIgnErr(auth.SubmitReviewForm{}), repo.SubmitReview)
704-
})
704+
}, context.RepoMustNotBeArchived())
705705
})
706706
}, repo.MustAllowPulls)
707707

‎templates/explore/repo_list.tmpl

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
{{range .Repos}}
33
<div class="item">
44
<div class="ui header">
5-
<a class="name" href="{{.Link}}">{{if or $.PageIsExplore $.PageIsProfileStarList }}{{if .Owner}}{{.Owner.Name}} / {{end}}{{end}}{{.Name}}</a>
5+
<a class="name" href="{{.Link}}">
6+
{{if or $.PageIsExplore $.PageIsProfileStarList }}{{if .Owner}}{{.Owner.Name}} / {{end}}{{end}}{{.Name}}
7+
{{if .IsArchived}}<i class="archive icon archived-icon"></i>{{end}}
8+
</a>
69
{{if .IsPrivate}}
710
<span class="text gold"><i class="octicon octicon-lock"></i></span>
811
{{else if .IsFork}}

‎templates/repo/diff/box.tmpl

+25-23
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<a class="ui tiny basic toggle button" href="?style={{if .IsSplitStyle}}unified{{else}}split{{end}}">{{ if .IsSplitStyle }}{{.i18n.Tr "repo.diff.show_unified_view"}}{{else}}{{.i18n.Tr "repo.diff.show_split_view"}}{{end}}</a>
99
{{end}}
1010
<a class="ui tiny basic toggle button" data-target="#diff-files">{{.i18n.Tr "repo.diff.show_diff_stats"}}</a>
11-
{{if and .PageIsPullFiles $.SignedUserID}}
11+
{{if and .PageIsPullFiles $.SignedUserID (not .IsArchived)}}
1212
{{template "repo/diff/new_review" .}}
1313
{{end}}
1414
</div>
@@ -27,7 +27,7 @@
2727
<a class="ui tiny basic toggle button" href="?style={{if .IsSplitStyle}}unified{{else}}split{{end}}">{{ if .IsSplitStyle }}{{.i18n.Tr "repo.diff.show_unified_view"}}{{else}}{{.i18n.Tr "repo.diff.show_split_view"}}{{end}}</a>
2828
{{end}}
2929
<a class="ui tiny basic toggle button" data-target="#diff-files">{{.i18n.Tr "repo.diff.show_diff_stats"}}</a>
30-
{{if and .PageIsPullFiles $.SignedUserID}}
30+
{{if and .PageIsPullFiles $.SignedUserID (not .IsArchived)}}
3131
{{template "repo/diff/new_review" .}}
3232
{{end}}
3333
</div>
@@ -194,27 +194,29 @@
194194
</div>
195195
{{end}}
196196

197-
<div id="pull_review_add_comment" class="hide">
198-
{{template "repo/diff/new_comment" dict "root" .}}
199-
</div>
200-
<div class="hide" id="edit-content-form">
201-
<div class="ui comment form">
202-
<div class="ui top attached tabular menu">
203-
<a class="active write item">{{$.i18n.Tr "write"}}</a>
204-
<a class="preview item" data-url="{{AppSubUrl}}/api/v1/markdown" data-context="{{$.RepoLink}}">{{$.i18n.Tr "preview"}}</a>
205-
</div>
206-
<div class="ui bottom attached active write tab segment">
207-
<textarea tabindex="1" name="content"></textarea>
208-
</div>
209-
<div class="ui bottom attached tab preview segment markdown">
210-
{{$.i18n.Tr "loading"}}
211-
</div>
212-
<div class="text right edit buttons">
213-
<div class="ui basic blue cancel button" tabindex="3">{{.i18n.Tr "repo.issues.cancel"}}</div>
214-
<div class="ui green save button" tabindex="2">{{.i18n.Tr "repo.issues.save"}}</div>
215-
</div>
216-
</div>
217-
</div>
197+
{{if not $.Repository.IsArchived}}
198+
<div id="pull_review_add_comment" class="hide">
199+
{{template "repo/diff/new_comment" dict "root" .}}
200+
</div>
201+
<div class="hide" id="edit-content-form">
202+
<div class="ui comment form">
203+
<div class="ui top attached tabular menu">
204+
<a class="active write item">{{$.i18n.Tr "write"}}</a>
205+
<a class="preview item" data-url="{{AppSubUrl}}/api/v1/markdown" data-context="{{$.RepoLink}}">{{$.i18n.Tr "preview"}}</a>
206+
</div>
207+
<div class="ui bottom attached active write tab segment">
208+
<textarea tabindex="1" name="content"></textarea>
209+
</div>
210+
<div class="ui bottom attached tab preview segment markdown">
211+
{{$.i18n.Tr "loading"}}
212+
</div>
213+
<div class="text right edit buttons">
214+
<div class="ui basic blue cancel button" tabindex="3">{{.i18n.Tr "repo.issues.cancel"}}</div>
215+
<div class="ui green save button" tabindex="2">{{.i18n.Tr "repo.issues.save"}}</div>
216+
</div>
217+
</div>
218+
</div>
219+
{{end}}
218220

219221
{{if .IsSplitStyle}}
220222
<script>

‎templates/repo/diff/comment_form.tmpl

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{{if $.root.SignedUserID}}
1+
{{if and $.root.SignedUserID (not $.Repository.IsArchived)}}
22
{{if $.hidden}}
33
<button class="comment-form-reply ui green labeled icon tiny button"><i class="reply icon"></i> {{$.root.i18n.Tr "repo.diff.comment.reply"}}</button>
44
{{end}}

‎templates/repo/empty.tmpl

+20-12
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
<div class="ui grid">
66
<div class="sixteen wide column content">
77
{{template "base/alert" .}}
8+
{{if .Repository.IsArchived}}
9+
<div class="ui warning message">
10+
{{.i18n.Tr "repo.archive.title"}}
11+
</div>
12+
{{end}}
813
{{if .CanWriteCode}}
914
<h4 class="ui top attached header">
1015
{{.i18n.Tr "repo.quick_guide"}}
@@ -35,28 +40,31 @@
3540
{{end}}
3641
</div>
3742
</div>
38-
<div class="ui divider"></div>
3943

40-
<div class="item">
41-
<h3>{{.i18n.Tr "repo.create_new_repo_command"}}</h3>
42-
<div class="markdown">
43-
<pre><code>touch README.md
44+
{{if not .Repository.IsArchived}}
45+
<div class="ui divider"></div>
46+
47+
<div class="item">
48+
<h3>{{.i18n.Tr "repo.create_new_repo_command"}}</h3>
49+
<div class="markdown">
50+
<pre><code>touch README.md
4451
git init
4552
git add README.md
4653
git commit -m "first commit"
4754
git remote add origin <span class="clone-url">{{if $.DisableSSH}}{{$.CloneLink.HTTPS}}{{else}}{{$.CloneLink.SSH}}{{end}}</span>
4855
git push -u origin master</code></pre>
56+
</div>
4957
</div>
50-
</div>
51-
<div class="ui divider"></div>
58+
<div class="ui divider"></div>
5259

53-
<div class="item">
54-
<h3>{{.i18n.Tr "repo.push_exist_repo"}}</h3>
55-
<div class="markdown">
56-
<pre><code>git remote add origin <span class="clone-url">{{if $.DisableSSH}}{{$.CloneLink.HTTPS}}{{else}}{{$.CloneLink.SSH}}{{end}}</span>
60+
<div class="item">
61+
<h3>{{.i18n.Tr "repo.push_exist_repo"}}</h3>
62+
<div class="markdown">
63+
<pre><code>git remote add origin <span class="clone-url">{{if $.DisableSSH}}{{$.CloneLink.HTTPS}}{{else}}{{$.CloneLink.SSH}}{{end}}</span>
5764
git push -u origin master</code></pre>
65+
</div>
5866
</div>
59-
</div>
67+
{{end}}
6068
{{else}}
6169
<div class="ui segment center">
6270
{{.i18n.Tr "repo.empty_message"}}

‎templates/repo/header.tmpl

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<a href="{{AppSubUrl}}/{{.Owner.Name}}">{{.Owner.Name}}</a>
99
<div class="divider"> / </div>
1010
<a href="{{$.RepoLink}}">{{.Name}}</a>
11+
{{if .IsArchived}}<i class="archive icon archived-icon"></i>{{end}}
1112
{{if .IsMirror}}<div class="fork-flag">{{$.i18n.Tr "repo.mirror_from"}} <a target="_blank" rel="noopener noreferrer" href="{{$.Mirror.Address}}">{{$.Mirror.Address}}</a></div>{{end}}
1213
{{if .IsFork}}<div class="fork-flag">{{$.i18n.Tr "repo.forked_from"}} <a href="{{.BaseRepo.Link}}">{{SubStr .BaseRepo.RelLink 1 -1}}</a></div>{{end}}
1314
</div>

‎templates/repo/home.tmpl

+5
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@
5050
<span id="count_prompt">{{.i18n.Tr "repo.topic.count_prompt"}}</span>
5151
<span id="format_prompt">{{.i18n.Tr "repo.topic.format_prompt"}}</span>
5252
</div>
53+
{{if .Repository.IsArchived}}
54+
<div class="ui warning message">
55+
{{.i18n.Tr "repo.archive.title"}}
56+
</div>
57+
{{end}}
5358
{{template "repo/sub_menu" .}}
5459
<div class="ui stackable secondary menu mobile--margin-between-items mobile--no-negative-margins">
5560
{{if and .PullRequestCtx.Allowed .IsViewBranch}}

‎templates/repo/issue/labels.tmpl

+30-28
Original file line numberDiff line numberDiff line change
@@ -4,39 +4,41 @@
44
<div class="ui container">
55
<div class="navbar">
66
{{template "repo/issue/navbar" .}}
7-
{{if or .CanWriteIssues .CanWritePulls}}
7+
{{if and (or .CanWriteIssues .CanWritePulls) (not .Repository.IsArchived)}}
88
<div class="ui right">
99
<div class="ui green new-label button">{{.i18n.Tr "repo.issues.new_label"}}</div>
1010
</div>
1111
{{end}}
1212
</div>
13-
<div class="ui new-label segment hide">
14-
<form class="ui form" action="{{$.RepoLink}}/labels/new" method="post">
15-
{{.CsrfTokenHtml}}
16-
<div class="ui grid">
17-
<div class="three wide column">
18-
<div class="ui small input">
19-
<input class="new-label-input" name="title" placeholder="{{.i18n.Tr "repo.issues.new_label_placeholder"}}" autofocus required>
13+
{{if not .Repository.IsArchived}}
14+
<div class="ui new-label segment hide">
15+
<form class="ui form" action="{{$.RepoLink}}/labels/new" method="post">
16+
{{.CsrfTokenHtml}}
17+
<div class="ui grid">
18+
<div class="three wide column">
19+
<div class="ui small input">
20+
<input class="new-label-input" name="title" placeholder="{{.i18n.Tr "repo.issues.new_label_placeholder"}}" autofocus required>
21+
</div>
2022
</div>
21-
</div>
22-
<div class="five wide column">
23-
<div class="ui small fluid input">
24-
<input class="new-label-desc-input" name="description" placeholder="{{.i18n.Tr "repo.issues.new_label_desc_placeholder"}}">
23+
<div class="five wide column">
24+
<div class="ui small fluid input">
25+
<input class="new-label-desc-input" name="description" placeholder="{{.i18n.Tr "repo.issues.new_label_desc_placeholder"}}">
26+
</div>
27+
</div>
28+
<div class="color picker column">
29+
<input class="color-picker" name="color" value="#70c24a" required>
30+
</div>
31+
<div class="column precolors">
32+
{{template "repo/issue/label_precolors"}}
33+
</div>
34+
<div class="buttons">
35+
<div class="ui blue small basic cancel button">{{.i18n.Tr "repo.milestones.cancel"}}</div>
36+
<button class="ui green small button">{{.i18n.Tr "repo.issues.create_label"}}</button>
2537
</div>
2638
</div>
27-
<div class="color picker column">
28-
<input class="color-picker" name="color" value="#70c24a" required>
29-
</div>
30-
<div class="column precolors">
31-
{{template "repo/issue/label_precolors"}}
32-
</div>
33-
<div class="buttons">
34-
<div class="ui blue small basic cancel button">{{.i18n.Tr "repo.milestones.cancel"}}</div>
35-
<button class="ui green small button">{{.i18n.Tr "repo.issues.create_label"}}</button>
36-
</div>
37-
</div>
38-
</form>
39-
</div>
39+
</form>
40+
</div>
41+
{{end}}
4042
<div class="ui divider"></div>
4143

4244
<div class="ui right floated secondary filter menu">
@@ -57,7 +59,7 @@
5759
{{template "base/alert" .}}
5860
<div class="ui black label">{{.i18n.Tr "repo.issues.label_count" .NumLabels}}</div>
5961
<div class="label list">
60-
{{if and (or $.CanWriteIssues $.CanWritePulls) (eq .NumLabels 0)}}
62+
{{if and (or $.CanWriteIssues $.CanWritePulls) (eq .NumLabels 0) (not $.Repository.IsArchived) }}
6163
<div class="ui centered grid">
6264
<div class="twelve wide column eight wide computer column">
6365
<div class="ui attached left aligned segment">
@@ -105,7 +107,7 @@
105107
<a class="ui right open-issues" href="{{$.RepoLink}}/issues?labels={{.ID}}"><i class="octicon octicon-issue-opened"></i> {{$.i18n.Tr "repo.issues.label_open_issues" .NumOpenIssues}}</a>
106108
</div>
107109
<div class="three wide column">
108-
{{if or $.CanWriteIssues $.CanWritePulls}}
110+
{{if and (not $.Repository.IsArchived) (or $.CanWriteIssues $.CanWritePulls)}}
109111
<a class="ui right delete-button" href="#" data-url="{{$.RepoLink}}/labels/delete" data-id="{{.ID}}"><i class="octicon octicon-trashcan"></i> {{$.i18n.Tr "repo.issues.label_delete"}}</a>
110112
<a class="ui right edit-label-button" href="#" data-id="{{.ID}}" data-title="{{.Name}}" data-description="{{.Description}}" data-color={{.Color}}><i class="octicon octicon-pencil"></i> {{$.i18n.Tr "repo.issues.label_edit"}}</a>
111113
{{end}}
@@ -117,7 +119,7 @@
117119
</div>
118120
</div>
119121

120-
{{if or $.CanWriteIssues $.CanWritePulls}}
122+
{{if and (or .CanWriteIssues .CanWritePulls) (not .Repository.IsArchived)}}
121123
<div class="ui small basic delete modal">
122124
<div class="ui icon header">
123125
<i class="trash icon"></i>

‎templates/repo/issue/list.tmpl

+9-7
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@
99
<div class="column center aligned">
1010
{{template "repo/issue/search" .}}
1111
</div>
12-
<div class="column right aligned">
13-
{{if .PageIsIssueList}}
14-
<a class="ui green button" href="{{.RepoLink}}/issues/new">{{.i18n.Tr "repo.issues.new"}}</a>
15-
{{else}}
16-
<a class="ui green button {{if not .PullRequestCtx.Allowed}}disabled{{end}}" href="{{if .PullRequestCtx.Allowed}}{{.PullRequestCtx.BaseRepo.Link}}/compare/{{.Repository.DefaultBranch}}...{{.PullRequestCtx.HeadInfo}}{{end}}">{{.i18n.Tr "repo.pulls.new"}}</a>
17-
{{end}}
18-
</div>
12+
{{if not .Repository.IsArchived}}
13+
<div class="column right aligned">
14+
{{if .PageIsIssueList}}
15+
<a class="ui green button" href="{{.RepoLink}}/issues/new">{{.i18n.Tr "repo.issues.new"}}</a>
16+
{{else}}
17+
<a class="ui green button {{if not .PullRequestCtx.Allowed}}disabled{{end}}" href="{{if .PullRequestCtx.Allowed}}{{.PullRequestCtx.BaseRepo.Link}}/compare/{{.Repository.DefaultBranch}}...{{.PullRequestCtx.HeadInfo}}{{end}}">{{.i18n.Tr "repo.pulls.new"}}</a>
18+
{{end}}
19+
</div>
20+
{{end}}
1921
</div>
2022
<div class="ui divider"></div>
2123
<div id="issue-filters" class="ui stackable grid">

‎templates/repo/issue/milestone_issues.tmpl

+6-4
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@
99
<div class="column center aligned">
1010

1111
</div>
12-
<div class="column right aligned">
13-
<a class="ui grey button" href="{{.RepoLink}}/milestones/{{.MilestoneID}}/edit">{{.i18n.Tr "repo.milestones.edit"}}</a>
14-
<a class="ui green button" href="{{.RepoLink}}/issues/new?milestone={{.MilestoneID}}">{{.i18n.Tr "repo.issues.new"}}</a>
15-
</div>
12+
{{if not .Repository.IsArchived}}
13+
<div class="column right aligned">
14+
<a class="ui grey button" href="{{.RepoLink}}/milestones/{{.MilestoneID}}/edit">{{.i18n.Tr "repo.milestones.edit"}}</a>
15+
<a class="ui green button" href="{{.RepoLink}}/issues/new?milestone={{.MilestoneID}}">{{.i18n.Tr "repo.issues.new"}}</a>
16+
</div>
17+
{{end}}
1618
</div>
1719
<div class="ui one column stackable grid">
1820
<div class="column">

‎templates/repo/issue/milestones.tmpl

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<div class="ui container">
55
<div class="navbar">
66
{{template "repo/issue/navbar" .}}
7-
{{if or .CanWriteIssues .CanWritePulls}}
7+
{{if and (or .CanWriteIssues .CanWritePulls) (not .Repository.IsArchived)}}
88
<div class="ui right">
99
<a class="ui green button" href="{{$.Link}}/new">{{.i18n.Tr "repo.milestones.new"}}</a>
1010
</div>
@@ -67,7 +67,7 @@
6767
{{if .TotalTrackedTime}}<i class="octicon octicon-clock"></i> {{.TotalTrackedTime|Sec2Time}}{{end}}
6868
</span>
6969
</div>
70-
{{if or $.CanWriteIssues $.CanWritePulls}}
70+
{{if and (or $.CanWriteIssues $.CanWritePulls) (not $.Repository.IsArchived)}}
7171
<div class="ui right operate">
7272
<a href="{{$.Link}}/{{.ID}}/edit" data-id={{.ID}} data-title={{.Name}}><i class="octicon octicon-pencil"></i> {{$.i18n.Tr "repo.issues.label_edit"}}</a>
7373
{{if .IsClosed}}

‎templates/repo/issue/view.tmpl

+9-7
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@
66
<div class="column">
77
{{template "repo/issue/navbar" .}}
88
</div>
9-
<div class="column right aligned">
10-
{{if .PageIsIssueList}}
11-
<a class="ui green button" href="{{.RepoLink}}/issues/new">{{.i18n.Tr "repo.issues.new"}}</a>
12-
{{else}}
13-
<a class="ui green button {{if not .PullRequestCtx.Allowed}}disabled{{end}}" href="{{.RepoLink}}/compare/{{.BranchName | EscapePound}}...{{.PullRequestCtx.HeadInfo | EscapePound}}">{{.i18n.Tr "repo.pulls.new"}}</a>
14-
{{end}}
15-
</div>
9+
{{if not .Repository.IsArchived}}
10+
<div class="column right aligned">
11+
{{if .PageIsIssueList}}
12+
<a class="ui green button" href="{{.RepoLink}}/issues/new">{{.i18n.Tr "repo.issues.new"}}</a>
13+
{{else}}
14+
<a class="ui green button {{if not .PullRequestCtx.Allowed}}disabled{{end}}" href="{{.RepoLink}}/compare/{{.BranchName | EscapePound}}...{{.PullRequestCtx.HeadInfo | EscapePound}}">{{.i18n.Tr "repo.pulls.new"}}</a>
15+
{{end}}
16+
</div>
17+
{{end}}
1618
</div>
1719
<div class="ui divider"></div>
1820
{{if .Issue.IsPull}}

‎templates/repo/issue/view_content.tmpl

+52-40
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,16 @@
1818
<div class="content">
1919
<div class="ui top attached header">
2020
<span class="text grey"><a {{if gt .Issue.Poster.ID 0}}href="{{.Issue.Poster.HomeLink}}"{{end}}>{{.Issue.Poster.Name}}</a> {{.i18n.Tr "repo.issues.commented_at" .Issue.HashTag $createdStr | Safe}}</span>
21-
<div class="ui right actions">
22-
{{template "repo/issue/view_content/add_reaction" Dict "ctx" $ "ActionURL" (Printf "%s/issues/%d/reactions" $.RepoLink .Issue.Index) }}
23-
{{if or .IsIssueWriter .IsIssuePoster}}
24-
<div class="item action">
25-
<a class="edit-content" href="#"><i class="octicon octicon-pencil"></i></a>
26-
</div>
27-
{{end}}
28-
</div>
21+
{{if not $.Repository.IsArchived}}
22+
<div class="ui right actions">
23+
{{template "repo/issue/view_content/add_reaction" Dict "ctx" $ "ActionURL" (Printf "%s/issues/%d/reactions" $.RepoLink .Issue.Index) }}
24+
{{if or .IsIssueWriter .IsIssuePoster}}
25+
<div class="item action">
26+
<a class="edit-content" href="#"><i class="octicon octicon-pencil"></i></a>
27+
</div>
28+
{{end}}
29+
</div>
30+
{{end}}
2931
</div>
3032
<div class="ui attached segment">
3133
<div class="render-content markdown has-emoji">
@@ -64,43 +66,53 @@
6466

6567
{{ template "repo/issue/view_content/comments" . }}
6668

67-
{{if .Issue.IsPull}}
69+
{{if and .Issue.IsPull (not $.Repository.IsArchived)}}
6870
{{ template "repo/issue/view_content/pull". }}
6971
{{end}}
7072

71-
{{if .IsSigned}}
72-
<div class="comment form">
73-
<a class="avatar" href="{{.SignedUser.HomeLink}}">
74-
<img src="{{.SignedUser.RelAvatarLink}}">
75-
</a>
76-
<div class="content">
77-
<form class="ui segment form" id="comment-form" action="{{$.RepoLink}}/issues/{{.Issue.Index}}/comments" method="post">
78-
{{template "repo/issue/comment_tab" .}}
79-
{{.CsrfTokenHtml}}
80-
<input id="status" name="status" type="hidden">
81-
<div class="text right">
82-
{{if and (or .IsIssueWriter .IsIssuePoster) (not .DisableStatusChange)}}
83-
{{if .Issue.IsClosed}}
84-
<div id="status-button" class="ui green basic button" tabindex="6" data-status="{{.i18n.Tr "repo.issues.reopen_issue"}}" data-status-and-comment="{{.i18n.Tr "repo.issues.reopen_comment_issue"}}" data-status-val="reopen">
85-
{{.i18n.Tr "repo.issues.reopen_issue"}}
86-
</div>
87-
{{else}}
88-
<div id="status-button" class="ui red basic button" tabindex="6" data-status="{{.i18n.Tr "repo.issues.close_issue"}}" data-status-and-comment="{{.i18n.Tr "repo.issues.close_comment_issue"}}" data-status-val="close">
89-
{{.i18n.Tr "repo.issues.close_issue"}}
90-
</div>
91-
{{end}}
92-
{{end}}
93-
<button class="ui green button" tabindex="5">
94-
{{.i18n.Tr "repo.issues.create_comment"}}
95-
</button>
96-
</div>
97-
</form>
98-
</div>
99-
</div>
100-
{{else}}
73+
{{if .Repository.IsArchived}}
10174
<div class="ui warning message">
102-
{{.i18n.Tr "repo.issues.sign_in_require_desc" .SignInLink | Safe}}
75+
{{if .Issue.IsPull}}
76+
{{.i18n.Tr "repo.archive.pull.nocomment"}}
77+
{{else}}
78+
{{.i18n.Tr "repo.archive.issue.nocomment"}}
79+
{{end}}
10380
</div>
81+
{{else}}
82+
{{if .IsSigned}}
83+
<div class="comment form">
84+
<a class="avatar" href="{{.SignedUser.HomeLink}}">
85+
<img src="{{.SignedUser.RelAvatarLink}}">
86+
</a>
87+
<div class="content">
88+
<form class="ui segment form" id="comment-form" action="{{$.RepoLink}}/issues/{{.Issue.Index}}/comments" method="post">
89+
{{template "repo/issue/comment_tab" .}}
90+
{{.CsrfTokenHtml}}
91+
<input id="status" name="status" type="hidden">
92+
<div class="text right">
93+
{{if and (or .IsIssueWriter .IsIssuePoster) (not .DisableStatusChange)}}
94+
{{if .Issue.IsClosed}}
95+
<div id="status-button" class="ui green basic button" tabindex="6" data-status="{{.i18n.Tr "repo.issues.reopen_issue"}}" data-status-and-comment="{{.i18n.Tr "repo.issues.reopen_comment_issue"}}" data-status-val="reopen">
96+
{{.i18n.Tr "repo.issues.reopen_issue"}}
97+
</div>
98+
{{else}}
99+
<div id="status-button" class="ui red basic button" tabindex="6" data-status="{{.i18n.Tr "repo.issues.close_issue"}}" data-status-and-comment="{{.i18n.Tr "repo.issues.close_comment_issue"}}" data-status-val="close">
100+
{{.i18n.Tr "repo.issues.close_issue"}}
101+
</div>
102+
{{end}}
103+
{{end}}
104+
<button class="ui green button" tabindex="5">
105+
{{.i18n.Tr "repo.issues.create_comment"}}
106+
</button>
107+
</div>
108+
</form>
109+
</div>
110+
</div>
111+
{{else}}
112+
<div class="ui warning message">
113+
{{.i18n.Tr "repo.issues.sign_in_require_desc" .SignInLink | Safe}}
114+
</div>
115+
{{end}}
104116
{{end}}
105117
</ui>
106118
</div>

‎templates/repo/issue/view_content/comments.tmpl

+22-20
Original file line numberDiff line numberDiff line change
@@ -10,26 +10,28 @@
1010
<div class="content">
1111
<div class="ui top attached header">
1212
<span class="text grey"><a {{if gt .Poster.ID 0}}href="{{.Poster.HomeLink}}"{{end}}>{{.Poster.Name}}</a> {{$.i18n.Tr "repo.issues.commented_at" .HashTag $createdStr | Safe}}</span>
13-
<div class="ui right actions">
14-
{{if gt .ShowTag 0}}
15-
<div class="item tag">
16-
{{if eq .ShowTag 1}}
17-
{{$.i18n.Tr "repo.issues.poster"}}
18-
{{else if eq .ShowTag 2}}
19-
{{$.i18n.Tr "repo.issues.collaborator"}}
20-
{{else if eq .ShowTag 3}}
21-
{{$.i18n.Tr "repo.issues.owner"}}
22-
{{end}}
23-
</div>
24-
{{end}}
25-
{{template "repo/issue/view_content/add_reaction" Dict "ctx" $ "ActionURL" (Printf "%s/comments/%d/reactions" $.RepoLink .ID) }}
26-
{{if or $.Permission.IsAdmin (eq .Poster.ID $.SignedUserID)}}
27-
<div class="item action">
28-
<a class="edit-content" href="#"><i class="octicon octicon-pencil"></i></a>
29-
<a class="delete-comment" href="#" data-comment-id={{.HashTag}} data-url="{{$.RepoLink}}/comments/{{.ID}}/delete" data-locale="{{$.i18n.Tr "repo.issues.delete_comment_confirm"}}"><i class="octicon octicon-x"></i></a>
30-
</div>
31-
{{end}}
32-
</div>
13+
{{if not $.Repository.IsArchived}}
14+
<div class="ui right actions">
15+
{{if gt .ShowTag 0}}
16+
<div class="item tag">
17+
{{if eq .ShowTag 1}}
18+
{{$.i18n.Tr "repo.issues.poster"}}
19+
{{else if eq .ShowTag 2}}
20+
{{$.i18n.Tr "repo.issues.collaborator"}}
21+
{{else if eq .ShowTag 3}}
22+
{{$.i18n.Tr "repo.issues.owner"}}
23+
{{end}}
24+
</div>
25+
{{end}}
26+
{{template "repo/issue/view_content/add_reaction" Dict "ctx" $ "ActionURL" (Printf "%s/comments/%d/reactions" $.RepoLink .ID) }}
27+
{{if or $.Permission.IsAdmin (eq .Poster.ID $.SignedUserID)}}
28+
<div class="item action">
29+
<a class="edit-content" href="#"><i class="octicon octicon-pencil"></i></a>
30+
<a class="delete-comment" href="#" data-comment-id={{.HashTag}} data-url="{{$.RepoLink}}/comments/{{.ID}}/delete" data-locale="{{$.i18n.Tr "repo.issues.delete_comment_confirm"}}"><i class="octicon octicon-x"></i></a>
31+
</div>
32+
{{end}}
33+
</div>
34+
{{end}}
3335
</div>
3436
<div class="ui attached segment">
3537
<div class="render-content markdown has-emoji">

‎templates/repo/issue/view_content/sidebar.tmpl

+11-11
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<div class="ui segment metas">
33
{{template "repo/issue/branch_selector_field" .}}
44

5-
<div class="ui {{if not .IsIssueWriter}}disabled{{end}} floating jump select-label dropdown">
5+
<div class="ui {{if or (not .IsIssueWriter) .Repository.IsArchived}}disabled{{end}} floating jump select-label dropdown">
66
<span class="text">
77
<strong>{{.i18n.Tr "repo.issues.new.labels"}}</strong>
88
<span class="octicon octicon-gear"></span>
@@ -27,7 +27,7 @@
2727

2828
<div class="ui divider"></div>
2929

30-
<div class="ui {{if not .IsIssueWriter}}disabled{{end}} floating jump select-milestone dropdown">
30+
<div class="ui {{if or (not .IsIssueWriter) .Repository.IsArchived}}disabled{{end}} floating jump select-milestone dropdown">
3131
<span class="text">
3232
<strong>{{.i18n.Tr "repo.issues.new.milestone"}}</strong>
3333
<span class="octicon octicon-gear"></span>
@@ -68,7 +68,7 @@
6868
<div class="ui divider"></div>
6969

7070
<input id="assignee_id" name="assignee_id" type="hidden" value="{{.assignee_id}}">
71-
<div class="ui {{if not .IsIssueWriter}}disabled{{end}} floating jump select-assignees-modify dropdown">
71+
<div class="ui {{if or (not .IsIssueWriter) .Repository.IsArchived}}disabled{{end}} floating jump select-assignees-modify dropdown">
7272
<span class="text">
7373
<strong>{{.i18n.Tr "repo.issues.new.assignees"}}</strong>
7474
<span class="octicon octicon-gear"></span>
@@ -119,7 +119,7 @@
119119
</div>
120120
</div>
121121

122-
{{if $.IssueWatch}}
122+
{{if and $.IssueWatch (not .Repository.IsArchived)}}
123123
<div class="ui divider"></div>
124124

125125
<div class="ui watching">
@@ -142,7 +142,7 @@
142142
</div>
143143
{{end}}
144144
{{if .Repository.IsTimetrackerEnabled }}
145-
{{if .CanUseTimetracker }}
145+
{{if and .CanUseTimetracker (not .Repository.IsArchived)}}
146146
<div class="ui divider"></div>
147147
<div class="ui timetrack">
148148
<span class="text"><strong>{{.i18n.Tr "repo.issues.tracker"}}</strong></span>
@@ -223,7 +223,7 @@
223223
{{if .Issue.IsOverdue}}
224224
<span style="color: red;">{{.i18n.Tr "repo.issues.due_date_overdue"}}</span>
225225
{{end}}
226-
{{if .IsIssueWriter}}
226+
{{if and .IsIssueWriter (not .Repository.IsArchived)}}
227227
<br/>
228228
<a style="cursor:pointer;" onclick="toggleDeadlineForm();"><i class="edit icon"></i>{{$.i18n.Tr "repo.issues.due_date_form_edit"}}</a> -
229229
<a style="cursor:pointer;" onclick="updateDeadline('');"><i class="remove icon"></i>{{$.i18n.Tr "repo.issues.due_date_form_remove"}}</a>
@@ -233,7 +233,7 @@
233233
<p><i>{{.i18n.Tr "repo.issues.due_date_not_set"}}</i></p>
234234
{{end}}
235235

236-
{{if .IsIssueWriter}}
236+
{{if and .IsIssueWriter (not .Repository.IsArchived)}}
237237
<div {{if ne .Issue.DeadlineUnix 0}} style="display: none;"{{end}} id="deadlineForm">
238238
<form class="ui fluid action input" action="{{AppSubUrl}}/api/v1/repos/{{.Repository.Owner.Name}}/{{.Repository.Name}}/issues/{{.Issue.Index}}" method="post" id="update-issue-deadline-form" onsubmit="setDeadline();return false;">
239239
{{$.CsrfTokenHtml}}
@@ -278,7 +278,7 @@
278278
<div class="ui black label">#{{.Index}}</div>
279279
<a class="title has-emoji" href="{{$.RepoLink}}/issues/{{.Index}}">{{.Title}}</a>
280280
<div class="ui transparent label right floated">
281-
{{if $.CanCreateIssueDependencies}}
281+
{{if and $.CanCreateIssueDependencies (not $.Repository.IsArchived)}}
282282
<a class="delete-dependency-button" onclick="deleteDependencyModal({{.ID}}, 'blocking');"
283283
data-tooltip="{{$.i18n.Tr "repo.issues.dependency.remove_info"}}" data-inverted="">
284284
<i class="delete icon text red"></i>
@@ -304,7 +304,7 @@
304304
<div class="ui black label">#{{.Index}}</div>
305305
<a class="title has-emoji" href="{{$.RepoLink}}/issues/{{.Index}}">{{.Title}}</a>
306306
<div class="ui transparent label right floated">
307-
{{if $.CanCreateIssueDependencies}}
307+
{{if and $.CanCreateIssueDependencies (not $.IsArchived)}}
308308
<a class="delete-dependency-button" onclick="deleteDependencyModal({{.ID}}, 'blockedBy');"
309309
data-tooltip="{{$.i18n.Tr "repo.issues.dependency.remove_info"}}" data-inverted="">
310310
<i class="delete icon text red"></i>
@@ -316,7 +316,7 @@
316316
</div>
317317
{{end}}
318318

319-
{{if .CanCreateIssueDependencies}}
319+
{{if and .CanCreateIssueDependencies (not .Repository.IsArchived)}}
320320
<div>
321321
<form method="POST" action="{{$.RepoLink}}/issues/{{.Issue.Index}}/dependency/add" id="addDependencyForm">
322322
{{$.CsrfTokenHtml}}
@@ -337,7 +337,7 @@
337337
</div>
338338
</div>
339339
</div>
340-
{{if .CanCreateIssueDependencies}}
340+
{{if and .CanCreateIssueDependencies (not .Repository.IsArchived)}}
341341
<input type="hidden" id="repolink" value="{{$.RepoRelPath}}">
342342
<!-- I know, there is probably a better way to do this -->
343343
<input type="hidden" id="issueIndex" value="{{.Issue.Index}}"/>

‎templates/repo/issue/view_title.tmpl

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<input value="{{.Issue.Title}}">
77
</div>
88
</h1>
9-
{{if or .IsIssueWriter .IsIssuePoster}}
9+
{{if and (or .IsIssueWriter .IsIssuePoster) (not .Repository.IsArchived)}}
1010
<div class="four wide column">
1111
<div class="edit-zone text right">
1212
<div id="edit-title" class="ui basic green not-in-edit button">{{.i18n.Tr "repo.issues.edit"}}</div>

‎templates/repo/settings/branches.tmpl

+66-60
Original file line numberDiff line numberDiff line change
@@ -4,74 +4,80 @@
44
{{template "repo/settings/navbar" .}}
55
<div class="ui container">
66
{{template "base/alert" .}}
7-
<h4 class="ui top attached header">
8-
{{.i18n.Tr "repo.default_branch"}}
9-
</h4>
10-
<div class="ui attached segment">
11-
<p>
12-
{{.i18n.Tr "repo.settings.default_branch_desc"}}
13-
</p>
14-
<form class="ui form" action="{{.Link}}" method="post">
15-
{{.CsrfTokenHtml}}
16-
<input type="hidden" name="action" value="default_branch">
17-
{{if not .Repository.IsEmpty}}
18-
<div class="required inline field">
19-
<div class="ui dropdown selection" tabindex="0">
20-
<select name="branch">
21-
<option value="{{.Repository.DefaultBranch}}">{{.Repository.DefaultBranch}}</option>
22-
{{range .Branches}}
23-
<option value="{{.}}">{{.}}</option>
24-
{{end}}
25-
</select><i class="dropdown icon"></i>
26-
<div class="default text">{{.Repository.DefaultBranch}}</div>
27-
<div class="menu transition hidden" tabindex="-1" style="display: block !important;">
28-
{{range .Branches}}
29-
<div class="item" data-value="{{.}}">{{.}}</div>
30-
{{end}}
31-
</div>
32-
</div>
33-
<button class="ui green button">{{$.i18n.Tr "repo.settings.update_settings"}}</button>
34-
</div>
35-
{{end}}
36-
</form>
37-
</div>
7+
{{if .Repository.IsArchived}}
8+
<div class="ui warning message">
9+
{{.i18n.Tr "repo.settings.archive.branchsettings_unavailable"}}
10+
</div>
11+
{{else}}
12+
<h4 class="ui top attached header">
13+
{{.i18n.Tr "repo.default_branch"}}
14+
</h4>
15+
<div class="ui attached segment">
16+
<p>
17+
{{.i18n.Tr "repo.settings.default_branch_desc"}}
18+
</p>
19+
<form class="ui form" action="{{.Link}}" method="post">
20+
{{.CsrfTokenHtml}}
21+
<input type="hidden" name="action" value="default_branch">
22+
{{if not .Repository.IsEmpty}}
23+
<div class="required inline field">
24+
<div class="ui dropdown selection" tabindex="0">
25+
<select name="branch">
26+
<option value="{{.Repository.DefaultBranch}}">{{.Repository.DefaultBranch}}</option>
27+
{{range .Branches}}
28+
<option value="{{.}}">{{.}}</option>
29+
{{end}}
30+
</select><i class="dropdown icon"></i>
31+
<div class="default text">{{.Repository.DefaultBranch}}</div>
32+
<div class="menu transition hidden" tabindex="-1" style="display: block !important;">
33+
{{range .Branches}}
34+
<div class="item" data-value="{{.}}">{{.}}</div>
35+
{{end}}
36+
</div>
37+
</div>
38+
<button class="ui green button">{{$.i18n.Tr "repo.settings.update_settings"}}</button>
39+
</div>
40+
{{end}}
41+
</form>
42+
</div>
3843

39-
<h4 class="ui top attached header">
40-
{{.i18n.Tr "repo.settings.protected_branch"}}
41-
</h4>
44+
<h4 class="ui top attached header">
45+
{{.i18n.Tr "repo.settings.protected_branch"}}
46+
</h4>
4247

43-
<div class="ui attached table segment">
44-
<div class="ui grid padded">
45-
<div class="eight wide column">
46-
<div class="ui fluid dropdown selection" tabindex="0">
47-
<i class="dropdown icon"></i>
48-
<div class="default text">{{.i18n.Tr "repo.settings.choose_branch"}}</div>
49-
<div class="menu transition hidden" tabindex="-1" style="display: block !important;">
50-
{{range .LeftBranches}}
51-
<a class="item" href="{{$.Repository.Link}}/settings/branches/{{. | EscapePound}}">{{.}}</a>
52-
{{end}}
48+
<div class="ui attached table segment">
49+
<div class="ui grid padded">
50+
<div class="eight wide column">
51+
<div class="ui fluid dropdown selection" tabindex="0">
52+
<i class="dropdown icon"></i>
53+
<div class="default text">{{.i18n.Tr "repo.settings.choose_branch"}}</div>
54+
<div class="menu transition hidden" tabindex="-1" style="display: block !important;">
55+
{{range .LeftBranches}}
56+
<a class="item" href="{{$.Repository.Link}}/settings/branches/{{. | EscapePound}}">{{.}}</a>
57+
{{end}}
58+
</div>
5359
</div>
5460
</div>
5561
</div>
56-
</div>
5762

58-
<div class="ui grid padded">
59-
<div class="sixteen wide column">
60-
<table class="ui single line table padded">
61-
<tbody>
62-
{{range .ProtectedBranches}}
63-
<tr>
64-
<td><div class="ui basic label blue">{{.BranchName}}</div></td>
65-
<td class="right aligned"><a class="rm ui button" href="{{$.Repository.Link}}/settings/branches/{{.BranchName | EscapePound}}">{{$.i18n.Tr "repo.settings.edit_protected_branch"}}</a></td>
66-
</tr>
67-
{{else}}
68-
<tr class="center aligned"><td>{{.i18n.Tr "repo.settings.no_protected_branch"}}</td></tr>
69-
{{end}}
70-
</tbody>
71-
</table>
63+
<div class="ui grid padded">
64+
<div class="sixteen wide column">
65+
<table class="ui single line table padded">
66+
<tbody>
67+
{{range .ProtectedBranches}}
68+
<tr>
69+
<td><div class="ui basic label blue">{{.BranchName}}</div></td>
70+
<td class="right aligned"><a class="rm ui button" href="{{$.Repository.Link}}/settings/branches/{{.BranchName | EscapePound}}">{{$.i18n.Tr "repo.settings.edit_protected_branch"}}</a></td>
71+
</tr>
72+
{{else}}
73+
<tr class="center aligned"><td>{{.i18n.Tr "repo.settings.no_protected_branch"}}</td></tr>
74+
{{end}}
75+
</tbody>
76+
</table>
77+
</div>
7278
</div>
7379
</div>
74-
</div>
80+
{{end}}
7581
</div>
7682
</div>
7783
{{template "base/footer" .}}

‎templates/repo/settings/options.tmpl

+55
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,31 @@
325325
<p>{{.i18n.Tr "repo.settings.delete_desc"}}</p>
326326
</div>
327327
</div>
328+
329+
{{if not .Repository.IsMirror}}
330+
<div class="ui divider"></div>
331+
332+
<div class="item">
333+
<div class="ui right">
334+
<button class="ui basic red show-modal button" data-modal="#archive-repo-modal">
335+
{{if .Repository.IsArchived}}
336+
{{.i18n.Tr "repo.settings.unarchive.button"}}
337+
{{else}}
338+
{{.i18n.Tr "repo.settings.archive.button"}}
339+
{{end}}
340+
</button>
341+
</div>
342+
<div>
343+
{{if .Repository.IsArchived}}
344+
<h5>{{.i18n.Tr "repo.settings.unarchive.header"}}</h5>
345+
<p>{{.i18n.Tr "repo.settings.unarchive.text"}}</p>
346+
{{else}}
347+
<h5>{{.i18n.Tr "repo.settings.archive.header"}}</h5>
348+
<p>{{.i18n.Tr "repo.settings.archive.text"}}</p>
349+
{{end}}
350+
</div>
351+
</div>
352+
{{end}}
328353
</div>
329354
{{end}}
330355
</div>
@@ -464,6 +489,36 @@
464489
</div>
465490
</div>
466491
{{end}}
492+
493+
{{if not .Repository.IsMirror}}
494+
<div class="ui basic modal" id="archive-repo-modal">
495+
<div class="ui icon header">
496+
{{if .Repository.IsArchived}}
497+
{{.i18n.Tr "repo.settings.unarchive.header"}}
498+
{{else}}
499+
{{.i18n.Tr "repo.settings.archive.header"}}
500+
{{end}}
501+
</div>
502+
<div class="content center">
503+
<p>
504+
{{if .Repository.IsArchived}}
505+
{{.i18n.Tr "repo.settings.unarchive.text"}}
506+
{{else}}
507+
{{.i18n.Tr "repo.settings.archive.text"}}
508+
{{end}}
509+
</p>
510+
</div>
511+
<form action="{{.Link}}" method="post">
512+
{{.CsrfTokenHtml}}
513+
<input type="hidden" name="action" value="{{if .Repository.IsArchived}}unarchive{{else}}archive{{end}}">
514+
<input type="hidden" name="repo_id" value="{{.Repository.ID}}">
515+
<div class="center actions">
516+
<div class="ui basic cancel inverted button">{{.i18n.Tr "settings.cancel"}}</div>
517+
<button class="ui basic inverted yellow button">{{.i18n.Tr "modal.yes"}}</button>
518+
</div>
519+
</form>
520+
</div>
521+
{{end}}
467522
{{end}}
468523

469524
{{template "base/footer" .}}

‎templates/user/dashboard/dashboard.tmpl

+1
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
<a :href="suburl + '/' + repo.full_name">
8686
<i :class="repoClass(repo)"></i>
8787
<strong class="text truncate item-name">${repo.full_name}</strong>
88+
<i v-if="repo.archived" class="archive icon archived-icon"></i>
8889
<span class="ui right text light grey">
8990
${repo.stars_count} <i class="octicon octicon-star rear"></i>
9091
</span>

0 commit comments

Comments
 (0)
Please sign in to comment.