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

Updates #4190
This commit is contained in:
Bjørn Erik Pedersen 2017-12-28 11:32:02 +01:00
parent 3cdf19e9b7
commit 1b0780dbeb
No known key found for this signature in database
GPG key ID: 330E6E2BD4859D8F
5 changed files with 35 additions and 15 deletions

View file

@ -1940,18 +1940,11 @@ func (p *Page) addLangPathPrefixIfFlagSet(outfile string, should bool) string {
} }
func sectionsFromDir(dirname string) []string { func sectionsFromDir(dirname string) []string {
sections := strings.Split(dirname, helpers.FilePathSeparator) dirname = strings.Trim(dirname, helpers.FilePathSeparator)
if len(sections) == 1 { if dirname == "" {
if sections[0] == "" { return nil
return nil
}
return sections
} }
if len(sections) > 1 && sections[0] == "" { return strings.Split(dirname, helpers.FilePathSeparator)
return sections[1:]
}
return sections
} }
const ( const (

View file

@ -134,7 +134,6 @@ func TestPageBundlerSite(t *testing.T) {
th.assertFileContent(filepath.FromSlash("/work/public/cpath/2017/pageslug/cindex.html"), "TheContent") th.assertFileContent(filepath.FromSlash("/work/public/cpath/2017/pageslug/cindex.html"), "TheContent")
assert.Equal("/a/b/", leafBundle2.RelPermalink()) assert.Equal("/a/b/", leafBundle2.RelPermalink())
} }
}) })

View file

@ -21,6 +21,8 @@ import (
"regexp" "regexp"
"strconv" "strconv"
"strings" "strings"
"github.com/gohugoio/hugo/helpers"
) )
// pathPattern represents a string which builds up a URL from attributes // pathPattern represents a string which builds up a URL from attributes
@ -160,7 +162,8 @@ func pageToPermalinkFilename(p *Page, _ string) (string, error) {
name := p.File.TranslationBaseName() name := p.File.TranslationBaseName()
if name == "index" { if name == "index" {
// Page bundles; the directory name will hopefully have a better name. // 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 return p.s.PathSpec.URLize(name), nil

View file

@ -162,9 +162,12 @@ func (fi *FileInfo) init() {
} }
func (sp *SourceSpec) NewFileInfo(baseDir, filename string, fi os.FileInfo) *FileInfo { func (sp *SourceSpec) NewFileInfo(baseDir, filename string, fi os.FileInfo) *FileInfo {
dir, name := filepath.Split(filename)
dir = strings.TrimSuffix(dir, helpers.FilePathSeparator) dir, name := filepath.Split(filename)
if !strings.HasSuffix(dir, helpers.FilePathSeparator) {
dir = dir + helpers.FilePathSeparator
}
baseDir = strings.TrimSuffix(baseDir, helpers.FilePathSeparator) baseDir = strings.TrimSuffix(baseDir, helpers.FilePathSeparator)
relDir := "" relDir := ""

View file

@ -14,9 +14,31 @@
package source package source
import ( import (
"path/filepath"
"testing" "testing"
"github.com/stretchr/testify/require"
) )
func TestFileInfo(t *testing.T) { 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)
}
} }