From b60aa1a504f3fbf9c19a6bf2030fdc7a04ab4a5a Mon Sep 17 00:00:00 2001 From: Vasyl Solovei Date: Fri, 21 Jul 2017 12:07:56 +0300 Subject: [PATCH] helpers: Add --trace to asciidoctor args This will help to understand and fix errors by seeing stacktrace of an error. See #3714 --- helpers/content.go | 44 +++++++++++++++++++++++++++++---------- hugolib/page_test.go | 2 +- hugolib/shortcode_test.go | 2 +- 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/helpers/content.go b/helpers/content.go index 6db35263f..350d1a685 100644 --- a/helpers/content.go +++ b/helpers/content.go @@ -544,36 +544,58 @@ func truncateWordsToWholeSentenceOld(content string, max int) (string, bool) { } func getAsciidocExecPath() string { - path, err := exec.LookPath("asciidoctor") + path, err := exec.LookPath("asciidoc") if err != nil { - path, err = exec.LookPath("asciidoc") - if err != nil { - return "" - } + return "" } return path } -// HasAsciidoc returns whether Asciidoctor or Asciidoc is installed on this computer. +// HasAsciidoc returns whether Asciidoc is installed on this computer. func HasAsciidoc() bool { return getAsciidocExecPath() != "" } +func getAsciidoctorExecPath() string { + path, err := exec.LookPath("asciidoctor") + if err != nil { + return "" + } + return path +} + +// HasAsciidoctor returns whether Asciidoctor is installed on this computer. +func HasAsciidoctor() bool { + return getAsciidoctorExecPath() != "" +} + // getAsciidocContent calls asciidoctor or asciidoc as an external helper // to convert AsciiDoc content to HTML. func getAsciidocContent(ctx *RenderingContext) []byte { content := ctx.Content cleanContent := bytes.Replace(content, SummaryDivider, []byte(""), 1) - path := getAsciidocExecPath() + var isAsciidoctor bool + path := getAsciidoctorExecPath() if path == "" { - jww.ERROR.Println("asciidoctor / asciidoc not found in $PATH: Please install.\n", - " Leaving AsciiDoc content unrendered.") - return content + path = getAsciidocExecPath() + if path == "" { + jww.ERROR.Println("asciidoctor / asciidoc not found in $PATH: Please install.\n", + " Leaving AsciiDoc content unrendered.") + return content + } + } else { + isAsciidoctor = true } jww.INFO.Println("Rendering", ctx.DocumentName, "with", path, "...") - cmd := exec.Command(path, "--no-header-footer", "--safe", "-") + args := []string{"--no-header-footer", "--safe"} + if isAsciidoctor { + // asciidoctor-specific arg to show stack traces on errors + args = append(args, "--trace") + } + args = append(args, "-") + cmd := exec.Command(path, args...) cmd.Stdin = bytes.NewReader(cleanContent) var out, cmderr bytes.Buffer cmd.Stdout = &out diff --git a/hugolib/page_test.go b/hugolib/page_test.go index 88724cd1c..5c5c06b07 100644 --- a/hugolib/page_test.go +++ b/hugolib/page_test.go @@ -561,7 +561,7 @@ func testAllMarkdownEnginesForPages(t *testing.T, }{ {"md", func() bool { return true }}, {"mmark", func() bool { return true }}, - {"ad", func() bool { return helpers.HasAsciidoc() }}, + {"ad", func() bool { return helpers.HasAsciidoctor() || helpers.HasAsciidoc() }}, // TODO(bep) figure a way to include this without too much work.{"html", func() bool { return true }}, {"rst", func() bool { return helpers.HasRst() }}, } diff --git a/hugolib/shortcode_test.go b/hugolib/shortcode_test.go index 3d355f947..485ae4b69 100644 --- a/hugolib/shortcode_test.go +++ b/hugolib/shortcode_test.go @@ -555,7 +555,7 @@ tags: th := testHelper{s.Cfg, s.Fs, t} for _, test := range tests { - if strings.HasSuffix(test.contentPath, ".ad") && !helpers.HasAsciidoc() { + if strings.HasSuffix(test.contentPath, ".ad") && !helpers.HasAsciidoctor() && !helpers.HasAsciidoc() { fmt.Println("Skip Asciidoc test case as no Asciidoc present.") continue } else if strings.HasSuffix(test.contentPath, ".rst") && !helpers.HasRst() {