shithub: hugo

Download patch

ref: c43b512b4700f76ac77f12d632bb030c3a241393
parent: 19f2e729135af700c5d4aa06e7b3540e6d4847fd
author: Bjørn Erik Pedersen <[email protected]>
date: Tue Jun 20 13:20:08 EDT 2017

output: Identify extension-less text types as text

See #3614

--- a/output/outputFormat.go
+++ b/output/outputFormat.go
@@ -219,7 +219,12 @@
 	}
 
 	if ext != "" {
-		return formats.GetBySuffix(ext)
+		f, found = formats.GetBySuffix(ext)
+		if !found && len(parts) == 2 {
+			// For extensionless output formats (e.g. Netlify's _redirects)
+			// we must fall back to using the extension as format lookup.
+			f, found = formats.GetByName(ext)
+		}
 	}
 	return
 }
--- a/output/outputFormat_test.go
+++ b/output/outputFormat_test.go
@@ -91,6 +91,47 @@
 	require.False(t, found)
 }
 
+func TestGetFormatByFilename(t *testing.T) {
+	noExtNoDelimMediaType := media.TextType
+	noExtNoDelimMediaType.Suffix = ""
+	noExtNoDelimMediaType.Delimiter = ""
+
+	noExtMediaType := media.TextType
+	noExtMediaType.Suffix = ""
+
+	var (
+		noExtDelimFormat = Format{
+			Name:      "NEM",
+			MediaType: noExtNoDelimMediaType,
+			BaseName:  "_redirects",
+		}
+		noExt = Format{
+			Name:      "NEX",
+			MediaType: noExtMediaType,
+			BaseName:  "next",
+		}
+	)
+
+	formats := Formats{AMPFormat, HTMLFormat, noExtDelimFormat, noExt, CalendarFormat}
+	f, found := formats.FromFilename("my.amp.html")
+	require.True(t, found)
+	require.Equal(t, AMPFormat, f)
+	f, found = formats.FromFilename("my.ics")
+	require.True(t, found)
+	f, found = formats.FromFilename("my.html")
+	require.True(t, found)
+	require.Equal(t, HTMLFormat, f)
+	f, found = formats.FromFilename("my.nem")
+	require.True(t, found)
+	require.Equal(t, noExtDelimFormat, f)
+	f, found = formats.FromFilename("my.nex")
+	require.True(t, found)
+	require.Equal(t, noExt, f)
+	f, found = formats.FromFilename("my.css")
+	require.False(t, found)
+
+}
+
 func TestDecodeFormats(t *testing.T) {
 
 	mediaTypes := media.Types{media.JSONType, media.XMLType}