Deal with markdown template without metadata (#21639)
Fixed #21636. Related to #20987. A markdown template without metadata should not be treated as an invalid template. And this PR fixed another bug that non-template files(neither .md nor .yaml) are treated as yaml files. <img width="504" alt="image" src="https://user-images.githubusercontent.com/9418365/198968668-40082fa1-4f25-4d3e-9b73-1dbf6d1a7521.png">
This commit is contained in:
parent
9b3e2c5450
commit
4ae3f76217
2 changed files with 24 additions and 10 deletions
|
@ -14,6 +14,7 @@ import (
|
||||||
"code.gitea.io/gitea/modules/markup/markdown"
|
"code.gitea.io/gitea/modules/markup/markdown"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
api "code.gitea.io/gitea/modules/structs"
|
api "code.gitea.io/gitea/modules/structs"
|
||||||
|
"code.gitea.io/gitea/modules/util"
|
||||||
|
|
||||||
"gopkg.in/yaml.v2"
|
"gopkg.in/yaml.v2"
|
||||||
)
|
)
|
||||||
|
@ -95,16 +96,29 @@ func unmarshal(filename string, content []byte) (*api.IssueTemplate, error) {
|
||||||
}{}
|
}{}
|
||||||
|
|
||||||
if typ := it.Type(); typ == api.IssueTemplateTypeMarkdown {
|
if typ := it.Type(); typ == api.IssueTemplateTypeMarkdown {
|
||||||
templateBody, err := markdown.ExtractMetadata(string(content), it)
|
if templateBody, err := markdown.ExtractMetadata(string(content), it); err != nil {
|
||||||
if err != nil {
|
// The only thing we know here is that we can't extract metadata from the content,
|
||||||
return nil, err
|
// it's hard to tell if metadata doesn't exist or metadata isn't valid.
|
||||||
}
|
// There's an example template:
|
||||||
|
//
|
||||||
|
// ---
|
||||||
|
// # Title
|
||||||
|
// ---
|
||||||
|
// Content
|
||||||
|
//
|
||||||
|
// It could be a valid markdown with two horizontal lines, or an invalid markdown with wrong metadata.
|
||||||
|
|
||||||
|
it.Content = string(content)
|
||||||
|
it.Name = filepath.Base(it.FileName)
|
||||||
|
it.About, _ = util.SplitStringAtByteN(it.Content, 80)
|
||||||
|
} else {
|
||||||
it.Content = templateBody
|
it.Content = templateBody
|
||||||
if it.About == "" {
|
if it.About == "" {
|
||||||
if _, err := markdown.ExtractMetadata(string(content), compatibleTemplate); err == nil && compatibleTemplate.About != "" {
|
if _, err := markdown.ExtractMetadata(string(content), compatibleTemplate); err == nil && compatibleTemplate.About != "" {
|
||||||
it.About = compatibleTemplate.About
|
it.About = compatibleTemplate.About
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else if typ == api.IssueTemplateTypeYaml {
|
} else if typ == api.IssueTemplateTypeYaml {
|
||||||
if err := yaml.Unmarshal(content, it); err != nil {
|
if err := yaml.Unmarshal(content, it); err != nil {
|
||||||
return nil, fmt.Errorf("yaml unmarshal: %w", err)
|
return nil, fmt.Errorf("yaml unmarshal: %w", err)
|
||||||
|
|
|
@ -170,7 +170,7 @@ func (it IssueTemplate) Type() IssueTemplateType {
|
||||||
if ext := filepath.Ext(it.FileName); ext == ".md" {
|
if ext := filepath.Ext(it.FileName); ext == ".md" {
|
||||||
return IssueTemplateTypeMarkdown
|
return IssueTemplateTypeMarkdown
|
||||||
} else if ext == ".yaml" || ext == ".yml" {
|
} else if ext == ".yaml" || ext == ".yml" {
|
||||||
return "yaml"
|
|
||||||
}
|
|
||||||
return IssueTemplateTypeYaml
|
return IssueTemplateTypeYaml
|
||||||
|
}
|
||||||
|
return ""
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue