From 09a0af94f54a0dbc8900c95ce5c83ee514d8ca68 Mon Sep 17 00:00:00 2001 From: David Kassa Date: Sun, 1 Jan 2017 16:16:58 -0600 Subject: [PATCH] Fix Appveyor Windows build and GitInfo path issue on Windows --- appveyor.yml | 29 +++++++++++++++++++++++++++++ helpers/content.go | 28 +++++++++++++++++++++++++--- helpers/general.go | 5 +++++ helpers/pygments.go | 2 +- hugolib/gitinfo.go | 2 +- hugolib/shortcode_test.go | 2 +- 6 files changed, 62 insertions(+), 6 deletions(-) create mode 100644 appveyor.yml 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("\n")) + if bodyStart < 0 { + bodyStart = -7 //compensate for length + } + bodyEnd := bytes.Index(result, []byte("\n")) + 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, "
") {
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)
 	}
 }