Skip to content

Commit

Permalink
Allow date and slug from filename for leaf bundles
Browse files Browse the repository at this point in the history
Fixes #4558
  • Loading branch information
Japanuspus authored and bep committed Oct 16, 2018
1 parent 35fbfb1 commit 1f42e47
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 4 deletions.
2 changes: 1 addition & 1 deletion hugolib/page.go
Expand Up @@ -1326,7 +1326,7 @@ func (p *Page) update(frontmatter map[string]interface{}) error {
Params: p.params,
Dates: &p.PageDates,
PageURLs: &p.URLPath,
BaseFilename: p.BaseFileName(),
BaseFilename: p.ContentBaseName(),
ModTime: mtime,
GitAuthorDate: gitAuthorDate,
}
Expand Down
3 changes: 2 additions & 1 deletion hugolib/pagemeta/page_frontmatter.go
Expand Up @@ -47,7 +47,8 @@ type FrontMatterDescriptor struct {
// 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.
Expand Down
20 changes: 18 additions & 2 deletions source/fileInfo.go
Expand Up @@ -70,6 +70,10 @@ type File interface {
// 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
Expand Down Expand Up @@ -106,6 +110,7 @@ type FileInfo struct {
relPath string
baseName string
translationBaseName string
contentBaseName string
section string
isLeafBundle bool

Expand Down Expand Up @@ -144,6 +149,13 @@ func (fi *FileInfo) BaseFileName() string { return fi.baseName }
// 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()
Expand Down Expand Up @@ -177,11 +189,15 @@ func (fi *FileInfo) init() {
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))
})
}

Expand Down
13 changes: 13 additions & 0 deletions source/fileInfo_test.go
Expand Up @@ -94,4 +94,17 @@ func TestFileInfoLanguage(t *testing.T) {

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())
}

0 comments on commit 1f42e47

Please sign in to comment.