shithub: hugo

Download patch

ref: 09a0af94f54a0dbc8900c95ce5c83ee514d8ca68
parent: 6e0f326b9dd3cf60bf87c99c7957c519d0ddd9ef
author: David Kassa <david.kassa@gmail.com>
date: Sun Jan 1 11:16:58 EST 2017

Fix  Appveyor Windows build and GitInfo path issue on Windows


--- /dev/null
+++ b/appveyor.yml
@@ -1,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/
--- a/helpers/content.go
+++ b/helpers/content.go
@@ -571,7 +571,7 @@
 		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,6 +590,17 @@
 	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 {
@@ -596,6 +607,7 @@
 	content := ctx.Content
 	cleanContent := bytes.Replace(content, SummaryDivider, []byte(""), 1)
 
+	python := getPythonExecPath()
 	path := getRstExecPath()
 
 	if path == "" {
@@ -606,7 +618,7 @@
 	}
 
 	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 @@
 		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]
 }
--- a/helpers/general.go
+++ b/helpers/general.go
@@ -38,6 +38,11 @@
 // 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")
--- a/helpers/pygments.go
+++ b/helpers/pygments.go
@@ -112,7 +112,7 @@
 		return code
 	}
 
-	str := out.String()
+	str := string(normalizeExternalHelperLineFeeds([]byte(out.String())))
 
 	// inject code tag into Pygments output
 	if lang != "" && strings.Contains(str, "<pre>") {
--- a/hugolib/gitinfo.go
+++ b/hugolib/gitinfo.go
@@ -57,7 +57,7 @@
 			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)
--- a/hugolib/shortcode_test.go
+++ b/hugolib/shortcode_test.go
@@ -324,7 +324,7 @@
 	}
 
 	if !matched {
-		t.Error("Hightlight mismatch, got\n", output)
+		t.Errorf("Hightlight mismatch, got (escaped to see invisible chars)\n%+q", output)
 	}
 }