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() {