Add NeedPostProcess for Parser interface to improve performance of csv render (#15153)
This commit is contained in:
		
							parent
							
								
									bf3e584de2
								
							
						
					
					
						commit
						66f0fd0959
					
				
					 8 changed files with 38 additions and 14 deletions
				
			
		|  | @ -831,12 +831,14 @@ Gitea can support Markup using external tools. The example below will add a mark | ||||||
| ```ini | ```ini | ||||||
| [markup.asciidoc] | [markup.asciidoc] | ||||||
| ENABLED = true | ENABLED = true | ||||||
|  | NEED_POSTPROCESS = true | ||||||
| FILE_EXTENSIONS = .adoc,.asciidoc | FILE_EXTENSIONS = .adoc,.asciidoc | ||||||
| RENDER_COMMAND = "asciidoc --out-file=- -" | RENDER_COMMAND = "asciidoc --out-file=- -" | ||||||
| IS_INPUT_FILE = false | IS_INPUT_FILE = false | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| - ENABLED: **false** Enable markup support; set to **true** to enable this renderer. | - 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 | - FILE\_EXTENSIONS: **\<empty\>** List of file extensions that should be rendered by an external | ||||||
|    command. Multiple extentions needs a comma as splitter. |    command. Multiple extentions needs a comma as splitter. | ||||||
| - RENDER\_COMMAND: External command to render all matching extensions. | - RENDER\_COMMAND: External command to render all matching extensions. | ||||||
|  |  | ||||||
|  | @ -297,12 +297,14 @@ test01.xls: application/vnd.ms-excel; charset=binary | ||||||
| ```ini | ```ini | ||||||
| [markup.asciidoc] | [markup.asciidoc] | ||||||
| ENABLED = false | ENABLED = false | ||||||
|  | NEED_POSTPROCESS = true | ||||||
| FILE_EXTENSIONS = .adoc,.asciidoc | FILE_EXTENSIONS = .adoc,.asciidoc | ||||||
| RENDER_COMMAND = "asciidoc --out-file=- -" | RENDER_COMMAND = "asciidoc --out-file=- -" | ||||||
| IS_INPUT_FILE = false | IS_INPUT_FILE = false | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| - ENABLED: 是否启用,默认为false。 | - ENABLED: 是否启用,默认为false。 | ||||||
|  | - NEED\_POSTPROCESS: **true** 设置为 true 则会替换渲染文件中的内部链接和Commit ID 等。 | ||||||
| - FILE_EXTENSIONS: 关联的文档的扩展名,多个扩展名用都好分隔。 | - FILE_EXTENSIONS: 关联的文档的扩展名,多个扩展名用都好分隔。 | ||||||
| - RENDER_COMMAND: 工具的命令行命令及参数。 | - RENDER_COMMAND: 工具的命令行命令及参数。 | ||||||
| - IS_INPUT_FILE: 输入方式是最后一个参数为文件路径还是从标准输入读取。 | - IS_INPUT_FILE: 输入方式是最后一个参数为文件路径还是从标准输入读取。 | ||||||
|  |  | ||||||
|  | @ -28,6 +28,9 @@ func (Parser) Name() string { | ||||||
| 	return "csv" | 	return "csv" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // NeedPostProcess implements markup.Parser
 | ||||||
|  | func (Parser) NeedPostProcess() bool { return false } | ||||||
|  | 
 | ||||||
| // Extensions implements markup.Parser
 | // Extensions implements markup.Parser
 | ||||||
| func (Parser) Extensions() []string { | func (Parser) Extensions() []string { | ||||||
| 	return []string{".csv", ".tsv"} | 	return []string{".csv", ".tsv"} | ||||||
|  |  | ||||||
							
								
								
									
										5
									
								
								modules/markup/external/external.go
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								modules/markup/external/external.go
									
									
									
									
										vendored
									
									
								
							|  | @ -38,6 +38,11 @@ func (p *Parser) Name() string { | ||||||
| 	return p.MarkupName | 	return p.MarkupName | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // NeedPostProcess implements markup.Parser
 | ||||||
|  | func (p *Parser) NeedPostProcess() bool { | ||||||
|  | 	return p.MarkupParser.NeedPostProcess | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // Extensions returns the supported extensions of the tool
 | // Extensions returns the supported extensions of the tool
 | ||||||
| func (p *Parser) Extensions() []string { | func (p *Parser) Extensions() []string { | ||||||
| 	return p.FileExtensions | 	return p.FileExtensions | ||||||
|  |  | ||||||
|  | @ -228,6 +228,9 @@ func (Parser) Name() string { | ||||||
| 	return MarkupName | 	return MarkupName | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // NeedPostProcess implements markup.Parser
 | ||||||
|  | func (Parser) NeedPostProcess() bool { return true } | ||||||
|  | 
 | ||||||
| // Extensions implements markup.Parser
 | // Extensions implements markup.Parser
 | ||||||
| func (Parser) Extensions() []string { | func (Parser) Extensions() []string { | ||||||
| 	return setting.Markdown.FileExtensions | 	return setting.Markdown.FileExtensions | ||||||
|  |  | ||||||
|  | @ -33,6 +33,7 @@ func Init() { | ||||||
| type Parser interface { | type Parser interface { | ||||||
| 	Name() string // markup format name
 | 	Name() string // markup format name
 | ||||||
| 	Extensions() []string | 	Extensions() []string | ||||||
|  | 	NeedPostProcess() bool | ||||||
| 	Render(rawBytes []byte, urlPrefix string, metas map[string]string, isWiki bool) []byte | 	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 { | func render(parser Parser, rawBytes []byte, urlPrefix string, metas map[string]string, isWiki bool) []byte { | ||||||
| 	result := parser.Render(rawBytes, urlPrefix, metas, isWiki) | 	result := parser.Render(rawBytes, urlPrefix, metas, isWiki) | ||||||
| 	// TODO: one day the error should be returned.
 | 	if parser.NeedPostProcess() { | ||||||
| 	result, err := PostProcess(result, urlPrefix, metas, isWiki) | 		var err error | ||||||
| 	if err != nil { | 		// TODO: one day the error should be returned.
 | ||||||
| 		log.Error("PostProcess: %v", err) | 		result, err = PostProcess(result, urlPrefix, metas, isWiki) | ||||||
|  | 		if err != nil { | ||||||
|  | 			log.Error("PostProcess: %v", err) | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 	return SanitizeBytes(result) | 	return SanitizeBytes(result) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -30,6 +30,9 @@ func (Parser) Name() string { | ||||||
| 	return "orgmode" | 	return "orgmode" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // NeedPostProcess implements markup.Parser
 | ||||||
|  | func (Parser) NeedPostProcess() bool { return true } | ||||||
|  | 
 | ||||||
| // Extensions implements markup.Parser
 | // Extensions implements markup.Parser
 | ||||||
| func (Parser) Extensions() []string { | func (Parser) Extensions() []string { | ||||||
| 	return []string{".org"} | 	return []string{".org"} | ||||||
|  |  | ||||||
|  | @ -21,11 +21,12 @@ var ( | ||||||
| 
 | 
 | ||||||
| // MarkupParser defines the external parser configured in ini
 | // MarkupParser defines the external parser configured in ini
 | ||||||
| type MarkupParser struct { | type MarkupParser struct { | ||||||
| 	Enabled        bool | 	Enabled         bool | ||||||
| 	MarkupName     string | 	MarkupName      string | ||||||
| 	Command        string | 	Command         string | ||||||
| 	FileExtensions []string | 	FileExtensions  []string | ||||||
| 	IsInputFile    bool | 	IsInputFile     bool | ||||||
|  | 	NeedPostProcess bool | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // MarkupSanitizerRule defines the policy for whitelisting attributes on
 | // MarkupSanitizerRule defines the policy for whitelisting attributes on
 | ||||||
|  | @ -124,10 +125,11 @@ func newMarkupRenderer(name string, sec *ini.Section) { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	ExternalMarkupParsers = append(ExternalMarkupParsers, MarkupParser{ | 	ExternalMarkupParsers = append(ExternalMarkupParsers, MarkupParser{ | ||||||
| 		Enabled:        sec.Key("ENABLED").MustBool(false), | 		Enabled:         sec.Key("ENABLED").MustBool(false), | ||||||
| 		MarkupName:     name, | 		MarkupName:      name, | ||||||
| 		FileExtensions: exts, | 		FileExtensions:  exts, | ||||||
| 		Command:        command, | 		Command:         command, | ||||||
| 		IsInputFile:    sec.Key("IS_INPUT_FILE").MustBool(false), | 		IsInputFile:     sec.Key("IS_INPUT_FILE").MustBool(false), | ||||||
|  | 		NeedPostProcess: sec.Key("NEED_POSTPROCESS").MustBool(true), | ||||||
| 	}) | 	}) | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue