hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit 6b552db75f00cae14377e38327fd168f6398f22d
parent e56ecab1575f1b25552988b9efff2836f05f87f9
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Mon,  8 Aug 2016 09:05:16 +0200

Make sure drafts etc. are not processed

See #2309

Diffstat:
Mhugolib/hugo_sites.go | 2+-
Mhugolib/hugo_sites_test.go | 36++++++++++++++++++++++++++++++++++++
Mhugolib/site.go | 12++++++++----
3 files changed, 45 insertions(+), 5 deletions(-)
diff --git a/hugolib/hugo_sites.go b/hugolib/hugo_sites.go
@@ -242,7 +242,7 @@ func (h *HugoSites) Rebuild(config BuildCfg, events ...fsnotify.Event) error {
 		s.resetBuildState()
 	}
 
-	sourceChanged, err := firstSite.ReBuild(events)
+	sourceChanged, err := firstSite.reBuild(events)
 
 	if err != nil {
 		return err
diff --git a/hugolib/hugo_sites_test.go b/hugolib/hugo_sites_test.go
@@ -1,6 +1,7 @@
 package hugolib
 
 import (
+	"bytes"
 	"fmt"
 	"strings"
 	"testing"
@@ -141,6 +142,9 @@ func TestMultiSitesBuild(t *testing.T) {
 	assert.False(t, strings.Contains(string(doc1en.Content), "&laquo;"), string(doc1en.Content))
 	assert.True(t, strings.Contains(string(doc1en.Content), "&ldquo;"), string(doc1en.Content))
 
+	// Check that the drafts etc. are not built/processed/rendered.
+	assertShouldNotBuild(t, sites)
+
 }
 
 func TestMultiSitesRebuild(t *testing.T) {
@@ -303,6 +307,30 @@ func TestMultiSitesRebuild(t *testing.T) {
 
 		this.assertFunc(t)
 	}
+
+	// Check that the drafts etc. are not built/processed/rendered.
+	assertShouldNotBuild(t, sites)
+
+}
+
+func assertShouldNotBuild(t *testing.T, sites *HugoSites) {
+	s := sites.Sites[0]
+
+	for _, p := range s.rawAllPages {
+		// No HTML when not processed
+		require.Equal(t, p.shouldBuild(), bytes.Contains(p.rawContent, []byte("</")), p.BaseFileName()+": "+string(p.rawContent))
+		require.Equal(t, p.shouldBuild(), p.Content != "", p.BaseFileName())
+
+		require.Equal(t, p.shouldBuild(), p.Content != "", p.BaseFileName())
+
+		filename := filepath.Join("public", p.TargetPath())
+		if strings.HasSuffix(filename, ".html") {
+			// TODO(bep) the end result is correct, but it is weird that we cannot use targetPath directly here.
+			filename = strings.Replace(filename, ".html", "/index.html", 1)
+		}
+
+		require.Equal(t, p.shouldBuild(), destinationExists(filename), filename)
+	}
 }
 
 func TestAddNewLanguage(t *testing.T) {
@@ -579,6 +607,14 @@ func readDestination(t *testing.T, filename string) string {
 	return readFileFromFs(t, hugofs.Destination(), filename)
 }
 
+func destinationExists(filename string) bool {
+	b, err := helpers.Exists(filename, hugofs.Destination())
+	if err != nil {
+		panic(err)
+	}
+	return b
+}
+
 func readSource(t *testing.T, filename string) string {
 	return readFileFromFs(t, hugofs.Source(), filename)
 }
diff --git a/hugolib/site.go b/hugolib/site.go
@@ -437,9 +437,9 @@ func (s *Site) timerStep(step string) {
 	s.timer.Step(step)
 }
 
-// ReBuild partially rebuilds a site given the filesystem events.
+// reBuild partially rebuilds a site given the filesystem events.
 // It returns whetever the content source was changed.
-func (s *Site) ReBuild(events []fsnotify.Event) (bool, error) {
+func (s *Site) reBuild(events []fsnotify.Event) (bool, error) {
 
 	jww.DEBUG.Printf("Rebuild for events %q", events)
 
@@ -555,7 +555,9 @@ func (s *Site) ReBuild(events []fsnotify.Event) (bool, error) {
 		// Do not need to read the files again, but they need conversion
 		// for shortocde re-rendering.
 		for _, p := range s.rawAllPages {
-			pageChan <- p
+			if p.shouldBuild() {
+				pageChan <- p
+			}
 		}
 	}
 
@@ -1016,7 +1018,9 @@ func (s *Site) convertSource() chan error {
 	go converterCollator(s, results, errs)
 
 	for _, p := range s.rawAllPages {
-		pageChan <- p
+		if p.shouldBuild() {
+			pageChan <- p
+		}
 	}
 
 	for _, f := range s.Files {