return newRootMappingDirFileInfo(name), nil
}
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 {
// 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.
func (fs *RootMappingFs) LstatIfPossible(name string) (os.FileInfo, bool, error) {
+
if fs.isRoot(name) {
return newRootMappingDirFileInfo(name), false, nil
}
name = fs.realName(name)
+
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)
return fi, false, err
fif, err := rfs.Stat(filepath.Join("cf2", testfile))
assert.NoError(err)
assert.Equal("myfile.txt", fif.Name())
+ assert.Equal("f2t/myfile.txt", fif.(RealFilenameInfo).RealFilename())
root, err := rfs.Open(filepathSeparator)
assert.NoError(err)
"strings"
"time"
+ "github.com/gohugoio/hugo/hugofs"
+
+ "github.com/gohugoio/hugo/common/herrors"
+
_errors "github.com/pkg/errors"
"github.com/gohugoio/hugo/common/maps"
if len(dataChanged) > 0 {
if err := s.readDataFromSourceFS(); err != nil {
- s.Log.ERROR.Println(err)
+ return whatChanged{}, err
}
}
data, err := s.readData(r)
if err != nil {
- s.Log.ERROR.Printf("Failed to read data from %s: %s", filepath.Join(r.Path(), r.LogicalName()), err)
- return nil
+ realFilename := r.FileInfo().(hugofs.RealFilenameInfo).RealFilename()
+ err, _ = herrors.WithFileContextForFile(
+ _errors.Wrapf(err, "failed to read data file"),
+ realFilename,
+ realFilename,
+ s.SourceSpec.Fs.Source,
+ herrors.SimpleLineMatcher)
+ return err
}
if data == nil {