mirror of
				https://github.com/gohugoio/hugo.git
				synced 2024-05-11 05:54:58 +00:00 
			
		
		
		
	@@ -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 {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user