hugolib: Fix handling of zero-length files
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 23 Apr 2017 20:03:25 +0000 (22:03 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 23 Apr 2017 20:46:01 +0000 (22:46 +0200)
This was a regression in Hugo 0.20. This commit makes sure that zeron-length files are not rendered to file.

Fixes #3355

hugolib/site.go
hugolib/site_render.go
hugolib/site_test.go
hugolib/testhelpers_test.go

index f2ebee4ccab4a22c2ac7a6a194d99b65d0cbfb12..394549c4176cf2d152732e3da71a2d9bb04cd803 100644 (file)
@@ -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)
 
index d5b16975dcbb34ef1872425d31be70546cf401d4..a82c93137f795b1cc38eda7a23573234216bd9d1 100644 (file)
@@ -340,6 +340,10 @@ func (s *Site) renderRobotsTXT() error {
                return nil
        }
 
+       if outBuffer.Len() == 0 {
+               return nil
+       }
+
        return s.publish("robots.txt", outBuffer)
 }
 
index e18456bf9005cda9422ba947588b2bb0c44ea756..1df3c81c7930ad43296fce40436a2b9a41f495a7 100644 (file)
@@ -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()
index cb529204a4d3f621c78b60649e1fda5a253b3b1a..f82399eef4bd0e2a98ac6de2fe085a45c4c8ae09 100644 (file)
@@ -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") + "/"