From cef0f12c51cee9edeb636fd2174f8d4eb00ea955 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 21 Nov 2018 06:11:21 +0800 Subject: [PATCH] support envs on external render commands (#5278) --- modules/markup/external/external.go | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/modules/markup/external/external.go b/modules/markup/external/external.go index 73bf7a327..5963a06d3 100644 --- a/modules/markup/external/external.go +++ b/modules/markup/external/external.go @@ -10,6 +10,7 @@ import ( "io/ioutil" "os" "os/exec" + "runtime" "strings" "code.gitea.io/gitea/modules/log" @@ -41,13 +42,24 @@ func (p *Parser) Extensions() []string { return p.FileExtensions } +func envMark(envName string) string { + if runtime.GOOS == "windows" { + return "%" + envName + "%" + } + return "$" + envName +} + // Render renders the data of the document to HTML via the external tool. func (p *Parser) Render(rawBytes []byte, urlPrefix string, metas map[string]string, isWiki bool) []byte { var ( - bs []byte - buf = bytes.NewBuffer(bs) - rd = bytes.NewReader(rawBytes) - commands = strings.Fields(p.Command) + bs []byte + buf = bytes.NewBuffer(bs) + rd = bytes.NewReader(rawBytes) + urlRawPrefix = strings.Replace(urlPrefix, "/src/", "/raw/", 1) + + command = strings.NewReplacer(envMark("GITEA_PREFIX_SRC"), urlPrefix, + envMark("GITEA_PREFIX_RAW"), urlRawPrefix).Replace(p.Command) + commands = strings.Fields(command) args = commands[1:] ) @@ -79,7 +91,7 @@ func (p *Parser) Render(rawBytes []byte, urlPrefix string, metas map[string]stri cmd.Env = append( os.Environ(), "GITEA_PREFIX_SRC="+urlPrefix, - "GITEA_PREFIX_RAW="+strings.Replace(urlPrefix, "/src/", "/raw/", 1), + "GITEA_PREFIX_RAW="+urlRawPrefix, ) if !p.IsInputFile { cmd.Stdin = rd