Remove page module dependence on opening files
authorNoah Campbell <noahcampbell@gmail.com>
Wed, 4 Sep 2013 23:57:17 +0000 (16:57 -0700)
committerNoah Campbell <noahcampbell@gmail.com>
Thu, 5 Sep 2013 02:36:06 +0000 (19:36 -0700)
The site is responsible for reading files, page only operates on
buffers.

docs/content/extras/indexes/series.md [deleted file]
hugolib/benchmark_test.go
hugolib/page.go
hugolib/page_test.go
hugolib/site.go

diff --git a/docs/content/extras/indexes/series.md b/docs/content/extras/indexes/series.md
deleted file mode 100644 (file)
index e69de29..0000000
index a3408896d6c9d14e24c62aa07830ab5c4878fb43..c9cbcf024315b376f24afc7b656b6f5ccc38732c 100644 (file)
@@ -16,9 +16,3 @@ func BenchmarkParsePage(b *testing.B) {
                p = p
        }
 }
-
-func BenchmarkNewPage(b *testing.B) {
-       for i := 0; i < b.N; i++ {
-               NewPage("redis.cn.md")
-       }
-}
index 5152578d0629dc572853a02cb7aa6f2d73aae3d4..6289fc61cce4c0a2fafec47019068b0015c69de2 100644 (file)
@@ -25,7 +25,6 @@ import (
        "github.com/theplant/blackfriday"
        "html/template"
        "io"
-       "io/ioutil"
        "launchpad.net/goyaml"
        "os"
        "path/filepath"
@@ -91,7 +90,7 @@ func getSummaryString(content []byte) ([]byte, bool) {
 
 // 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 @@ func StripHTML(s string) string {
        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 @@ func ReadFrom(buf io.Reader, name string) (page *Page, err error) {
                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 @@ var ErrMatchingEndingFrontMatterDelimiter = errors.New("unable to match ending f
 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
@@ -487,22 +477,6 @@ func (p *Page) ExecuteTemplate(layout string) *bytes.Buffer {
        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 {
        data := bufio.NewReader(reader)
 
index 4c8968ba9b6b71b20c253c8838cd607e57dc3de6..7acbcedab65ca4a8a72b14ebfe54912802c140f3 100644 (file)
@@ -133,7 +133,7 @@ func TestDegenerateEmptyPage(t *testing.T) {
                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) {
index d7016762c8dc33676529c55fdf97fc3b9c03f959..0eac054b0aeb337699dedd5d3730e840fd3360c5 100644 (file)
@@ -131,7 +131,9 @@ func (s *Site) Process() (err error) {
        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) AbsUrlify() {
        }
 }
 
-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 @@ func (s *Site) CreatePages() {
        }
 
        s.Pages.Sort()
+       return
 }
 
 func (s *Site) setupPrevNext() {