shithub: hugo

Download patch

ref: 1b0780dbebb912a8e86487fc3573c687e0b5171f
parent: 3cdf19e9b7e46c57a9bb43ff02199177feb55768
author: Bjørn Erik Pedersen <[email protected]>
date: Thu Dec 28 06:32:02 EST 2017

source: Make sure .File.Dir() ends with a slash

Updates #4190

--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -1940,18 +1940,11 @@
 }
 
 func sectionsFromDir(dirname string) []string {
-	sections := strings.Split(dirname, helpers.FilePathSeparator)
-	if len(sections) == 1 {
-		if sections[0] == "" {
-			return nil
-		}
-		return sections
+	dirname = strings.Trim(dirname, helpers.FilePathSeparator)
+	if dirname == "" {
+		return nil
 	}
-	if len(sections) > 1 && sections[0] == "" {
-		return sections[1:]
-	}
-
-	return sections
+	return strings.Split(dirname, helpers.FilePathSeparator)
 }
 
 const (
--- a/hugolib/page_bundler_test.go
+++ b/hugolib/page_bundler_test.go
@@ -134,7 +134,6 @@
 					th.assertFileContent(filepath.FromSlash("/work/public/cpath/2017/pageslug/cindex.html"), "TheContent")
 
 					assert.Equal("/a/b/", leafBundle2.RelPermalink())
-
 				}
 
 			})
--- a/hugolib/permalinks.go
+++ b/hugolib/permalinks.go
@@ -21,6 +21,8 @@
 	"regexp"
 	"strconv"
 	"strings"
+
+	"github.com/gohugoio/hugo/helpers"
 )
 
 // pathPattern represents a string which builds up a URL from attributes
@@ -160,7 +162,8 @@
 	name := p.File.TranslationBaseName()
 	if name == "index" {
 		// Page bundles; the directory name will hopefully have a better name.
-		_, name = filepath.Split(p.File.Dir())
+		dir := strings.TrimSuffix(p.File.Dir(), helpers.FilePathSeparator)
+		_, name = filepath.Split(dir)
 	}
 
 	return p.s.PathSpec.URLize(name), nil
--- a/source/fileInfo.go
+++ b/source/fileInfo.go
@@ -162,9 +162,12 @@
 }
 
 func (sp *SourceSpec) NewFileInfo(baseDir, filename string, fi os.FileInfo) *FileInfo {
+
 	dir, name := filepath.Split(filename)
+	if !strings.HasSuffix(dir, helpers.FilePathSeparator) {
+		dir = dir + helpers.FilePathSeparator
+	}
 
-	dir = strings.TrimSuffix(dir, helpers.FilePathSeparator)
 	baseDir = strings.TrimSuffix(baseDir, helpers.FilePathSeparator)
 
 	relDir := ""
--- a/source/fileInfo_test.go
+++ b/source/fileInfo_test.go
@@ -14,9 +14,31 @@
 package source
 
 import (
+	"path/filepath"
 	"testing"
+
+	"github.com/stretchr/testify/require"
 )
 
 func TestFileInfo(t *testing.T) {
+	assert := require.New(t)
+
+	s := newTestSourceSpec()
+
+	for _, this := range []struct {
+		base     string
+		filename string
+		assert   func(f *FileInfo)
+	}{
+		{"/a/", filepath.FromSlash("/a/b/page.md"), func(f *FileInfo) {
+			assert.Equal(filepath.FromSlash("/a/b/page.md"), f.Filename())
+			assert.Equal(filepath.FromSlash("b/"), f.Dir())
+			assert.Equal(filepath.FromSlash("b/page.md"), f.Path())
+
+		}},
+	} {
+		f := s.NewFileInfo(this.base, this.filename, nil)
+		this.assert(f)
+	}
 
 }