ref: 1fbcaf927920f7e94eef42f152722c957a7922cb
parent: 226bc8f59fc9bfeef44f4b9df657d8ed05502560
author: spf13 <steve.francia@gmail.com>
date: Mon Nov 4 19:28:08 EST 2013
Buffers instead of pipes
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -31,6 +31,8 @@
"time"
)
+var _ = transform.AbsURL
+
var DefaultTimer *nitro.B
func MakePermalink(base *url.URL, path *url.URL) *url.URL {@@ -55,19 +57,19 @@
//
// 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 @@
s.timerStep("render and write aliases")s.ProcessShortcodes()
s.timerStep("render shortcodes")- s.timerStep("absolute URLify") if err = s.RenderIndexes(); err != nil {return
}
@@ -580,7 +581,6 @@
section, _ = page.RelPermalink()
}
-
absURL, err := transform.AbsURL(s.Config.BaseUrl)
if err != nil {return
@@ -587,28 +587,29 @@
}
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)
+ }
- return s.WritePublic(out, trReader)
+ 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)
+ }
+ }
+
+ 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 @@
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)
}
--
⑨