mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-28 22:21:46 -05:00
parent
d1661b823a
commit
9f74dc2a52
3 changed files with 26 additions and 5 deletions
|
@ -101,7 +101,14 @@ func (fs *RootMappingFs) Stat(name string) (os.FileInfo, error) {
|
||||||
return newRootMappingDirFileInfo(name), nil
|
return newRootMappingDirFileInfo(name), nil
|
||||||
}
|
}
|
||||||
realName := fs.realName(name)
|
realName := fs.realName(name)
|
||||||
return fs.Fs.Stat(realName)
|
|
||||||
|
fi, err := fs.Fs.Stat(realName)
|
||||||
|
if rfi, ok := fi.(RealFilenameInfo); ok {
|
||||||
|
return rfi, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &realFilenameInfo{FileInfo: fi, realFilename: realName}, err
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *RootMappingFs) isRoot(name string) bool {
|
func (fs *RootMappingFs) isRoot(name string) bool {
|
||||||
|
@ -126,12 +133,15 @@ func (fs *RootMappingFs) Open(name string) (afero.File, error) {
|
||||||
// It attempts to use Lstat if supported or defers to the os. In addition to
|
// It attempts to use Lstat if supported or defers to the os. In addition to
|
||||||
// the FileInfo, a boolean is returned telling whether Lstat was called.
|
// the FileInfo, a boolean is returned telling whether Lstat was called.
|
||||||
func (fs *RootMappingFs) LstatIfPossible(name string) (os.FileInfo, bool, error) {
|
func (fs *RootMappingFs) LstatIfPossible(name string) (os.FileInfo, bool, error) {
|
||||||
|
|
||||||
if fs.isRoot(name) {
|
if fs.isRoot(name) {
|
||||||
return newRootMappingDirFileInfo(name), false, nil
|
return newRootMappingDirFileInfo(name), false, nil
|
||||||
}
|
}
|
||||||
name = fs.realName(name)
|
name = fs.realName(name)
|
||||||
|
|
||||||
if ls, ok := fs.Fs.(afero.Lstater); ok {
|
if ls, ok := fs.Fs.(afero.Lstater); ok {
|
||||||
return ls.LstatIfPossible(name)
|
fi, b, err := ls.LstatIfPossible(name)
|
||||||
|
return &realFilenameInfo{FileInfo: fi, realFilename: name}, b, err
|
||||||
}
|
}
|
||||||
fi, err := fs.Stat(name)
|
fi, err := fs.Stat(name)
|
||||||
return fi, false, err
|
return fi, false, err
|
||||||
|
|
|
@ -50,6 +50,7 @@ func TestRootMappingFsDirnames(t *testing.T) {
|
||||||
fif, err := rfs.Stat(filepath.Join("cf2", testfile))
|
fif, err := rfs.Stat(filepath.Join("cf2", testfile))
|
||||||
assert.NoError(err)
|
assert.NoError(err)
|
||||||
assert.Equal("myfile.txt", fif.Name())
|
assert.Equal("myfile.txt", fif.Name())
|
||||||
|
assert.Equal("f2t/myfile.txt", fif.(RealFilenameInfo).RealFilename())
|
||||||
|
|
||||||
root, err := rfs.Open(filepathSeparator)
|
root, err := rfs.Open(filepathSeparator)
|
||||||
assert.NoError(err)
|
assert.NoError(err)
|
||||||
|
|
|
@ -28,6 +28,10 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/gohugoio/hugo/hugofs"
|
||||||
|
|
||||||
|
"github.com/gohugoio/hugo/common/herrors"
|
||||||
|
|
||||||
_errors "github.com/pkg/errors"
|
_errors "github.com/pkg/errors"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/common/maps"
|
"github.com/gohugoio/hugo/common/maps"
|
||||||
|
@ -776,7 +780,7 @@ func (s *Site) processPartial(events []fsnotify.Event) (whatChanged, error) {
|
||||||
|
|
||||||
if len(dataChanged) > 0 {
|
if len(dataChanged) > 0 {
|
||||||
if err := s.readDataFromSourceFS(); err != nil {
|
if err := s.readDataFromSourceFS(); err != nil {
|
||||||
s.Log.ERROR.Println(err)
|
return whatChanged{}, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -884,8 +888,14 @@ func (s *Site) handleDataFile(r source.ReadableFile) error {
|
||||||
|
|
||||||
data, err := s.readData(r)
|
data, err := s.readData(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.Log.ERROR.Printf("Failed to read data from %s: %s", filepath.Join(r.Path(), r.LogicalName()), err)
|
realFilename := r.FileInfo().(hugofs.RealFilenameInfo).RealFilename()
|
||||||
return nil
|
err, _ = herrors.WithFileContextForFile(
|
||||||
|
_errors.Wrapf(err, "failed to read data file"),
|
||||||
|
realFilename,
|
||||||
|
realFilename,
|
||||||
|
s.SourceSpec.Fs.Source,
|
||||||
|
herrors.SimpleLineMatcher)
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if data == nil {
|
if data == nil {
|
||||||
|
|
Loading…
Reference in a new issue