]> source.dussan.org Git - gitea.git/commitdiff
Fix issue templates when blank isses are disabled (#27061) (#27082)
authorGiteabot <teabot@gitea.io>
Thu, 14 Sep 2023 15:39:34 +0000 (23:39 +0800)
committerGitHub <noreply@github.com>
Thu, 14 Sep 2023 15:39:34 +0000 (17:39 +0200)
Backport #27061 by @JakobDev

Fixes #27060

Co-authored-by: JakobDev <jakobdev@gmx.de>
Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: delvh <dev.lh@web.de>
routers/web/repo/compare.go
routers/web/repo/issue.go

index 92abe0ce259176f37ee45a1a69d2522087aed8f4..4f2e0594bece899d07e66b6c3781719849ef2483 100644 (file)
@@ -785,7 +785,7 @@ func CompareDiff(ctx *context.Context) {
 
        ctx.Data["IsRepoToolbarCommits"] = true
        ctx.Data["IsDiffCompare"] = true
-       templateErrs := setTemplateIfExists(ctx, pullRequestTemplateKey, pullRequestTemplateCandidates)
+       _, templateErrs := setTemplateIfExists(ctx, pullRequestTemplateKey, pullRequestTemplateCandidates)
 
        if len(templateErrs) > 0 {
                ctx.Flash.Warning(renderErrorOfTemplates(ctx, templateErrs), true)
index 190f543685f79ed224301d60de7cbc0837b5f180..f629a90476aabd149ec9d56c2e70fa2fc2c752fe 100644 (file)
@@ -804,10 +804,11 @@ func RetrieveRepoMetas(ctx *context.Context, repo *repo_model.Repository, isPull
        return labels
 }
 
-func setTemplateIfExists(ctx *context.Context, ctxDataKey string, possibleFiles []string) map[string]error {
+// Tries to load and set an issue template. The first return value indicates if a template was loaded.
+func setTemplateIfExists(ctx *context.Context, ctxDataKey string, possibleFiles []string) (bool, map[string]error) {
        commit, err := ctx.Repo.GitRepo.GetBranchCommit(ctx.Repo.Repository.DefaultBranch)
        if err != nil {
-               return nil
+               return false, nil
        }
 
        templateCandidates := make([]string, 0, 1+len(possibleFiles))
@@ -870,20 +871,15 @@ func setTemplateIfExists(ctx *context.Context, ctxDataKey string, possibleFiles
                ctx.Data["label_ids"] = strings.Join(labelIDs, ",")
                ctx.Data["Reference"] = template.Ref
                ctx.Data["RefEndName"] = git.RefName(template.Ref).ShortName()
-               return templateErrs
+               return true, templateErrs
        }
-       return templateErrs
+       return false, templateErrs
 }
 
 // NewIssue render creating issue page
 func NewIssue(ctx *context.Context) {
        issueConfig, _ := issue_service.GetTemplateConfigFromDefaultBranch(ctx.Repo.Repository, ctx.Repo.GitRepo)
        hasTemplates := issue_service.HasTemplatesOrContactLinks(ctx.Repo.Repository, ctx.Repo.GitRepo)
-       if !issueConfig.BlankIssuesEnabled && hasTemplates {
-               // The "issues/new" and "issues/new/choose" share the same query parameters "project" and "milestone", if blank issues are disabled, just redirect to the "issues/choose" page with these parameters.
-               ctx.Redirect(fmt.Sprintf("%s/issues/new/choose?%s", ctx.Repo.Repository.Link(), ctx.Req.URL.RawQuery), http.StatusSeeOther)
-               return
-       }
 
        ctx.Data["Title"] = ctx.Tr("repo.issues.new")
        ctx.Data["PageIsIssueList"] = true
@@ -930,7 +926,8 @@ func NewIssue(ctx *context.Context) {
        RetrieveRepoMetas(ctx, ctx.Repo.Repository, false)
 
        _, templateErrs := issue_service.GetTemplatesFromDefaultBranch(ctx.Repo.Repository, ctx.Repo.GitRepo)
-       if errs := setTemplateIfExists(ctx, issueTemplateKey, IssueTemplateCandidates); len(errs) > 0 {
+       templateLoaded, errs := setTemplateIfExists(ctx, issueTemplateKey, IssueTemplateCandidates)
+       if len(errs) > 0 {
                for k, v := range errs {
                        templateErrs[k] = v
                }
@@ -945,6 +942,12 @@ func NewIssue(ctx *context.Context) {
 
        ctx.Data["HasIssuesOrPullsWritePermission"] = ctx.Repo.CanWrite(unit.TypeIssues)
 
+       if !issueConfig.BlankIssuesEnabled && hasTemplates && !templateLoaded {
+               // The "issues/new" and "issues/new/choose" share the same query parameters "project" and "milestone", if blank issues are disabled, just redirect to the "issues/choose" page with these parameters.
+               ctx.Redirect(fmt.Sprintf("%s/issues/new/choose?%s", ctx.Repo.Repository.Link(), ctx.Req.URL.RawQuery), http.StatusSeeOther)
+               return
+       }
+
        ctx.HTML(http.StatusOK, tplIssueNew)
 }