]> source.dussan.org Git - gitea.git/commitdiff
Add NeedPostProcess for Parser interface to improve performance of csv render (#15153)
authorLunny Xiao <xiaolunwen@gmail.com>
Tue, 13 Apr 2021 07:06:31 +0000 (15:06 +0800)
committerGitHub <noreply@github.com>
Tue, 13 Apr 2021 07:06:31 +0000 (15:06 +0800)
docs/content/doc/advanced/config-cheat-sheet.en-us.md
docs/content/doc/advanced/config-cheat-sheet.zh-cn.md
modules/markup/csv/csv.go
modules/markup/external/external.go
modules/markup/markdown/markdown.go
modules/markup/markup.go
modules/markup/orgmode/orgmode.go
modules/setting/markup.go

index 7aafb8204822b443682c916cb19e9c05c90943bb..f1c5bf1b8e8d47851272613eff5f2d0d9fc05453 100644 (file)
@@ -831,12 +831,14 @@ Gitea can support Markup using external tools. The example below will add a mark
 ```ini
 [markup.asciidoc]
 ENABLED = true
+NEED_POSTPROCESS = true
 FILE_EXTENSIONS = .adoc,.asciidoc
 RENDER_COMMAND = "asciidoc --out-file=- -"
 IS_INPUT_FILE = false
 ```
 
 - ENABLED: **false** Enable markup support; set to **true** to enable this renderer.
+- NEED\_POSTPROCESS: **true** set to **true** to replace links / sha1 and etc.
 - FILE\_EXTENSIONS: **\<empty\>** List of file extensions that should be rendered by an external
    command. Multiple extentions needs a comma as splitter.
 - RENDER\_COMMAND: External command to render all matching extensions.
index cc12005d571c0f87d6b8ce205e745380f5220197..1f7ae10c5daa4635fe10ccc27bfc1f121325d3cc 100644 (file)
@@ -297,12 +297,14 @@ test01.xls: application/vnd.ms-excel; charset=binary
 ```ini
 [markup.asciidoc]
 ENABLED = false
+NEED_POSTPROCESS = true
 FILE_EXTENSIONS = .adoc,.asciidoc
 RENDER_COMMAND = "asciidoc --out-file=- -"
 IS_INPUT_FILE = false
 ```
 
 - ENABLED: 是否启用,默认为false。
+- NEED\_POSTPROCESS: **true** 设置为 true 则会替换渲染文件中的内部链接和Commit ID 等。
 - FILE_EXTENSIONS: 关联的文档的扩展名,多个扩展名用都好分隔。
 - RENDER_COMMAND: 工具的命令行命令及参数。
 - IS_INPUT_FILE: 输入方式是最后一个参数为文件路径还是从标准输入读取。
index 430e759eb53237730ef9c1b39611f7ded11f1591..68c89166b5b06472fd9d482d395620d2d3eee09c 100644 (file)
@@ -28,6 +28,9 @@ func (Parser) Name() string {
        return "csv"
 }
 
+// NeedPostProcess implements markup.Parser
+func (Parser) NeedPostProcess() bool { return false }
+
 // Extensions implements markup.Parser
 func (Parser) Extensions() []string {
        return []string{".csv", ".tsv"}
index 7acf9361718a7577b848d7cb0369e3982af8b89c..6e7e59970dbf0cd4bb0f1c04afa9dd96429f1ab3 100644 (file)
@@ -38,6 +38,11 @@ func (p *Parser) Name() string {
        return p.MarkupName
 }
 
+// NeedPostProcess implements markup.Parser
+func (p *Parser) NeedPostProcess() bool {
+       return p.MarkupParser.NeedPostProcess
+}
+
 // Extensions returns the supported extensions of the tool
 func (p *Parser) Extensions() []string {
        return p.FileExtensions
index 93235d77e5afe830783f959a0b880395436b2b8b..5bb0fbd652c8b7aa6e462fc1ce03e1f0b2570586 100644 (file)
@@ -228,6 +228,9 @@ func (Parser) Name() string {
        return MarkupName
 }
 
+// NeedPostProcess implements markup.Parser
+func (Parser) NeedPostProcess() bool { return true }
+
 // Extensions implements markup.Parser
 func (Parser) Extensions() []string {
        return setting.Markdown.FileExtensions
index f8deb2b29b1a2b2d65654e537f03d91af294eb70..bc357577758acd6239bdde04c2f5f404a1f055d7 100644 (file)
@@ -33,6 +33,7 @@ func Init() {
 type Parser interface {
        Name() string // markup format name
        Extensions() []string
+       NeedPostProcess() bool
        Render(rawBytes []byte, urlPrefix string, metas map[string]string, isWiki bool) []byte
 }
 
@@ -82,10 +83,13 @@ func RenderWiki(filename string, rawBytes []byte, urlPrefix string, metas map[st
 
 func render(parser Parser, rawBytes []byte, urlPrefix string, metas map[string]string, isWiki bool) []byte {
        result := parser.Render(rawBytes, urlPrefix, metas, isWiki)
-       // TODO: one day the error should be returned.
-       result, err := PostProcess(result, urlPrefix, metas, isWiki)
-       if err != nil {
-               log.Error("PostProcess: %v", err)
+       if parser.NeedPostProcess() {
+               var err error
+               // TODO: one day the error should be returned.
+               result, err = PostProcess(result, urlPrefix, metas, isWiki)
+               if err != nil {
+                       log.Error("PostProcess: %v", err)
+               }
        }
        return SanitizeBytes(result)
 }
index ddd445aba2ad4c1a48a4d5a05b93cc06aa4e6f6f..b445b76956866d9b292bd0fc803a75ebc2545ea1 100644 (file)
@@ -30,6 +30,9 @@ func (Parser) Name() string {
        return "orgmode"
 }
 
+// NeedPostProcess implements markup.Parser
+func (Parser) NeedPostProcess() bool { return true }
+
 // Extensions implements markup.Parser
 func (Parser) Extensions() []string {
        return []string{".org"}
index 1dd76243e6d6ed5386ed23b724b1a3b1bad014a7..36cba68262d5259814a7f76c83119e6e7c803941 100644 (file)
@@ -21,11 +21,12 @@ var (
 
 // MarkupParser defines the external parser configured in ini
 type MarkupParser struct {
-       Enabled        bool
-       MarkupName     string
-       Command        string
-       FileExtensions []string
-       IsInputFile    bool
+       Enabled         bool
+       MarkupName      string
+       Command         string
+       FileExtensions  []string
+       IsInputFile     bool
+       NeedPostProcess bool
 }
 
 // MarkupSanitizerRule defines the policy for whitelisting attributes on
@@ -124,10 +125,11 @@ func newMarkupRenderer(name string, sec *ini.Section) {
        }
 
        ExternalMarkupParsers = append(ExternalMarkupParsers, MarkupParser{
-               Enabled:        sec.Key("ENABLED").MustBool(false),
-               MarkupName:     name,
-               FileExtensions: exts,
-               Command:        command,
-               IsInputFile:    sec.Key("IS_INPUT_FILE").MustBool(false),
+               Enabled:         sec.Key("ENABLED").MustBool(false),
+               MarkupName:      name,
+               FileExtensions:  exts,
+               Command:         command,
+               IsInputFile:     sec.Key("IS_INPUT_FILE").MustBool(false),
+               NeedPostProcess: sec.Key("NEED_POSTPROCESS").MustBool(true),
        })
 }