Skip to content

Commit 5b8b712

Browse files
lunnyAbdulrhmnGhanem
authored andcommitted
Add NeedPostProcess for Parser interface to improve performance of csv render (go-gitea#15153)
1 parent 5d2a15e commit 5b8b712

File tree

8 files changed

+38
-14
lines changed

8 files changed

+38
-14
lines changed

docs/content/doc/advanced/config-cheat-sheet.en-us.md

+2
Original file line numberDiff line numberDiff line change
@@ -831,12 +831,14 @@ Gitea can support Markup using external tools. The example below will add a mark
831831
```ini
832832
[markup.asciidoc]
833833
ENABLED = true
834+
NEED_POSTPROCESS = true
834835
FILE_EXTENSIONS = .adoc,.asciidoc
835836
RENDER_COMMAND = "asciidoc --out-file=- -"
836837
IS_INPUT_FILE = false
837838
```
838839

839840
- ENABLED: **false** Enable markup support; set to **true** to enable this renderer.
841+
- NEED\_POSTPROCESS: **true** set to **true** to replace links / sha1 and etc.
840842
- FILE\_EXTENSIONS: **\<empty\>** List of file extensions that should be rendered by an external
841843
command. Multiple extentions needs a comma as splitter.
842844
- RENDER\_COMMAND: External command to render all matching extensions.

docs/content/doc/advanced/config-cheat-sheet.zh-cn.md

+2
Original file line numberDiff line numberDiff line change
@@ -297,12 +297,14 @@ test01.xls: application/vnd.ms-excel; charset=binary
297297
```ini
298298
[markup.asciidoc]
299299
ENABLED = false
300+
NEED_POSTPROCESS = true
300301
FILE_EXTENSIONS = .adoc,.asciidoc
301302
RENDER_COMMAND = "asciidoc --out-file=- -"
302303
IS_INPUT_FILE = false
303304
```
304305

305306
- ENABLED: 是否启用,默认为false。
307+
- NEED\_POSTPROCESS: **true** 设置为 true 则会替换渲染文件中的内部链接和Commit ID 等。
306308
- FILE_EXTENSIONS: 关联的文档的扩展名,多个扩展名用都好分隔。
307309
- RENDER_COMMAND: 工具的命令行命令及参数。
308310
- IS_INPUT_FILE: 输入方式是最后一个参数为文件路径还是从标准输入读取。

modules/markup/csv/csv.go

+3
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ func (Parser) Name() string {
2828
return "csv"
2929
}
3030

31+
// NeedPostProcess implements markup.Parser
32+
func (Parser) NeedPostProcess() bool { return false }
33+
3134
// Extensions implements markup.Parser
3235
func (Parser) Extensions() []string {
3336
return []string{".csv", ".tsv"}

modules/markup/external/external.go

+5
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ func (p *Parser) Name() string {
3838
return p.MarkupName
3939
}
4040

41+
// NeedPostProcess implements markup.Parser
42+
func (p *Parser) NeedPostProcess() bool {
43+
return p.MarkupParser.NeedPostProcess
44+
}
45+
4146
// Extensions returns the supported extensions of the tool
4247
func (p *Parser) Extensions() []string {
4348
return p.FileExtensions

modules/markup/markdown/markdown.go

+3
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,9 @@ func (Parser) Name() string {
228228
return MarkupName
229229
}
230230

231+
// NeedPostProcess implements markup.Parser
232+
func (Parser) NeedPostProcess() bool { return true }
233+
231234
// Extensions implements markup.Parser
232235
func (Parser) Extensions() []string {
233236
return setting.Markdown.FileExtensions

modules/markup/markup.go

+8-4
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ func Init() {
3333
type Parser interface {
3434
Name() string // markup format name
3535
Extensions() []string
36+
NeedPostProcess() bool
3637
Render(rawBytes []byte, urlPrefix string, metas map[string]string, isWiki bool) []byte
3738
}
3839

@@ -82,10 +83,13 @@ func RenderWiki(filename string, rawBytes []byte, urlPrefix string, metas map[st
8283

8384
func render(parser Parser, rawBytes []byte, urlPrefix string, metas map[string]string, isWiki bool) []byte {
8485
result := parser.Render(rawBytes, urlPrefix, metas, isWiki)
85-
// TODO: one day the error should be returned.
86-
result, err := PostProcess(result, urlPrefix, metas, isWiki)
87-
if err != nil {
88-
log.Error("PostProcess: %v", err)
86+
if parser.NeedPostProcess() {
87+
var err error
88+
// TODO: one day the error should be returned.
89+
result, err = PostProcess(result, urlPrefix, metas, isWiki)
90+
if err != nil {
91+
log.Error("PostProcess: %v", err)
92+
}
8993
}
9094
return SanitizeBytes(result)
9195
}

modules/markup/orgmode/orgmode.go

+3
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ func (Parser) Name() string {
3030
return "orgmode"
3131
}
3232

33+
// NeedPostProcess implements markup.Parser
34+
func (Parser) NeedPostProcess() bool { return true }
35+
3336
// Extensions implements markup.Parser
3437
func (Parser) Extensions() []string {
3538
return []string{".org"}

modules/setting/markup.go

+12-10
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,12 @@ var (
2121

2222
// MarkupParser defines the external parser configured in ini
2323
type MarkupParser struct {
24-
Enabled bool
25-
MarkupName string
26-
Command string
27-
FileExtensions []string
28-
IsInputFile bool
24+
Enabled bool
25+
MarkupName string
26+
Command string
27+
FileExtensions []string
28+
IsInputFile bool
29+
NeedPostProcess bool
2930
}
3031

3132
// MarkupSanitizerRule defines the policy for whitelisting attributes on
@@ -124,10 +125,11 @@ func newMarkupRenderer(name string, sec *ini.Section) {
124125
}
125126

126127
ExternalMarkupParsers = append(ExternalMarkupParsers, MarkupParser{
127-
Enabled: sec.Key("ENABLED").MustBool(false),
128-
MarkupName: name,
129-
FileExtensions: exts,
130-
Command: command,
131-
IsInputFile: sec.Key("IS_INPUT_FILE").MustBool(false),
128+
Enabled: sec.Key("ENABLED").MustBool(false),
129+
MarkupName: name,
130+
FileExtensions: exts,
131+
Command: command,
132+
IsInputFile: sec.Key("IS_INPUT_FILE").MustBool(false),
133+
NeedPostProcess: sec.Key("NEED_POSTPROCESS").MustBool(true),
132134
})
133135
}

0 commit comments

Comments
 (0)