shithub: hugo

Download patch

ref: cb00917af69bfd6fbe79dcf094956b6af33669e5
parent: 4004687fb2da9228203fec39b914ba534c934966
author: Noah Campbell <[email protected]>
date: Tue Sep 3 16:52:50 EDT 2013

Expand the ShowPlan functionality

--- a/hugolib/planner.go
+++ b/hugolib/planner.go
@@ -12,10 +12,19 @@
 
 	for _, file := range s.Files {
 		fmt.Fprintf(out, "%s\n", file)
+		fmt.Fprintf(out, " canonical => ")
 		if s.Target == nil {
-			fmt.Fprintf(out, " *implicit* => %s\n", "!no target specified!")
+			fmt.Fprintf(out, "%s\n", "!no target specified!")
 			continue
 		}
+
+		trns, err := s.Target.Translate(file)
+		if err != nil {
+			return err
+		}
+
+		fmt.Fprintf(out, "%s\n", trns)
+
 	}
 	return
 }
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -74,7 +74,7 @@
 	Info       SiteInfo
 	Shortcodes map[string]ShortcodeFunc
 	timer      *nitro.B
-	Target     target.Publisher
+	Target     target.Output
 }
 
 type SiteInfo struct {
@@ -114,7 +114,8 @@
 
 func (s *Site) Analyze() {
 	s.Process()
-	s.checkDescriptions()
+	s.initTarget()
+	s.ShowPlan(os.Stdout)
 }
 
 func (s *Site) prepTemplates() {
@@ -173,7 +174,7 @@
 func (s *Site) checkDescriptions() {
 	for _, p := range s.Pages {
 		if len(p.Description) < 60 {
-			fmt.Print(p.FileName + " ")
+			fmt.Println(p.FileName + " ")
 		}
 	}
 }
@@ -543,7 +544,7 @@
 
 		if a := s.Tmpl.Lookup("rss.xml"); a != nil {
 			// XML Feed
-			n.Url = Urlize(section + ".xml")
+			n.Url = helpers.Urlize(section + ".xml")
 			n.Permalink = template.HTML(string(n.Site.BaseUrl) + n.Url)
 			y := s.NewXMLBuffer()
 			s.Tmpl.ExecuteTemplate(y, "rss.xml", n)
@@ -647,8 +648,7 @@
 	return bytes.NewBufferString(header)
 }
 
-func (s *Site) WritePublic(path string, content []byte) (err error) {
-
+func (s *Site) initTarget() {
 	if s.Target == nil {
 		s.Target = &target.Filesystem{
 			PublishDir: s.absPublishDir(),
@@ -655,6 +655,10 @@
 			UglyUrls:   s.Config.UglyUrls,
 		}
 	}
+}
+
+func (s *Site) WritePublic(path string, content []byte) (err error) {
+	s.initTarget()
 
 	if s.Config.Verbose {
 		fmt.Println(path)
--- a/hugolib/site_show_plan_test.go
+++ b/hugolib/site_show_plan_test.go
@@ -3,6 +3,7 @@
 import (
 	"bytes"
 	"testing"
+	"github.com/spf13/hugo/target"
 )
 
 func checkShowPlanExpected(t *testing.T, expected, got string) {
@@ -30,6 +31,28 @@
 		t.Errorf("ShowPlan unexpectedly returned an error: %s", err)
 	}
 
-	expected := "foo/bar/file.md\n *implicit* => !no target specified!\n"
+	expected := "foo/bar/file.md\n canonical => !no target specified!\n"
 	checkShowPlanExpected(t, expected, out.String())
 }
+
+func TestFileTarget(t *testing.T) {
+	s := &Site{Target: new(target.Filesystem)}
+	s.Files = append(s.Files, "foo/bar/file.md")
+	out := new(bytes.Buffer)
+	s.ShowPlan(out)
+
+	expected := "foo/bar/file.md\n canonical => foo/bar/file/index.html\n"
+	checkShowPlanExpected(t, expected, out.String())
+}
+
+func TestFileTargetUgly(t *testing.T) {
+	s := &Site{Target: &target.Filesystem{UglyUrls: true}}
+	s.Files = append(s.Files, "foo/bar/file.md")
+	out := new(bytes.Buffer)
+	s.ShowPlan(out)
+
+	expected := "foo/bar/file.md\n canonical => foo/bar/file.html\n"
+	checkShowPlanExpected(t, expected, out.String())
+}
+
+
--- a/hugolib/site_url_test.go
+++ b/hugolib/site_url_test.go
@@ -40,6 +40,10 @@
 	return
 }
 
+func (t *InMemoryTarget) Translate(label string) (dest string, err error) {
+	return label, nil
+}
+
 func TestPageCount(t *testing.T) {
 	target := new(InMemoryTarget)
 	s := &Site{Target: target}
--- a/target/file.go
+++ b/target/file.go
@@ -16,6 +16,11 @@
 	Translate(string) (string, error)
 }
 
+type Output interface {
+	Publisher
+	Translator
+}
+
 type Filesystem struct {
 	UglyUrls         bool
 	DefaultExtension string
@@ -52,18 +57,24 @@
 	if src == "/" {
 		return "index.html", nil
 	}
-	if fs.UglyUrls {
-		return src, nil
-	}
 
 	dir, file := path.Split(src)
 	ext := fs.extension(path.Ext(file))
 	name := filename(file)
 
+	if fs.UglyUrls {
+		return path.Join(dir, fmt.Sprintf("%s%s", name, ext)), nil
+	}
+
 	return path.Join(dir, name, fmt.Sprintf("index%s", ext)), nil
 }
 
 func (fs *Filesystem) extension(ext string) string {
+	switch ext {
+	case ".md", ".rst": // TODO make this list configurable.  page.go has the list of markup types.
+		return ".html"
+	}
+
 	if ext != "" {
 		return ext
 	}