shithub: hugo

Download patch

ref: 1f42e47e475c0cd684426dd230de411d4c385a3c
parent: 35fbfb19a173b01bc881f2bbc5d104136633a7ec
author: Janus <[email protected]>
date: Tue Oct 16 19:51:48 EDT 2018

Allow date and slug from filename for leaf bundles 

Fixes #4558

--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -1326,7 +1326,7 @@
 		Params:        p.params,
 		Dates:         &p.PageDates,
 		PageURLs:      &p.URLPath,
-		BaseFilename:  p.BaseFileName(),
+		BaseFilename:  p.ContentBaseName(),
 		ModTime:       mtime,
 		GitAuthorDate: gitAuthorDate,
 	}
--- a/hugolib/pagemeta/page_frontmatter.go
+++ b/hugolib/pagemeta/page_frontmatter.go
@@ -47,7 +47,8 @@
 	// This the Page's front matter.
 	Frontmatter map[string]interface{}
 
-	// This is the Page's base filename, e.g. page.md.
+	// This is the Page's base filename (BaseFilename), e.g. page.md., or
+	// if page is a leaf bundle, the bundle folder name (ContentBaseName).
 	BaseFilename string
 
 	// The content file's mod time.
--- a/source/fileInfo.go
+++ b/source/fileInfo.go
@@ -70,6 +70,10 @@
 	// not even the optional language extension part.
 	TranslationBaseName() string
 
+	// ContentBaseName is a either TranslationBaseName or name of containing folder
+	// if file is a leaf bundle.
+	ContentBaseName() string
+
 	// UniqueID is the MD5 hash of the file's path and is for most practical applications,
 	// Hugo content files being one of them, considered to be unique.
 	UniqueID() string
@@ -106,6 +110,7 @@
 	relPath             string
 	baseName            string
 	translationBaseName string
+	contentBaseName     string
 	section             string
 	isLeafBundle        bool
 
@@ -144,6 +149,13 @@
 // language segement (ie. "page").
 func (fi *FileInfo) TranslationBaseName() string { return fi.translationBaseName }
 
+// ContentBaseName is a either TranslationBaseName or name of containing folder
+// if file is a leaf bundle.
+func (fi *FileInfo) ContentBaseName() string {
+	fi.init()
+	return fi.contentBaseName
+}
+
 // Section returns a file's section.
 func (fi *FileInfo) Section() string {
 	fi.init()
@@ -177,11 +189,15 @@
 		if (!fi.isLeafBundle && len(parts) == 1) || len(parts) > 1 {
 			section = parts[0]
 		}
-
 		fi.section = section
 
-		fi.uniqueID = helpers.MD5String(filepath.ToSlash(fi.relPath))
+		if fi.isLeafBundle && len(parts) > 0 {
+			fi.contentBaseName = parts[len(parts)-1]
+		} else {
+			fi.contentBaseName = fi.translationBaseName
+		}
 
+		fi.uniqueID = helpers.MD5String(filepath.ToSlash(fi.relPath))
 	})
 }
 
--- a/source/fileInfo_test.go
+++ b/source/fileInfo_test.go
@@ -94,4 +94,17 @@
 
 	assert.Equal("sv", fiSv.Lang())
 	assert.Equal("en", fiEn.Lang())
+
+	// test contentBaseName implementation
+	fi := s.NewFileInfo("", "2018-10-01-contentbasename.md", false, nil)
+	assert.Equal("2018-10-01-contentbasename", fi.ContentBaseName())
+
+	fi = s.NewFileInfo("", "2018-10-01-contentbasename.en.md", false, nil)
+	assert.Equal("2018-10-01-contentbasename", fi.ContentBaseName())
+
+	fi = s.NewFileInfo("", filepath.Join("2018-10-01-contentbasename", "index.en.md"), true, nil)
+	assert.Equal("2018-10-01-contentbasename", fi.ContentBaseName())
+
+	fi = s.NewFileInfo("", filepath.Join("2018-10-01-contentbasename", "_index.en.md"), false, nil)
+	assert.Equal("_index", fi.ContentBaseName())
 }