shithub: hugo

Download patch

ref: bffe4baf4297b0fd3b46cbaac2cb4e99577fadf1
parent: 52e8c7a0ac76f4aa1fff8ff30a6d5074bd459347
author: Noah Campbell <[email protected]>
date: Fri Sep 20 13:24:25 EDT 2013

Create a TargetPath() method that provides OutFile

Moved the generation of the target path to the page breaking all
dependecies on Site.

--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -52,7 +52,7 @@
 }
 
 type File struct {
-	FileName, OutFile, Extension, Dir string
+	FileName, Extension, Dir string
 }
 
 type PageMeta struct {
@@ -432,3 +432,27 @@
 		page.Summary = template.HTML(getRstContent(summary))
 	}
 }
+
+func (p *Page) TargetPath() (outfile string) {
+
+	// Always use Url if it's specified
+	if len(strings.TrimSpace(p.Url)) > 2 {
+		outfile = strings.TrimSpace(p.Url)
+
+		if strings.HasSuffix(outfile, "/") {
+			outfile = outfile + "index.html"
+		}
+		return
+	}
+
+	if len(strings.TrimSpace(p.Slug)) > 0 {
+		outfile = strings.TrimSpace(p.Slug) + "." + p.Extension
+	} else {
+		// Fall back to filename
+		_, t := path.Split(p.FileName)
+		outfile = replaceExtension(strings.TrimSpace(t), p.Extension)
+	}
+
+	return path.Join(p.Dir, strings.TrimSpace(outfile))
+}
+
--- a/hugolib/planner.go
+++ b/hugolib/planner.go
@@ -27,7 +27,7 @@
 			continue
 		}
 
-		trns, err := s.Target.Translate(p.OutFile)
+		trns, err := s.Target.Translate(p.TargetPath())
 		if err != nil {
 			return err
 		}
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -26,7 +26,6 @@
 	"html/template"
 	"io"
 	"os"
-	"path"
 	"strings"
 	"time"
 )
@@ -265,9 +264,6 @@
 		page.Tmpl = s.Tmpl
 		page.Section = file.Section
 		page.Dir = file.Dir
-		if err = s.setUrlPath(page); err != nil {
-			return err
-		}
 		if s.Config.BuildDrafts || !page.Draft {
 			s.Pages = append(s.Pages, page)
 		}
@@ -277,34 +273,6 @@
 	return
 }
 
-// Set p.Section and p.OutFile relying on p.FileName as the source.
-// Filename is broken apart for a "Section" which basically equates to
-// the folder the file exists in.
-func (s *Site) setUrlPath(p *Page) (err error) {
-
-	// Always use Url if it's specified
-	if len(strings.TrimSpace(p.Url)) > 2 {
-		p.OutFile = strings.TrimSpace(p.Url)
-
-		if strings.HasSuffix(p.OutFile, "/") {
-			p.OutFile = p.OutFile + "index.html"
-		}
-		return
-	}
-
-	var outfile string
-	if len(strings.TrimSpace(p.Slug)) > 0 {
-		outfile = strings.TrimSpace(p.Slug) + "." + p.Extension
-	} else {
-		// Fall back to filename
-		_, t := path.Split(p.FileName)
-		outfile = replaceExtension(strings.TrimSpace(t), p.Extension)
-	}
-
-	p.OutFile = p.Dir + "/" + strings.TrimSpace(outfile)
-	return
-}
-
 func (s *Site) BuildSiteMeta() (err error) {
 	s.Indexes = make(IndexList)
 	s.Sections = make(Index)
@@ -389,7 +357,7 @@
 		var layout string
 
 		if !p.IsRenderable() {
-			layout = "__" + p.FileName
+			layout = "__" + p.TargetPath()
 			_, err := s.Tmpl.New(layout).Parse(string(p.Content))
 			if err != nil {
 				return err
@@ -402,7 +370,7 @@
 		if err != nil {
 			return err
 		}
-		err = s.WritePublic(p.OutFile, content)
+		err = s.WritePublic(p.TargetPath(), content)
 		if err != nil {
 			return err
 		}
@@ -514,6 +482,8 @@
 }
 
 func (s *Site) RenderHomePage() error {
+	return nil
+
 	n := s.NewNode()
 	n.Title = n.Site.Title
 	n.Url = helpers.Urlize(string(n.Site.BaseUrl))
--- a/hugolib/site_test.go
+++ b/hugolib/site_test.go
@@ -158,7 +158,7 @@
 	}
 }
 
-func TestSetOutFile(t *testing.T) {
+func TestTargetPath(t *testing.T) {
 	tests := []struct {
 		doc             string
 		content         string
@@ -175,19 +175,15 @@
 		return
 	}
 	for _, test := range tests {
-		var err error
 		s := &Site{
 			Config: Config{ContentDir: "content"},
 		}
 		p := pageMust(ReadFrom(strings.NewReader(test.content), s.Config.GetAbsPath(test.doc)))
-		if err = s.setUrlPath(p); err != nil {
-			t.Fatalf("Unable to set urlpath: %s", err)
-		}
 
 		expected := test.expectedOutFile
 
-		if p.OutFile != expected {
-			t.Errorf("%s => p.OutFile  expected: '%s', got: '%s'", test.doc, expected, p.OutFile)
+		if p.TargetPath() != expected {
+			t.Errorf("%s => OutFile  expected: '%s', got: '%s'", test.doc, expected, p.TargetPath())
 		}
 
 		if p.Section != test.expectedSection {
@@ -240,7 +236,7 @@
 		{"sect/doc3.html", "<html><head></head><body><h1>doc3</h1>\n\n<p><em>some</em> content</p>\n</body></html>"},
 		{"sect/doc4.html", "<html><head></head><body><h1>doc4</h1>\n\n<p><em>some content</em></p>\n</body></html>"},
 		{"sect/doc5.html", "<!DOCTYPE html><html><head><script src=\"http://auth/bub/script.js\"></script></head><body>body5</body></html>"},
-		{"./doc7.html", "<html><head></head><body>doc7 content</body></html>"},
+		{"doc7.html", "<html><head></head><body>doc7 content</body></html>"},
 	}
 
 	for _, test := range tests {