shithub: hugo

Download patch

ref: d4d9da9f3a6358e8325d0c3f973a5842ef3be039
parent: cb00917af69bfd6fbe79dcf094956b6af33669e5
author: Noah Campbell <[email protected]>
date: Wed Sep 4 12:57:17 EDT 2013

Remove page module dependence on opening files

The site is responsible for reading files, page only operates on
buffers.

--- a/hugolib/benchmark_test.go
+++ b/hugolib/benchmark_test.go
@@ -16,9 +16,3 @@
 		p = p
 	}
 }
-
-func BenchmarkNewPage(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		NewPage("redis.cn.md")
-	}
-}
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -25,7 +25,6 @@
 	"github.com/theplant/blackfriday"
 	"html/template"
 	"io"
-	"io/ioutil"
 	"launchpad.net/goyaml"
 	"os"
 	"path/filepath"
@@ -91,7 +90,7 @@
 
 // TODO abstract further to support loading from more
 // than just files on disk. Should load reader (file, []byte)
-func NewPage(filename string) *Page {
+func newPage(filename string) *Page {
 	page := Page{contentType: "",
 		File:   File{FileName: filename, Extension: "html"},
 		Node:   Node{Keywords: make([]string, 10, 30)},
@@ -134,15 +133,6 @@
 	return output
 }
 
-func (page *Page) Initalize() error {
-	err := page.buildPageFromFile()
-	if err != nil {
-		return err
-	}
-	page.analyzePage()
-	return nil
-}
-
 func (p *Page) guessSection() {
 	if p.Section == "" {
 		x := strings.Split(p.FileName, string(os.PathSeparator))
@@ -186,7 +176,7 @@
 		return nil, errors.New("Zero length page name")
 	}
 
-	p := NewPage(name)
+	p := newPage(name)
 
 	if err = p.parse(buf); err != nil {
 		return
@@ -360,7 +350,7 @@
 func (page *Page) parseFrontMatter(data *bufio.Reader) (err error) {
 
 	if err = checkEmpty(data); err != nil {
-		return
+		return fmt.Errorf("%s: %s", page.FileName, err)
 	}
 
 	var mark rune
@@ -485,22 +475,6 @@
 	buffer := new(bytes.Buffer)
 	p.Tmpl.ExecuteTemplate(buffer, l, p)
 	return buffer
-}
-
-func (page *Page) readFile() (data []byte, err error) {
-	data, err = ioutil.ReadFile(page.FileName)
-	if err != nil {
-		return nil, err
-	}
-	return data, nil
-}
-
-func (page *Page) buildPageFromFile() error {
-	f, err := os.Open(page.FileName)
-	if err != nil {
-		return err
-	}
-	return page.parse(bufio.NewReader(f))
 }
 
 func (page *Page) parse(reader io.Reader) error {
--- a/hugolib/page_test.go
+++ b/hugolib/page_test.go
@@ -133,7 +133,7 @@
 		t.Fatalf("Expected ReadFrom to return an error when an empty buffer is passed.")
 	}
 
-	checkError(t, err, "unable to locate front matter")
+	checkError(t, err, "test: unable to locate front matter")
 }
 
 func checkPageTitle(t *testing.T, page *Page, title string) {
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -131,7 +131,9 @@
 	s.initialize()
 	s.prepTemplates()
 	s.timerStep("initialize & template prep")
-	s.CreatePages()
+	if err = s.CreatePages(); err != nil {
+		return err
+	}
 	s.setupPrevNext()
 	s.timerStep("import pages")
 	if err = s.BuildSiteMeta(); err != nil {
@@ -272,13 +274,19 @@
 	}
 }
 
-func (s *Site) CreatePages() {
+func (s *Site) CreatePages() (err error) {
 	for _, fileName := range s.Files {
-		page := NewPage(fileName)
+		f, err := os.Open(fileName)	
+		if err != nil {
+			return err
+		}
+		page, err := ReadFrom(f, fileName)
+		if err != nil {
+			return err
+		}
 		page.Site = s.Info
 		page.Tmpl = s.Tmpl
 		_ = s.setUrlPath(page)
-		page.Initalize()
 		s.setOutFile(page)
 		if s.Config.BuildDrafts || !page.Draft {
 			s.Pages = append(s.Pages, page)
@@ -286,6 +294,7 @@
 	}
 
 	s.Pages.Sort()
+	return
 }
 
 func (s *Site) setupPrevNext() {