Buffers instead of pipes - hugo - [fork] hugo port for 9front
(HTM) git clone git@git.drkhsh.at/hugo.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Submodules
(DIR) README
(DIR) LICENSE
---
(DIR) commit 1fbcaf927920f7e94eef42f152722c957a7922cb
(DIR) parent 226bc8f59fc9bfeef44f4b9df657d8ed05502560
(HTM) Author: spf13 <steve.francia@gmail.com>
Date: Tue, 5 Nov 2013 00:28:08 -0500
Buffers instead of pipes
Diffstat:
M hugolib/site.go | 73 ++++++++++++++++---------------
1 file changed, 37 insertions(+), 36 deletions(-)
---
(DIR) diff --git a/hugolib/site.go b/hugolib/site.go
@@ -31,6 +31,8 @@ import (
"time"
)
+var _ = transform.AbsURL
+
var DefaultTimer *nitro.B
func MakePermalink(base *url.URL, path *url.URL) *url.URL {
@@ -55,19 +57,19 @@ func MakePermalink(base *url.URL, path *url.URL) *url.URL {
//
// 5. The entire collection of files is written to disk.
type Site struct {
- Config Config
- Pages Pages
- Tmpl bundle.Template
- Indexes IndexList
- Source source.Input
- Sections Index
- Info SiteInfo
- Shortcodes map[string]ShortcodeFunc
- timer *nitro.B
- Target target.Output
- Alias target.AliasPublisher
- Completed chan bool
- RunMode runmode
+ Config Config
+ Pages Pages
+ Tmpl bundle.Template
+ Indexes IndexList
+ Source source.Input
+ Sections Index
+ Info SiteInfo
+ Shortcodes map[string]ShortcodeFunc
+ timer *nitro.B
+ Target target.Output
+ Alias target.AliasPublisher
+ Completed chan bool
+ RunMode runmode
}
type SiteInfo struct {
@@ -167,7 +169,6 @@ func (s *Site) Render() (err error) {
s.timerStep("render and write aliases")
s.ProcessShortcodes()
s.timerStep("render shortcodes")
- s.timerStep("absolute URLify")
if err = s.RenderIndexes(); err != nil {
return
}
@@ -580,35 +581,35 @@ func (s *Site) render(d interface{}, out string, layouts ...string) (err error)
section, _ = page.RelPermalink()
}
-
absURL, err := transform.AbsURL(s.Config.BaseUrl)
if err != nil {
return
}
transformer := transform.NewChain(
- append(absURL, transform.NavActive(section, "hugo-nav")...)...
+ append(absURL, transform.NavActive(section, "hugo-nav")...)...,
)
- renderReader, renderWriter := io.Pipe()
- go func() {
- err = s.renderThing(d, layout, renderWriter)
- if err != nil {
- // Behavior here should be dependent on if running in server or watch mode.
- fmt.Println(fmt.Errorf("Rendering error: %v", err))
- if !s.Running() {
- os.Exit(-1)
- }
- }
- }()
+ var RenderBuffer *bytes.Buffer
- trReader, trWriter := io.Pipe()
- go func() {
- transformer.Apply(trWriter, renderReader)
- trWriter.Close()
- }()
+ if strings.HasSuffix(out, ".xml") {
+ RenderBuffer = s.NewXMLBuffer()
+ } else {
+ RenderBuffer = new(bytes.Buffer)
+ }
+
+ err = s.renderThing(d, layout, RenderBuffer)
+ if err != nil {
+ // Behavior here should be dependent on if running in server or watch mode.
+ fmt.Println(fmt.Errorf("Rendering error: %v", err))
+ if !s.Running() {
+ os.Exit(-1)
+ }
+ }
- return s.WritePublic(out, trReader)
+ var outBuffer = new(bytes.Buffer)
+ transformer.Apply(outBuffer, RenderBuffer)
+ return s.WritePublic(out, outBuffer)
}
func (s *Site) findFirstLayout(layouts ...string) (layout string) {
@@ -620,16 +621,16 @@ func (s *Site) findFirstLayout(layouts ...string) (layout string) {
return ""
}
-func (s *Site) renderThing(d interface{}, layout string, w io.WriteCloser) error {
+func (s *Site) renderThing(d interface{}, layout string, w io.Writer) error {
// If the template doesn't exist, then return, but leave the Writer open
if s.Tmpl.Lookup(layout) == nil {
return fmt.Errorf("Layout not found: %s", layout)
}
- defer w.Close()
+ //defer w.Close()
return s.Tmpl.ExecuteTemplate(w, layout, d)
}
-func (s *Site) whyNewXMLBuffer() *bytes.Buffer {
+func (s *Site) NewXMLBuffer() *bytes.Buffer {
header := "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>\n"
return bytes.NewBufferString(header)
}