Add page context to error logging in rendering

Add logging of the errors/warnings which rst2html outputs to its stderr
stream when rendering rst documents. Note that rst2html outputs warnings
and errors to stderr but it also adds them to the generated html. ->
hugo logs everything in stderr as error.

Add / complete adding page context (path to file being rendered) to
anything logged by getRstContent and getAsciidocContent.

See #2570
This commit is contained in:
choeppler 2016-10-19 15:22:40 +02:00 committed by Bjørn Erik Pedersen
parent 67df33d83f
commit ddf2a3407a

View file

@ -395,7 +395,7 @@ func RenderBytes(ctx *RenderingContext) []byte {
case "mmark": case "mmark":
return mmarkRender(ctx) return mmarkRender(ctx)
case "rst": case "rst":
return getRstContent(ctx.Content) return getRstContent(ctx)
} }
} }
@ -552,7 +552,7 @@ func getAsciidocContent(ctx *RenderingContext) []byte {
return content return content
} }
jww.INFO.Println("Rendering with", path, "...") jww.INFO.Println("Rendering", ctx.DocumentName, "with", path, "...")
cmd := exec.Command(path, "--no-header-footer", "--safe", "-") cmd := exec.Command(path, "--no-header-footer", "--safe", "-")
cmd.Stdin = bytes.NewReader(cleanContent) cmd.Stdin = bytes.NewReader(cleanContent)
var out, cmderr bytes.Buffer var out, cmderr bytes.Buffer
@ -568,7 +568,7 @@ func getAsciidocContent(ctx *RenderingContext) []byte {
} }
} }
if err != nil { if err != nil {
jww.ERROR.Println(err) jww.ERROR.Printf("%s rendering %s: %v", path, ctx.DocumentName, err)
} }
return out.Bytes() return out.Bytes()
@ -592,7 +592,8 @@ func getRstExecPath() string {
// getRstContent calls the Python script rst2html as an external helper // getRstContent calls the Python script rst2html as an external helper
// to convert reStructuredText content to HTML. // to convert reStructuredText content to HTML.
func getRstContent(content []byte) []byte { func getRstContent(ctx *RenderingContext) []byte {
content := ctx.Content
cleanContent := bytes.Replace(content, SummaryDivider, []byte(""), 1) cleanContent := bytes.Replace(content, SummaryDivider, []byte(""), 1)
path := getRstExecPath() path := getRstExecPath()
@ -604,12 +605,23 @@ func getRstContent(content []byte) []byte {
} }
jww.INFO.Println("Rendering", ctx.DocumentName, "with", path, "...")
cmd := exec.Command(path, "--leave-comments") cmd := exec.Command(path, "--leave-comments")
cmd.Stdin = bytes.NewReader(cleanContent) cmd.Stdin = bytes.NewReader(cleanContent)
var out bytes.Buffer var out, cmderr bytes.Buffer
cmd.Stdout = &out cmd.Stdout = &out
if err := cmd.Run(); err != nil { cmd.Stderr = &cmderr
jww.ERROR.Println(err) err := cmd.Run()
// By default rst2html exits w/ non-zero exit code only if severe, i.e.
// halting errors occurred. -> log stderr output regardless of state of err
for _, item := range strings.Split(string(cmderr.Bytes()), "\n") {
item := strings.TrimSpace(item)
if item != "" {
jww.ERROR.Println(strings.Replace(item, "<stdin>", ctx.DocumentName, 1))
}
}
if err != nil {
jww.ERROR.Printf("%s rendering %s: %v", path, ctx.DocumentName, err)
} }
result := out.Bytes() result := out.Bytes()