diff options
author | Jason Song <i@wolfogre.com> | 2022-10-31 23:10:33 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-31 17:10:33 +0200 |
commit | 4ae3f762177a2cdb449b949501420e88462f8f95 (patch) | |
tree | 771b1c12ca241e00edfe651f5f8a157696293494 /modules/issue/template/unmarshal.go | |
parent | 9b3e2c54502ef8295ae18b5496588f0370138ef7 (diff) | |
download | gitea-4ae3f762177a2cdb449b949501420e88462f8f95.tar.gz gitea-4ae3f762177a2cdb449b949501420e88462f8f95.zip |
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">
Diffstat (limited to 'modules/issue/template/unmarshal.go')
-rw-r--r-- | modules/issue/template/unmarshal.go | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/modules/issue/template/unmarshal.go b/modules/issue/template/unmarshal.go index e695d1e1cc..24587b0fed 100644 --- a/modules/issue/template/unmarshal.go +++ b/modules/issue/template/unmarshal.go @@ -14,6 +14,7 @@ import ( "code.gitea.io/gitea/modules/markup/markdown" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/modules/util" "gopkg.in/yaml.v2" ) @@ -95,14 +96,27 @@ func unmarshal(filename string, content []byte) (*api.IssueTemplate, error) { }{} if typ := it.Type(); typ == api.IssueTemplateTypeMarkdown { - templateBody, err := markdown.ExtractMetadata(string(content), it) - if err != nil { - return nil, err - } - it.Content = templateBody - if it.About == "" { - if _, err := markdown.ExtractMetadata(string(content), compatibleTemplate); err == nil && compatibleTemplate.About != "" { - it.About = compatibleTemplate.About + if templateBody, err := markdown.ExtractMetadata(string(content), it); err != nil { + // The only thing we know here is that we can't extract metadata from the content, + // 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 + if it.About == "" { + if _, err := markdown.ExtractMetadata(string(content), compatibleTemplate); err == nil && compatibleTemplate.About != "" { + it.About = compatibleTemplate.About + } } } } else if typ == api.IssueTemplateTypeYaml { |