hugo

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

git clone git://git.shimmy1996.com/hugo.git
commit 0e87b18b66d2c8ba9e2abc429630cb03f5b093d6
parent e98f885b8af27f5473a89d31d0b1f02e61e8a5ec
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Sun, 23 Apr 2017 22:03:25 +0200

hugolib: Fix handling of zero-length files

This was a regression in Hugo 0.20. This commit makes sure that zeron-length files are not rendered to file.

Fixes #3355

Diffstat:
Mhugolib/site.go | 4++++
Mhugolib/site_render.go | 4++++
Mhugolib/site_test.go | 14++++++++++++++
Mhugolib/testhelpers_test.go | 6++++++
4 files changed, 28 insertions(+), 0 deletions(-)
diff --git a/hugolib/site.go b/hugolib/site.go
@@ -1939,6 +1939,10 @@ func (s *Site) renderAndWritePage(name string, dest string, p *PageOutput, layou
 		return nil
 	}
 
+	if renderBuffer.Len() == 0 {
+		return nil
+	}
+
 	outBuffer := bp.GetBuffer()
 	defer bp.PutBuffer(outBuffer)
 
diff --git a/hugolib/site_render.go b/hugolib/site_render.go
@@ -340,6 +340,10 @@ func (s *Site) renderRobotsTXT() error {
 		return nil
 	}
 
+	if outBuffer.Len() == 0 {
+		return nil
+	}
+
 	return s.publish("robots.txt", outBuffer)
 }
 
diff --git a/hugolib/site_test.go b/hugolib/site_test.go
@@ -376,6 +376,20 @@ func TestNewSiteDefaultLang(t *testing.T) {
 	require.Equal(t, hugofs.Os, s.Fs.Destination)
 }
 
+// Issue #3355
+func TestShouldNotWriteZeroLengthFilesToDestination(t *testing.T) {
+	cfg, fs := newTestCfg()
+
+	writeSource(t, fs, filepath.Join("content", "simple.html"), "simple")
+	writeSource(t, fs, filepath.Join("layouts", "_default/single.html"), "{{.Content}}")
+	writeSource(t, fs, filepath.Join("layouts", "_default/list.html"), "")
+
+	s := buildSingleSite(t, deps.DepsCfg{Fs: fs, Cfg: cfg}, BuildCfg{})
+	th := testHelper{s.Cfg, s.Fs, t}
+
+	th.assertFileNotExist(filepath.Join("public", "index.html"))
+}
+
 // Issue #1176
 func TestSectionNaming(t *testing.T) {
 	t.Parallel()
diff --git a/hugolib/testhelpers_test.go b/hugolib/testhelpers_test.go
@@ -61,6 +61,12 @@ func (th testHelper) assertFileContentRegexp(filename string, matches ...string)
 	}
 }
 
+func (th testHelper) assertFileNotExist(filename string) {
+	exists, err := helpers.Exists(filename, th.Fs.Destination)
+	require.NoError(th.T, err)
+	require.False(th.T, exists)
+}
+
 func (th testHelper) replaceDefaultContentLanguageValue(value string) string {
 	defaultInSubDir := th.Cfg.GetBool("defaultContentLanguageInSubDir")
 	replace := th.Cfg.GetString("defaultContentLanguage") + "/"