From 4d912e2aad39bfe8d76672cf53b01317792e02c5 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Bj=C3=B8rn=20Erik=20Pedersen?=
 <bjorn.erik.pedersen@gmail.com>
Date: Thu, 25 Jan 2018 10:36:53 +0100
Subject: [PATCH] hugolib, output: Fix robots.txt in multihost mode

Fixes #4193
---
 hugolib/site_render.go | 29 +++++++++++++----------------
 output/outputFormat.go |  8 ++++++++
 2 files changed, 21 insertions(+), 16 deletions(-)

diff --git a/hugolib/site_render.go b/hugolib/site_render.go
index 4848db59..dc94ddce 100644
--- a/hugolib/site_render.go
+++ b/hugolib/site_render.go
@@ -19,11 +19,7 @@ import (
 	"strings"
 	"sync"
 
-	"github.com/gohugoio/hugo/helpers"
-
 	"github.com/gohugoio/hugo/output"
-
-	bp "github.com/gohugoio/hugo/bufferpool"
 )
 
 // renderPages renders pages each corresponding to a markdown file.
@@ -368,26 +364,27 @@ func (s *Site) renderRobotsTXT() error {
 		return nil
 	}
 
-	n := s.newNodePage(kindRobotsTXT)
-	if err := n.initTargetPathDescriptor(); err != nil {
+	p := s.newNodePage(kindRobotsTXT)
+	if err := p.initTargetPathDescriptor(); err != nil {
 		return err
 	}
-	n.Data["Pages"] = s.Pages
-	n.Pages = s.Pages
+	p.Data["Pages"] = s.Pages
+	p.Pages = s.Pages
 
 	rLayouts := []string{"robots.txt", "_default/robots.txt", "_internal/_default/robots.txt"}
-	outBuffer := bp.GetBuffer()
-	defer bp.PutBuffer(outBuffer)
-	if err := s.renderForLayouts("robots", n, outBuffer, s.appendThemeTemplates(rLayouts)...); err != nil {
-		helpers.DistinctWarnLog.Println(err)
-		return nil
+
+	pageOutput, err := newPageOutput(p, false, output.RobotsTxtFormat)
+	if err != nil {
+		return err
 	}
 
-	if outBuffer.Len() == 0 {
-		return nil
+	targetPath, err := pageOutput.targetPath()
+	if err != nil {
+		s.Log.ERROR.Printf("Failed to create target path for page %q: %s", p, err)
 	}
 
-	return s.publish(&s.PathSpec.ProcessingStats.Pages, "robots.txt", outBuffer)
+	return s.renderAndWritePage(&s.PathSpec.ProcessingStats.Pages, "Robots Txt", targetPath, pageOutput, s.appendThemeTemplates(rLayouts)...)
+
 }
 
 // renderAliases renders shell pages that simply have a redirect in the header.
diff --git a/output/outputFormat.go b/output/outputFormat.go
index fbc9f20c..0920e573 100644
--- a/output/outputFormat.go
+++ b/output/outputFormat.go
@@ -125,6 +125,14 @@ var (
 		Rel:         "alternate",
 	}
 
+	RobotsTxtFormat = Format{
+		Name:        "ROBOTS",
+		MediaType:   media.TextType,
+		BaseName:    "robots",
+		IsPlainText: true,
+		Rel:         "alternate",
+	}
+
 	RSSFormat = Format{
 		Name:      "RSS",
 		MediaType: media.RSSType,
-- 
2.30.2