diff options
author | David Kassa <david.kassa@gmail.com> | 2017-01-01 16:16:58 -0600 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2017-01-01 23:16:58 +0100 |
commit | 09a0af94f54a0dbc8900c95ce5c83ee514d8ca68 (patch) | |
tree | 671d5351c62f998fbc2e99160463be7a0bb2beec | |
parent | 6e0f326b9dd3cf60bf87c99c7957c519d0ddd9ef (diff) |
Fix Appveyor Windows build and GitInfo path issue on Windows
-rw-r--r-- | appveyor.yml | 29 | ||||
-rw-r--r-- | helpers/content.go | 28 | ||||
-rw-r--r-- | helpers/general.go | 5 | ||||
-rw-r--r-- | helpers/pygments.go | 2 | ||||
-rw-r--r-- | hugolib/gitinfo.go | 2 | ||||
-rw-r--r-- | hugolib/shortcode_test.go | 2 |
6 files changed, 62 insertions, 6 deletions
diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 000000000..1a110265f --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,29 @@ +image: WMF 5 +clone_folder: c:\GOPATH\src\github.com\spf13\hugo +init: +- cmd: >- + set PATH=%PATH%;C:\MinGW\bin;C:\GOPATH\bin + + copy c:\MinGW\bin\mingw32-make.exe c:\MinGW\bin\make.exe +environment: + GOPATH: c:\GOPATH +install: +- cmd: >- + gem install asciidoctor + + pip install docutils +build_script: +- cmd: make govendor +test_script: +- cmd: >- + make check + + REM Test 64-bit alignment on 32-bit builds + + set "GOARCH=386" & make test & set GOARCH= + + go build -race + + hugo -s docs/ + + hugo --renderToMemory -s docs/ diff --git a/helpers/content.go b/helpers/content.go index eb8987b33..9b245972e 100644 --- a/helpers/content.go +++ b/helpers/content.go @@ -571,7 +571,7 @@ func getAsciidocContent(ctx *RenderingContext) []byte { jww.ERROR.Printf("%s rendering %s: %v", path, ctx.DocumentName, err) } - return out.Bytes() + return normalizeExternalHelperLineFeeds(out.Bytes()) } // HasRst returns whether rst2html is installed on this computer. @@ -590,12 +590,24 @@ func getRstExecPath() string { return path } +func getPythonExecPath() string { + path, err := exec.LookPath("python") + if err != nil { + path, err = exec.LookPath("python.exe") + if err != nil { + return "" + } + } + return path +} + // getRstContent calls the Python script rst2html as an external helper // to convert reStructuredText content to HTML. func getRstContent(ctx *RenderingContext) []byte { content := ctx.Content cleanContent := bytes.Replace(content, SummaryDivider, []byte(""), 1) + python := getPythonExecPath() path := getRstExecPath() if path == "" { @@ -606,7 +618,7 @@ func getRstContent(ctx *RenderingContext) []byte { } jww.INFO.Println("Rendering", ctx.DocumentName, "with", path, "...") - cmd := exec.Command(path, "--leave-comments") + cmd := exec.Command(python, path, "--leave-comments") cmd.Stdin = bytes.NewReader(cleanContent) var out, cmderr bytes.Buffer cmd.Stdout = &out @@ -624,11 +636,21 @@ func getRstContent(ctx *RenderingContext) []byte { jww.ERROR.Printf("%s rendering %s: %v", path, ctx.DocumentName, err) } - result := out.Bytes() + result := normalizeExternalHelperLineFeeds(out.Bytes()) // TODO(bep) check if rst2html has a body only option. bodyStart := bytes.Index(result, []byte("<body>\n")) + if bodyStart < 0 { + bodyStart = -7 //compensate for length + } + bodyEnd := bytes.Index(result, []byte("\n</body>")) + if bodyEnd < 0 || bodyEnd >= len(result) { + bodyEnd = len(result) - 1 + if bodyEnd < 0 { + bodyEnd = 0 + } + } return result[bodyStart+7 : bodyEnd] } diff --git a/helpers/general.go b/helpers/general.go index 1ea08eb25..740c05f5c 100644 --- a/helpers/general.go +++ b/helpers/general.go @@ -38,6 +38,11 @@ import ( // FilePathSeparator as defined by os.Separator. const FilePathSeparator = string(filepath.Separator) +// Strips carriage returns from third-party / external processes (useful for Windows) +func normalizeExternalHelperLineFeeds(content []byte) []byte { + return bytes.Replace(content, []byte("\r"), []byte(""), -1) +} + // FindAvailablePort returns an available and valid TCP port. func FindAvailablePort() (*net.TCPAddr, error) { l, err := net.Listen("tcp", ":0") diff --git a/helpers/pygments.go b/helpers/pygments.go index 7903678b6..5e9812d72 100644 --- a/helpers/pygments.go +++ b/helpers/pygments.go @@ -112,7 +112,7 @@ func Highlight(code, lang, optsStr string) string { return code } - str := out.String() + str := string(normalizeExternalHelperLineFeeds([]byte(out.String()))) // inject code tag into Pygments output if lang != "" && strings.Contains(str, "<pre>") { diff --git a/hugolib/gitinfo.go b/hugolib/gitinfo.go index b2119048e..2893db06f 100644 --- a/hugolib/gitinfo.go +++ b/hugolib/gitinfo.go @@ -57,7 +57,7 @@ func (h *HugoSites) assembleGitInfo() { continue } // Git normalizes file paths on this form: - filename := path.Join(contentRoot, contentDir, filepath.ToSlash(p.Path())) + filename := path.Join(filepath.ToSlash(contentRoot), contentDir, filepath.ToSlash(p.Path())) g, ok := gitMap[filename] if !ok { jww.ERROR.Printf("Failed to find GitInfo for %q", filename) diff --git a/hugolib/shortcode_test.go b/hugolib/shortcode_test.go index ec3acfb72..536c06541 100644 --- a/hugolib/shortcode_test.go +++ b/hugolib/shortcode_test.go @@ -324,7 +324,7 @@ void do(); } if !matched { - t.Error("Hightlight mismatch, got\n", output) + t.Errorf("Hightlight mismatch, got (escaped to see invisible chars)\n%+q", output) } } |