mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	don't allow pull requests to be created on an archived repository (#5883)
* don't allow pull requests to be created on an archived repository Also disable the "PR" button if the repo is archived * Refuse creating an issue/PR via API calls too
This commit is contained in:
		
				
					committed by
					
						
						techknowlogick
					
				
			
			
				
	
			
			
			
						parent
						
							6dc2f401c9
						
					
				
				
					commit
					57a69ef277
				
			@@ -74,7 +74,7 @@ import (
 | 
				
			|||||||
	api "code.gitea.io/sdk/gitea"
 | 
						api "code.gitea.io/sdk/gitea"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/go-macaron/binding"
 | 
						"github.com/go-macaron/binding"
 | 
				
			||||||
	"gopkg.in/macaron.v1"
 | 
						macaron "gopkg.in/macaron.v1"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func sudo() macaron.Handler {
 | 
					func sudo() macaron.Handler {
 | 
				
			||||||
@@ -371,6 +371,13 @@ func mustEnableUserHeatmap(ctx *context.Context) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func mustNotBeArchived(ctx *context.Context) {
 | 
				
			||||||
 | 
						if ctx.Repo.Repository.IsArchived {
 | 
				
			||||||
 | 
							ctx.Status(404)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RegisterRoutes registers all v1 APIs routes to web application.
 | 
					// RegisterRoutes registers all v1 APIs routes to web application.
 | 
				
			||||||
// FIXME: custom form error response
 | 
					// FIXME: custom form error response
 | 
				
			||||||
func RegisterRoutes(m *macaron.Macaron) {
 | 
					func RegisterRoutes(m *macaron.Macaron) {
 | 
				
			||||||
@@ -518,11 +525,11 @@ func RegisterRoutes(m *macaron.Macaron) {
 | 
				
			|||||||
				}, mustEnableIssues)
 | 
									}, mustEnableIssues)
 | 
				
			||||||
				m.Group("/issues", func() {
 | 
									m.Group("/issues", func() {
 | 
				
			||||||
					m.Combo("").Get(repo.ListIssues).
 | 
										m.Combo("").Get(repo.ListIssues).
 | 
				
			||||||
						Post(reqToken(), bind(api.CreateIssueOption{}), repo.CreateIssue)
 | 
											Post(reqToken(), mustNotBeArchived, bind(api.CreateIssueOption{}), repo.CreateIssue)
 | 
				
			||||||
					m.Group("/comments", func() {
 | 
										m.Group("/comments", func() {
 | 
				
			||||||
						m.Get("", repo.ListRepoIssueComments)
 | 
											m.Get("", repo.ListRepoIssueComments)
 | 
				
			||||||
						m.Combo("/:id", reqToken()).
 | 
											m.Combo("/:id", reqToken()).
 | 
				
			||||||
							Patch(bind(api.EditIssueCommentOption{}), repo.EditIssueComment).
 | 
												Patch(mustNotBeArchived, bind(api.EditIssueCommentOption{}), repo.EditIssueComment).
 | 
				
			||||||
							Delete(repo.DeleteIssueComment)
 | 
												Delete(repo.DeleteIssueComment)
 | 
				
			||||||
					})
 | 
										})
 | 
				
			||||||
					m.Group("/:index", func() {
 | 
										m.Group("/:index", func() {
 | 
				
			||||||
@@ -531,7 +538,7 @@ func RegisterRoutes(m *macaron.Macaron) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
						m.Group("/comments", func() {
 | 
											m.Group("/comments", func() {
 | 
				
			||||||
							m.Combo("").Get(repo.ListIssueComments).
 | 
												m.Combo("").Get(repo.ListIssueComments).
 | 
				
			||||||
								Post(reqToken(), bind(api.CreateIssueCommentOption{}), repo.CreateIssueComment)
 | 
													Post(reqToken(), mustNotBeArchived, bind(api.CreateIssueCommentOption{}), repo.CreateIssueComment)
 | 
				
			||||||
							m.Combo("/:id", reqToken()).Patch(bind(api.EditIssueCommentOption{}), repo.EditIssueCommentDeprecated).
 | 
												m.Combo("/:id", reqToken()).Patch(bind(api.EditIssueCommentOption{}), repo.EditIssueCommentDeprecated).
 | 
				
			||||||
								Delete(repo.DeleteIssueCommentDeprecated)
 | 
													Delete(repo.DeleteIssueCommentDeprecated)
 | 
				
			||||||
						})
 | 
											})
 | 
				
			||||||
@@ -593,12 +600,12 @@ func RegisterRoutes(m *macaron.Macaron) {
 | 
				
			|||||||
				m.Get("/editorconfig/:filename", context.RepoRef(), reqRepoReader(models.UnitTypeCode), repo.GetEditorconfig)
 | 
									m.Get("/editorconfig/:filename", context.RepoRef(), reqRepoReader(models.UnitTypeCode), repo.GetEditorconfig)
 | 
				
			||||||
				m.Group("/pulls", func() {
 | 
									m.Group("/pulls", func() {
 | 
				
			||||||
					m.Combo("").Get(bind(api.ListPullRequestsOptions{}), repo.ListPullRequests).
 | 
										m.Combo("").Get(bind(api.ListPullRequestsOptions{}), repo.ListPullRequests).
 | 
				
			||||||
						Post(reqToken(), bind(api.CreatePullRequestOption{}), repo.CreatePullRequest)
 | 
											Post(reqToken(), mustNotBeArchived, bind(api.CreatePullRequestOption{}), repo.CreatePullRequest)
 | 
				
			||||||
					m.Group("/:index", func() {
 | 
										m.Group("/:index", func() {
 | 
				
			||||||
						m.Combo("").Get(repo.GetPullRequest).
 | 
											m.Combo("").Get(repo.GetPullRequest).
 | 
				
			||||||
							Patch(reqToken(), reqRepoWriter(models.UnitTypePullRequests), bind(api.EditPullRequestOption{}), repo.EditPullRequest)
 | 
												Patch(reqToken(), reqRepoWriter(models.UnitTypePullRequests), bind(api.EditPullRequestOption{}), repo.EditPullRequest)
 | 
				
			||||||
						m.Combo("/merge").Get(repo.IsPullRequestMerged).
 | 
											m.Combo("/merge").Get(repo.IsPullRequestMerged).
 | 
				
			||||||
							Post(reqToken(), reqRepoWriter(models.UnitTypePullRequests), bind(auth.MergePullRequestForm{}), repo.MergePullRequest)
 | 
												Post(reqToken(), mustNotBeArchived, reqRepoWriter(models.UnitTypePullRequests), bind(auth.MergePullRequestForm{}), repo.MergePullRequest)
 | 
				
			||||||
					})
 | 
										})
 | 
				
			||||||
				}, mustAllowPulls, reqRepoReader(models.UnitTypeCode), context.ReferencesGitRepo())
 | 
									}, mustAllowPulls, reqRepoReader(models.UnitTypeCode), context.ReferencesGitRepo())
 | 
				
			||||||
				m.Group("/statuses", func() {
 | 
									m.Group("/statuses", func() {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -586,7 +586,7 @@ func RegisterRoutes(m *macaron.Macaron) {
 | 
				
			|||||||
		m.Group("/milestone", func() {
 | 
							m.Group("/milestone", func() {
 | 
				
			||||||
			m.Get("/:id", repo.MilestoneIssuesAndPulls)
 | 
								m.Get("/:id", repo.MilestoneIssuesAndPulls)
 | 
				
			||||||
		}, reqRepoIssuesOrPullsWriter, context.RepoRef())
 | 
							}, reqRepoIssuesOrPullsWriter, context.RepoRef())
 | 
				
			||||||
		m.Combo("/compare/*", reqRepoCodeReader, reqRepoPullsReader, repo.MustAllowPulls, repo.SetEditorconfigIfExists).
 | 
							m.Combo("/compare/*", context.RepoMustNotBeArchived(), reqRepoCodeReader, reqRepoPullsReader, repo.MustAllowPulls, repo.SetEditorconfigIfExists).
 | 
				
			||||||
			Get(repo.SetDiffViewStyle, repo.CompareAndPullRequest).
 | 
								Get(repo.SetDiffViewStyle, repo.CompareAndPullRequest).
 | 
				
			||||||
			Post(bindIgnErr(auth.CreateIssueForm{}), repo.CompareAndPullRequestPost)
 | 
								Post(bindIgnErr(auth.CreateIssueForm{}), repo.CompareAndPullRequestPost)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,7 +57,7 @@
 | 
				
			|||||||
		{{end}}
 | 
							{{end}}
 | 
				
			||||||
		{{template "repo/sub_menu" .}}
 | 
							{{template "repo/sub_menu" .}}
 | 
				
			||||||
		<div class="ui stackable secondary menu mobile--margin-between-items mobile--no-negative-margins">
 | 
							<div class="ui stackable secondary menu mobile--margin-between-items mobile--no-negative-margins">
 | 
				
			||||||
			{{if and .PullRequestCtx.Allowed .IsViewBranch}}
 | 
								{{if and .PullRequestCtx.Allowed .IsViewBranch (not .Repository.IsArchived)}}
 | 
				
			||||||
				<div class="fitted item">
 | 
									<div class="fitted item">
 | 
				
			||||||
					<a href="{{.BaseRepo.Link}}/compare/{{.BaseRepo.DefaultBranch | EscapePound}}...{{ if .Repository.IsFork }}{{.Repository.Owner.Name}}{{ else }}{{ .SignedUserName }}{{ end }}:{{.BranchName | EscapePound}}">
 | 
										<a href="{{.BaseRepo.Link}}/compare/{{.BaseRepo.DefaultBranch | EscapePound}}...{{ if .Repository.IsFork }}{{.Repository.Owner.Name}}{{ else }}{{ .SignedUserName }}{{ end }}:{{.BranchName | EscapePound}}">
 | 
				
			||||||
					<button class="ui green tiny compact button"><i class="octicon octicon-git-compare"></i></button>
 | 
										<button class="ui green tiny compact button"><i class="octicon octicon-git-compare"></i></button>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user